По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В этой статье мы рассмотрим IPv6 (Internet Protocol version 6), причины, по которым он нам нужен, а также следующий аспект: различия с IPv4. Пока существует Интернет, используется протокол IPv4 для адресации и маршрутизации. Однако проблема с IPv4 заключается в том, что у нас закончились адреса. Так что же случилось с IPv4? Что же пошло не так? У нас есть 32 бита, которые дают нам 4 294 467 295 IP-адресов. Когда появился Интернет, мы получили сети класса А, В или С. Класс С дает нам блок из 256 IP-адресов, класс B - это 65.535 IP-адресов, а класс A даже 16 777 216 IP-адресов. Крупные компании, такие как Apple, Microsoft, IBM и др. имеют одну или несколько сетей класса А. Но действительно ли им нужно 16 миллионов IP-адресов? Большинство из этих IP-адресов не были использованы. Поэтому мы начали использовать VLSM, чтобы использовать любую маску подсети, которая нам нравится, и создавать более мелкие подсети, а не только сети класса A, B или C. У нас также имеется NAT и PAT, следовательно, мы имеем много частных IP-адресов за одним публичным IP-адресом. Тем не менее интернет вырос так, как никто не ожидал 20 лет назад. Несмотря на все наши крутые трюки, такие как VLSM и NAT/PAT, нам нужно было больше IP-адресов, и поэтому родился IPv6. А что случилось с IPv5? Хороший вопрос ... IP-версия 5 была использована для экспериментального проекта под названием "Протокол интернет-потока". Он определен в RFC, если вас интересуют исторические причины: http://www.faqs.org/rfcs/rfc1819.html IPv6 имеет 128-битные адреса по сравнению с нашими 32-битными IPv4-адресами. Имейте в виду, что каждый дополнительный бит удваивает количество IP-адресов. Таким образом мы переходим от 4 миллиардов к 8 миллиардам, 16,32,64 и т. д. Продолжайте удвоение, пока не достигнете 128-битного уровня. Просто вы увидите, сколько IPv6-адресов это даст нам: 340,282,366,920,938,463,463,374,607,431,768,211,456; Можем ли мы вообще произнести это? Давайте попробуем вот это: 340 - ундециллионов; 282 - дециллионов; 366 - нониллионов; 920 - октиллионов; 938 - септиллионов; 463 - секстиллионов; 463 - квинтильонов; 374 - квадрильонов; 607 - триллионов; 431 - биллионов; 768 - миллионов; 211 - тысяч; 456. Это умопомрачительно... это дает нам достаточное количество IP-адресов для сетей на Земле, Луне, Марсе и остальной Вселенной. IPv6-адреса записываются в шестнадцатеричном формате. IPv4 и IPv6 несовместимы друг с другом, поэтому многие протоколы были обновлены или заменены для работы с IPv6, вот некоторые примеры: OSPF был обновлен с версии 2 (IPv4) до версии 3 (IPv6); ICMP был обновлен до версии ICMP 6; ARP был заменен на NDP (Neighborhood Discovery Protocol). Заголовок пакета IPv6 содержит адреса источника и назначения, но по сравнению с IPv4 он стал намного проще: Вместо того чтобы уже добавлять все поля в заголовок, заголовок IPv6 использует "следующий заголовок", который ссылается на необязательные заголовки. Поскольку заголовок намного проще, маршрутизаторам придется выполнять меньше работы. А как насчет маршрутизации? Есть ли разница между IPv4 и IPv6? Давайте рассмотрим варианты маршрутизации: Static Routing; RIPng; OSPFv3; MP-BGP4; EIGRP. Вы все еще можете использовать статическую маршрутизацию, как и в IPv4, ничего нового здесь нет. RIP был обновлен и теперь называется RIPng или RIP Next Generation. OSPF для IPv4 на самом деле является версией 2, а для IPv6 у нас есть версия 3. Это отдельный протокол, он работает только на IPv6. Есть только незначительные изменения, внесенные в OSPFv3. BGP (Border Gateway Protocol) - это протокол маршрутизации, который объединяет Интернет вместе.MP-BGP расшифровывается как Multi-Protocol BGP, и он может маршрутизировать IPv6. EIGRP также поддерживает IPv6. Просто имейте в виду, что OSPF и EIGRP поддерживают IPv6, но это отдельные протоколы. Если у вас есть сеть с IPv4 и IPv6, вы будете запускать протокол маршрутизации для IPv4 и еще один для IPv6. Запуск IPv4 и IPv6 одновременно называется двойным стеком. Поскольку эти два протокола несовместимы, в будущем будет происходить переход с IPv4 на IPv6. Это означает, что вы будете запускать оба протокола в своей сети и, возможно, однажды вы сможете отключить IPv4, так как весь интернет будет настроен на IPv6. Давайте взглянем на формат IPv6-адреса: 2041:0000:140F:0000:0000:0000:875B:131B Во-первых, он шестнадцатеричный и гораздо длиннее, чем IPv4-адрес. Существует восемь частей, состоящих из 4 шестнадцатеричных цифр каждая, поэтому 128-битный адрес может быть представлен 32-битными шестнадцатеричными символами. Если вы забыли, как работает шестнадцатеричный код, взгляните на таблицу ниже: В шестнадцатеричной системе счисления мы считаем от 0 до F точно так же, как мы считали бы от 0 до 15 в десятичной системе счисления: A = 10; B = 11; C = 12; D = 13; E = 14; F = 15. Использование шестнадцатеричного кода помогает сделать наши адреса короче, но ввод адреса IPv6 - это все еще большая работа. Представьте себе, что вы звоните другу и спрашиваете его, может ли он пинговать IPv6-адрес 2041:0000:140F:0000:0000:0000:875B:131B, чтобы узнать, может ли он достучаться до своего шлюза по умолчанию. Чтобы облегчить нам работу с такими адресами, можно сделать IPv6-адреса короче. Вот пример: Оригинальный: 2041: 0000:140F:0000:0000:0000:875B:131B Сокращенный: 2041: 0000:140F:: 875B:131B Если есть строка нулей, вы можете удалить их, заменив их двойным двоеточием (::). В приведенном выше IPv6-адресе удалены нули, сделав адрес немного короче. Вы можете сделать это только один раз. Мы можем сделать этот IPv6 адрес еще короче используя другой трюк: Сокращенный: 2041: 0000:140F:: 875B:131B; Еще короче: 2041:0:140F:: 875B:131B Если у вас есть блок с 4 нулями, вы можете удалить их и оставить там только один ноль. Мы также можем удалить все впередистоящие нули: Оригинальный: 2001:0001:0002:0003:0004:0005:0006:0007; Сокращенный: 2001:1:2:3:4:5:6:7 Подытожим небольшие правила: Строку нулей можно удалить, оставив только двоеточие (::). Вы можете сделать только это однажды.; 4 нуля можно удалить, оставив только один ноль. Впередиидущие нули могут быть удалены в пределах одного блока.; Вы не можете удалить все нули, иначе ваше устройство, работающее с IPv6 не поймет, где заполнить нули, чтобы снова сделать его 128-битным.; Вычисление префикса IPV6 мы пропустим, так как ресурсов, рассказывающих об этом в сети Интернет, специальных книгах полно. Нет смысла повторяться. Потребуется некоторое время, чтобы привыкнуть к IPv6-адресации и поиску префиксов, но чем больше вы этим занимаетесь, тем дальше становиться проще. В оставшейся части этой статьи мы еще немного поговорим о различных типах адресации IPv6. IPv4-адреса организованы с помощью "системы классов", где класс A, B и C предназначены для одноадресных IP-адресов, а класс D-для многоадресной передачи. Большинство IP-адресов в этих классах являются публичными IP-адресами, а некоторые-частными IP-адресами, предназначенными для наших внутренних сетей. Нет такой вещи, как классы для IPv6, но IANA действительно зарезервировал определенные диапазоны IPv6 для конкретных целей. У нас также есть частные и публичные IPv6-адреса. Первоначально идея IPv4 заключалась в том, что каждый хост, подключенный к Интернету, будет иметь общедоступный IP-адрес. Каждая компания получит сеть класса А, В или С, и сетевые инженеры в компании будут дополнительно подсоединять ее так, чтобы каждый хост и сетевое устройство имели общедоступный IP-адрес. Проблема, однако, заключается в том, что адресное пространство IPv4 было слишком маленьким, и выдавать полные сети A, B или C было не очень разумно. Даже если вам требуется только небольшое количество IP-адресов, вы все равно получите сеть класса C, которая дает вам 254 пригодных для использования IP-адреса. Компания, которой требуется 2.000 IP-адресов, получит класс B, который дает вам более 65.000 IP-адресов. Поскольку у нас заканчивались IP-адреса, мы начали использовать такие вещи, как VLSM (избавляясь от идеи класса A, B, C) и настраивали частные IP-адреса в наших локальных сетях, а вместо этого использовали NAT/PAT. Протокол IPv6 предлагает два варианта для одноадресной рассылки: Global Unicast; Unique Local. Раньше существовал третий диапазон адресов, называемый "site local", который начинался с FEC0:: / 10. Этот диапазон изначально предназначался для использования во внутренних сетях, но был удален из стандарта IPv6. Global Unicast передачи IPv6 похожи на публичные IPv4-адреса. Каждая компания, которая хочет подключиться к интернету с помощью IPv6, получит блок IPv6-адресов, которые они могут дополнительно разделить на более мелкие префиксы, чтобы все их устройства имели уникальный IPv6-адрес. Зарезервированный блок называется префиксом глобальной маршрутизации. Поскольку адресное пространство IPv6 настолько велико, каждый может получить префикс глобальной маршрутизации. Давайте посмотрим, как назначаются префиксы IPv6-адресов. Допустим, компания получает префикс 2001:828:105:45::/64. Как они его получили? Мы пройдемся по этой картине сверху вниз: IANA отвечает за распределение всех префиксов IPv6. Они будут назначать реестрам различные блоки. ARIN - для Северной Америки, RIPE -для Европы, Ближнего Востока и Центральной Азии. Всего таких реестров насчитывается 5. IANA присваивает 2001: 800:: /23 RIPE и 2001: 0400::/23 ARIN (и многие другие префиксы).; ISP, который попадает под реестр RIPE, запрашивает блок пространства IPv6. Они получают от них 2001: 0828:: / 32, которые в дальнейшем могут использовать для клиентов.; ISP дополнительно подсоединит свое адресное пространство 2001:0828::/32 для своих пользователей. В этом примере клиент получает префикс 2001:828:105::/48.; IANA зарезервировала определенные диапазоны адресов IPv6 для различных целей, точно так же, как это было сделано для IPv4. Первоначально они зарезервировали IPv6-адреса, которые с шестнадцатеричными 2 или 3 являются global unicast адресами. Это можно записать как 2000:: / 3. В настоящее время они используют все для global unicast рассылки, которая не зарезервирована для других целей. Некоторые из зарезервированных префиксов являются: FD: Unique Local; FF: Multicast; FE80: Link-Local. Обсудим префиксы local и link-local В моем примере клиент получил 2001: 828:105:: / 48 от провайдера, но прежде чем я смогу что-либо сделать с этим префиксом, мне придется разбить на подсети его для различных VLAN и point-to-point соединений, которые у меня могут быть. Подсети для IPv6 - это примерно то же самое, что и для IPv4, но математика в большинстве случаев проще. Поскольку адресное пространство настолько велико, почти все используют префикс /64 для подсетей. Нет смысла использовать меньшие подсети. При использовании IPv4 у нас была часть "сеть" и "хост", а класс A, B или C определяет, сколько битов мы используем для сетевой части: Когда мы используем подсети в IPv4 мы берем дополнительные биты от части хоста для создания большего количества подсетей: И, конечно, в результате у нас будет меньше хостов на подсеть. Подсети для IPv6 используют аналогичную структуру, которая выглядит следующим образом: Префикс global routing был назначен вам провайдером и в моем примере клиент получил его 2001:828:105::/48. Последние 64 бита называются идентификатором интерфейса, и это эквивалентно части хоста в IPv4. Это оставляет нас с 16 битами в середине, которые я могу использовать для создания подсетей. Если я хочу, я могу взять еще несколько битов из идентификатора интерфейса, чтобы создать еще больше подсетей, но в этом нет необходимости. Используя 16 бит, мы можем создать 65.536 подсетей ...более чем достаточно для большинства из нас. И с 64 битами для идентификатора интерфейса на подсеть, мы можем иметь восемнадцать квинтиллионов, четыреста сорок шесть квадриллионов, семьсот сорок четыре триллиона, семьдесят четыре миллиарда, семьсот девять миллионов, пятьсот пятьдесят одну тысячу, шестьсот с чем-то хостов на подсеть. Этого должно быть более чем достаточно! Использование 64-битного идентификатора интерфейса также очень удобно, потому что он сокращает ваш IPv6-адрес ровно наполовину! Допустим, наш клиент с префиксом 2001: 828: 105:: / 48 хочет создать несколько подсетей для своей внутренней сети. Какие адреса мы можем использовать? 16 бит дает нам 4 шестнадцатеричных символа. Таким образом, все возможные комбинации, которые мы можем сделать с этими 4 символами, являются нашими возможными подсетями. Все, что находится между 0000 и FFFF, является допустимыми подсетями: 2001:828:105:0000::/64; 2001:828:105:0001::/64; 2001:828:105:0002::/64; 2001:828:105:0003::/64; 2001:828:105:0004::/64; 2001:828:105:0005::/64; 2001:828:105:0006::/64; 2001:828:105:0007::/64; 2001:828:105:0008::/64; 2001:828:105:0009::/64; 2001:828:105:000A::/64; 2001:828:105:000B::/64; 2001:828:105:000C::/64; 2001:828:105:000D::/64; 2001:828:105:000E::/64; 2001:828:105:000F::/64; 2001:828:105:0010::/64; 2001:828:105:0011::/64; 2001:828:105:0012::/64; 2001:828:105:0013::/64; 2001:828:105:0014::/64; И так далее. Всего существует 65 535 возможных подсетей, поэтому, к сожалению, я не могу добавить их все в статью...теперь мы можем назначить эти префиксы различным соединениям типа point-to-point, VLAN и т. д.
img
Друзья, сегодня речь пойдет о синтезе речи в Asterisk. Этот простой способ позволит вам озвучивать требуемое голосовое сообщение в структурах IVR или обычных приветствиях. Да где угодно. Профит этого решения: Единый голос для всех аудио – файлов; Кэширование и сохранение озвученных текстов, фраз в виде медиа - файлов, для последующего использования на Asterisk; Получаем токен Приступим. Прежде всего нужно получить API - токен на использование сервиса от Яндекс. Этот процесс расписан в статье по ссылке ниже (раздел Получение API - токена Yandex.SpeechKit): Получение токена Возвращайтесь с токеном и будем приступать к коду :) Кодим! Для начала создадим директорию /var/lib/asterisk/tts/ и дадим права. Там мы будем хранить текстовый файл, благодаря которому, сможем идентифицировать аудио – файлы по совпадению MD5 названия. Внутри файла будет фраза: mkdir /var/lib/asterisk/tts/ chown asterisk:asterisk /var/lib/asterisk/tts/ chmod 775 /var/lib/asterisk/tts/ В зависимости от дистрибутива и вариантов установки IP – АТС Asterisk, звуковые файлы могут располагаться в другой директории. Вы можете самостоятельно поправить это в скрипте. Использовать будем AGI приложение. Традиционно, комментарии к коду прикладываются: #!/usr/bin/php -q <?php error_reporting(0); // выключаем ошибки, необязательно, нужно в процесcе дебага скрипта require('phpagi.php'); $agi = new AGI(); $str = $agi->request['agi_arg_1']; //записываем в переменную текст, который необходимо озвучить $str = iconv('cp1251', 'utf-8', $str); // конвертируем в кириллическую кодировку $md5 = md5($str); //вычисляем md5 - хэш от переменной $str $prefix = '/var/lib/asterisk/sounds/ru/custom/'; //устанавливаем директорию для файлов. Мы ее создавали по ходу движения $filename = $prefix.$md5; //устанавливаем название файла(оно будет равно md5 текста) $format = 'wav'; //устанавливаем формат получаемого файла от Яндекс $quality = 'hi'; //устанавливаем качество $speaker = 'oksana'; //выбираем голос. На момент написания статьи доступны женские голоса: jane, oksana, alyss и omazh и мужские голоса: zahar и ermil. $emotion = 'evil'; // выбираем интонацию голоса, good — радостный, доброжелательный, evil — раздраженный, neutral — нейтральный (используется по умолчанию). Будем злее :) $speed = '0.9'; // данный параметр отвечает за скорость (темп) речи, подбирается опытным путем на слух, в данном случае оптимальный $key = 'Ваш_токен'; //ваш токен, который вы получили ранее. if (!file_exists($filename.'.wav')) { $qs = http_build_query(array("format" => $format,"quality" => $quality,"lang" => "ru-RU","speaker" => $speaker,"speed" => $speed,"key" => $key,"emotion" => $emotion, "text" => $str)); //формируем строку запроса $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: "))); $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); //запрашиваем файл $file = fopen("file1.wav", "w"); //открываем файл для записи fwrite($file, $soundfile); // пишем в файл данные fclose($file); //закрываем файл shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 '.$filename.'.wav'); //конвертируем файл под требования Asterisk и закидываем в директорию для аудио shell_exec('chown asterisk:asterisk '.$filename.'.wav'); shell_exec('chmod 775 '.$filename.'.wav'); // даем файлу нужные пермишны; shell_exec('rm -f file1.wav'); // удаляем файл, который создали в процессе обращения к API; shell_exec('echo '.$str.' > /var/lib/asterisk/tts/'.$md5.'.txt'); // добавляем магии ;-) о ней ниже в тексте статьи. } $agi->exec('Playback',"custom/$md5"); //проигрываем файл звонящему. Скачать скрипт синтеза речи После загрузки файла, сохраните его с расширением .php Сохраняем скрипт как texttospeech.php и закидываем его в директорию /var/lib/asterisk/agi-bin. После, даем последовательность следующих команд: dos2unix /var/lib/asterisk/agi-bin/texttospeech.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/texttospeech.php chmod 775 /var/lib/asterisk/agi-bin/texttospeech.php Как вы могли заметить, скрипт настраивается. Голос, интонация, скорость речи, качество получаемого файла – подлежат корректировке для вашей задачи. Схема работы всего процесса следующая: Скрипт получает из диалплана текст по AGI и сохраняет в переменной; Если у нас уже существует аудио – файл для заранее записанной фразы, мы отдаем в диалплан команду на воспроизведение. Если нет – обращаемся к API; Скрипт отправляет запрос в сторону API Яндекса; Происходит конвертация полученного аудио – файла в нужный формат; Даем права файлу для воспроизведения на Asterisk и удаляем временный файл; Делаем отметку о создании файла в служебный текстовый файл; Воспроизводим файл; А как заставить скрипт работать? Очень просто. Открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись: [text_to_speech] exten => s,1,Answer() exten => s,2,AGI(texttospeech.php,"Привет! Это Мерион Нетворкс. Если ты слышишь это сообщение, значит все сделал правильно!") Сохраняем изменения и прыгаем в FreePBX. Будем вызывать кастомный контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути Admin → Custom Destinations и нажимаем Add Destination: Настроили и сохранили. Наша задумка такова – человек звонит на наш номер, набирает 13 и попадает на синтезированное сообщение. Переходим в главный IVR и в секции IVR Entries добавляем следующее: Звоним, проверяем. Работает :) Если хотите заменить фразу, которую нужно озвучить, просто поправьте ее в файле /etc/asterisk/extensions_custom.conf.
img
Представьте ситуацию, когда вы очень долго конфигурируете сервер, на протяжении часов вводя различные команды в консоль Linux машинки. И вдруг, вам необходимо повторить команду, которая была введена ранее (пару часов назад). Листать стрелочку вверх? Не уверены. Сколько нажатий вам предстоит? Много. Конечно у нас есть решение - поиск по истории команд. Как использовать поиск по командам? Легко. Просто введите комбинацию ctrl+r в CLI сервера, а затем введите часть команды, которую хотите найти. ctrl+r поисковая_часть По умолчанию, консоль вернет только один результат. Чтобы найти больше, просто продолжайте нажимать ctrl+r, пока не найдете нужную команду. Кстати, если хотите сделать перерыв поиска команды и выйти из поисковой консоли - просто введите Ctrl+C Профит!
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59