Джим Меггелен - Asterisk™: будущее телефонии Второе издание
trunkfreq используется для управления частотой отправки сообщений по магистральному каналу. Задается в миллисекундах. Сообщения отправляются вместе с командой trunk=yes: trunkfreq=20 trunktimestamps (канал)
Определяет, должна ли Asterisk посылать временные метки для каждого отдельного подкадра, входящего в состав магистрального кадра (trunk frame). При передаче этих временных меток немного увеличивается требуемая полоса пропускания (менее чем на 1 Кбит/с
Извлечение информации диалплана с удаленного сервера Asterisk
Asterisk может извлекать информацию диалплана с другого сервера Asterisk, используя выражение switch =>. Когда это происходит, драйвер IAX-канала Asterisk должен дождаться ответа от удаленного сервера, прежде чем сможет продолжать выполнение всех остальных связанных с IAX процессов. Это доставляет особенно много неприятностей, когда имеется множество вложенных выражений switch: если выражение switch указывает на несколько серверов, результат может возвратиться с ощутимой задержкой.
Если для глобальной опции iaxcompat задано значение yes, при осуществлении поиска switch Asterisk будет порождать отдельный поток. Использование этого потока позволяет драйверу IAX-канала продолжать выполнение других процессов, пока поток ожидает ответа. Эта опция обусловливает небольшие потери производительности: iaxcompat=yes|no
на вызов), но они гарантируют надежную передачу временных меток кадров из конца в конец. Если оба конца всех ваших магистральных каналов направляются прямо в TDM и значение trunkfreq равно длине кадра используемого кодека, вероятно, можно опустить этот параметр. Получатель также должен поддерживать эту функцию, хотя необязательно, чтобы она была у него активирована: trunktimestamps=yes|no
Регистрация на других серверах с помощью выражений register
Выражение регистрации register => используется для регистрации вашего сервера Asterisk на удаленном сервере. Это позволяет удаленному концу соединения знать ваше местонахождение на случай, если вы сконфигурированы с динамическим IP-адресом. Заметьте, что выражения register используются, только если вы сконфигурированы на удаленном конце как равноправный участник сети и когда host=dynamic. Основной формат выражения register:
register => имяпользователя: пароль@удаленный-хост пароль является необязательным параметром (если не сконфигурирован в удаленной системе).
В качестве альтернативы можно задать RSA-ключ, заключив его имя[142]в квадратные скобки ([]):
register => имяпользователя:[имя-rsa-ключа]@удаленный-хост По умолчанию запросы register будут посылаться через порт 4569. Их можно направить на другой порт, явно задав его:
register => имяпользователя:пароль@удаленный-хост:1234
Описания IAX-каналов
Теперь, когда определены общие настройки, можно приступать к описанию каналов. Если предполагается принимать анонимные IAX-вы- зовы, рекомендуется создать гостевой канал. Это очень распространенный способ связи в сообществе Asterisk. Прежде чем решить, что это не для вас, подумайте о том, что, если вы хотите предоставить кому-либо возможность связи с вами через IAX (без конфигурации специальной учетной записи), он должен соединяться как гость. Эта учетная запись, в сущности, становится вашим «телефонным номером по протоколу IAX». Описание гостевого канала должно выглядеть примерно так: [guest] type=user context=incoming callerid="Incoming IAX Guest"
Несомненно, спамеры найдут способ доступа к этим адресам, но в ближайшем обозримом будущем это не представляет проблемы. В долгосрочной перспективе, вероятно, будет использоваться DUNDi (больше информации об этом вы найдете в главе 14).
Если требуется принимать вызовы из сети Free World Dialup, в Asterisk есть предопределенный защитный ключ, который гарантирует невозможность для анонимных соединений сымитировать звонок Free World Dialup. Для этого потребуется настроить канал iaxfwd:
[iaxfwd] type=user context=incoming auth=rsa
inkeys=freeworlddialup Если имеются ресурсы, опубликованные в сети DUNDi, в файле iax. conf должен быть описан соответствующий пользователь:
[dundi] type=user
dbsecret=dundi/secret context=dundi-incoming
Если имеются устройства, работающие по протоколу IAX (такие, как IAXy), или IAX-пользователи на удаленном сервере, возможно, вы захотите обеспечить их собственным описанием пользователя, посредством которого они будут соединяться с системой.
Допустим, на удаленном сервере имеется пользователь, для которого решено определить IAX-канал типа user. Назовем этого гипотетического пользователя sushi. Описание этого канала может быть примерно таким:
[sushi] type=user
context=local_users
auth=md5,plaintext,rsa
secret=wasabi
transfer=no
jitterbuffer=yes
callerid="Happy Tempura" <(800) 555-1234>
accountcode=seaweed
deny=0.0.0.0/0.0.0.0
permit=192.168.1.100/255.255.255.0
language=en
Входящие звонки от этого пользователя будут поступать в контекст local_users и передавать системе Caller ID (ID звонящего) Happy Tempura <(800) 555-1234>. Система ожидает от этого пользователя аутентификации с использованием простого текстового пароля или алгоритмов MD5 и RSA, поскольку предоставлен пароль wasabi и звонок поступил с IP- адреса 192.168.1.100. Всем звонкам, поступившим по этому каналу,
Аутентификация по протоколу IAX
IAX предоставляет механизмы аутентификации для обеспечения достаточного уровня безопасности между конечными точками. Это не означает, что аудиоинформацию нельзя захватить и декодировать, но свидетельствует о том, что можно более тщательно управлять правами доступа к вашей системе. В IAX-ка- налах поддерживается три уровня безопасности. Опция auth определяет, какой метод аутентификации используется в канале: plaintext, md5 или rsa.
Параметр plaintext в IAX обеспечивает очень низкий уровень защиты. Хотя он разрешает соединение с каналом только при условии введения правильного пароля, но тот факт, что пароль хранится в файле iax.conf как простой текст и передается и принимается в таком же незашифрованном виде, делает этот метод аутентификации очень ненадежным.
md5 обеспечивает большую безопасность сетевого соединения, однако по-прежнему в файле iax.conf на обоих концах соединения должен быть задан текстовый secret. Вот как происходит аутентификация в данном случае: сервер А запрашивает соединение с сервером В, который, в свою очередь, отвечает запросом на авторизацию, включающим сгенерированный случайным образом номер. Сервер А генерирует хеш MD5, используя значение, заданное в поле secret файла iax.conf, и случайный номер, полученный от сервера В. Этот хеш возвращается в ответе на запрос на авторизацию, и сервер В сравнивает его с локально сгенерированным хешем. Если хеши совпадают, предоставляется разрешение на доступ.
Метод rsa обеспечивает самый высокий уровень безопасности. Чтобы использовать RSA-аутентификацию, каждый конец соединения с помощью сценария astgenkey, обычно находящегося в папке /usr/src/asterisk/contrib/scripts/, должен создать пару ключей - открытый и закрытый. После этого открытый ключ передается на дальний конец. Каждый конец соединения в свое описание канала должен включить открытый ключ противоположного конца, используя для этого параметры inkeys и outkey. RSA-ключи хранятся в папке /var/lib/asterisk/keys/. Открытым ключам присваиваются имена имя.риЬ; закрытым ключам - имя. key. Закрытые ключи должны быть зашифрованы по алгоритму 3DES[143].
будет присваиваться код учетной записи seaweed. Поскольку для параметра transfer (переадресация) задано значение no, медиа-поток этого канала всегда будет проходить через Asterisk; он не может быть перенаправлен на другой IAX-узел.
Если вы сами являетесь удаленным узлом и вам необходимо устанавливать соединения с другим узлом, главный узел был бы определен для вас как равноправный участник (peer):
[sashimi_platter]
type=peer
username=sushi
secret=wasabi
host=192.168.1.101
qualify=yes
trunk=yes
peer вызывается из диалплана с помощью приложения Dial(), в которое передается имя, указанное в квадратных скобках. Если равноправный участник требует от вас аутентификации с использованием имени пользователя, имя пользователя и секрет можно задать в полях username и secret.
Помните, аутентификация входящего звонка от пользовате-0% ля, заданного в iax.conf, должна выполняться с использовани- Л * ем имени, заданного в квадратных скобках. Однако если ™ Asterisk сама вызывает внешнего равноправного участника сети, имя пользователя, используемое при аутентификации, можно задать с помощью настройки username.
Для описания host используется или запись IP-адреса с точками-разделителями, или полное доменное имя (fully qualified domain name, FQDN). Задавая параметр qualify=yes, можно определить задержку соединения между вами и удаленным хостом и проверку, активен ли он. Чтобы свести до минимума количество издержек при поступлении множества звонков к одному равноправному участнику сети, их можно объединить (trunk).
Объединение каналов является уникальной возможностью IAX. Благодаря ей между двумя большими сайтами можно устанавливать множество одновременных VoIP-соединений. Объединение каналов, предоставляемое IAX, обеспечивает сокращение количества переносимой служебной информации за счет загрузки в каждый сигнальный пакет аудиоданных нескольких параллельных вызвов[144]. Чтобы активировать