Как настраивать и работать с IP АТС на основе Asterisk


В данной статье содержаться рекомендации по настройке и управлению IP АТС на базе Asterisk.

  • Используйте графические GUI клиенты, работа которых базируется на "manager API" (типа gastman или astman и т.д.), чтобы получить представление, что в каждый момент времени происходит на Вашей АТС. Естественно, что Вы должны периодически проверять лог файлы, расположенные (по умолчанию) в директории /var/log/asterisk и отслеживать их размеры. Необходимо учитывать, что при наличии более чем одного одновременного соединения с интерфейсом manager API резко увеличивается риск "падения" Asterisk'а (рапорт от mattf и подтверждено многими другими)

  • Отделите вашу компьютерную сеть от Вашей VoIP сети, как вариант, используя отдельный VLAN (см. публикацию о Quality-of-Service QoS ). Если у Вас в сети есть управляемый switch, тогда рекомендуется на нем настроить определенные порты на предмет таких настроек, как VLAN, и class of service. Общепринятая практика, это создание одного VLAN для голоса и второго - для передачи данных. Вы, к примеру, можете использовать что-то типа Iperf для проверки качества работы вашей сети (примечание: при использовании этой утилиты с ключом --udp, Вы должны также использовать ключ -l с указанием размера IP пакета, из расчета размера данных необходимых для работы кодека, плюс IP/UDP заголовки и контрольные байты. Например, если симулируется проверка работы по протоколу IAX2, то берем в расчет размер iax2 пакета - 12 байтов + данные кодека gsm = 33 байта, g723 = 27 байт).

  • Для анализа трафика в Вашей сети используйте сетевой sniffer, например Ethereal, (с плагином IAX).

  • Используйте стабильные релизы сервера Asterisk. Последний стабильный релиз (файл .tar.gz), во многих случаях, не самый удачный выбор, также как и последние версии из репрозитория CVS/SVN. Сделанные Вами изменения в исходных кодах, могут на момент модернизации Вашего сервера и не содержаться в CVS/SVN репрозитории. Обратите внимание, что апргейд системы из CVS/SVN репрозитория может удалить все Ваши изменения, сделанные в файле Makefiles, например, будет разрешена, запрещенная ранее, запись поля uniqueid в CDR записях или будет включен ztdummy. Некоторые администраторы сообщают, что используют свои CVS/SVN репрозитории, дабы не потерять собственные изменения, сделанные в исходных кодах сервера и скриптах.

  • Не загружайте ненужные модули для Вашего сервера Asterisk. Например, если Вы используете каналы ZAP и SIP, тогда укажите директиву noload= для MGCP и Skinny в файле modules.conf. Это уменьшит потенциальный риск быть взломанным через дыры, которые могут находиться в этих модулях. См: Asterisk Slimming. Также неплохо почитать статью: Презентация от Astricon по поводу безопасности в сервере asterisk.

  • Ограничьте диапазон портов для RTP протокола в файле rtp.conf и создайте минимально необходимый Вам для нормальной работы промежуток портов, которые должны быть открыты в firewall. В конфигурации, которая идет в дистрибутиве Asterisk этот промежуток уж очень большой, даже для самых больших потребностей.

  • Запретите локальным пользователям работать на Вашем сервере с Asterisk . В различных платформах постоянно находят локальные уязвимости и нет никакой гарантии, что пользователь не запустит эксплоит и не получит доступ ко всей системе. Вкратце, на Этом сервере не должно быть никаких пользователей, кроме администратора системы, и не должно быть никаких пользовательских программ, общих ресурсов и вообще всего не относящихся к работе программного обеспечения IP АТС.

  • Регулярный рестарт (наилучший вариант: полная остановка и запуск) вашей IP АТС в нерабочее время или во время минимальных нагрузок. Периодическая перезагрузка может быть не самое удачное решение, и может, фактически, принести больше вреда, чем пользы (нестабильность, не освобожденная память, см багтракер). Если у Вас работает Asterisk с периодической автоматической перезагрузкой, это можно просто сделать, поместив в крон команду: asterisk -rx 'stop gracefully'. Тем не менее, обратите внимание на то, что при такой перезагрузке сервера Asterisk версии 1.0.x, он потеряет информацию об всех телефонах, которые были на нем зарегистрированы.

  • Обратите внимание на Ваши скрипты запуска сервера, на предмет определения зависшего состояния сервера Asterisk и его перезагрузки. По этому поводу, можно обратить внимание на утилиту: daemontools. Вы также можете периодически соединяться по телнет протоколу с сервером Asterisk (см: manager.conf), для проверки того, что он все еще работает. Запуск сервера Asterisk можно также осуществлять с помощью /etc/inittab, в результате он будет автоматически перезагружаться в случае завершения его работы. Для начала стоит убедиться, что на Вашей машине все правильно установлено и запущено, иначе Ваш сервер Asterisk начнет перегружаться с максимально возможной скоростью. Для проверки работоспособности сервера Asterisk, существуют некоторые программы, которые могут помочь Вам создать свою комплексную систему мониторинга, например, mon, big brother, big sister и netsaint' "И другие программы, например: monit, тоже очень неплохо работает. Они могут проверять не только факт существования процесса, но так же могут мониторить сокеты (например, тот, что используется для интерфейса управления - manager interface).

  • По возможности, не используйте утилиту mpg123 для проигрывания музыки ожидания (music-on-hold: MOH), или создайте условия, при которых уничтожались бы задачи приложения mpg123, при их зависании. mpg123 имеет неприятную особенность, которая выражается в том, что он не завершает свою работу, когда заканчивает работу сам сервер Asterisk (исправлено в версии 0.7.0), и препятствует повторному запуску. Вы можете полностью отказаться от использования музыки ожидания (MOH) или использовать, заранее подготовленный, mp3 файл, длинной, примерно, в 30 минут совместно с командой Playback() и т.д. Также, для этих целей можно использовать модуль format_mp3 из пакета дополнений.

  • Запускайте Asterisk от пользователя отличного от root'a.


  • Неплохой идеей может стать мысль хранить конфигурацию в базе данных, в качестве сервера баз данных, может использоваться,например, MySQL; или любой другой, который Вы используете. Недавно добавленная в сервер Asterisk поддержка ODBC, делает это возможным. Далее, использование синтаксиса директивы #include позволяет Вам включить другие файлы в состав любого файла конфигурации (.conf), что тоже может помочь Вам в организации Вашей конфигурации.

  • Отсутствие должного внимания к изменениям в файле extension.conf, может привести к пагубным эффектам, которые могут сказаться на работе всей Вашей АТС. Создайте процедуру, для контроля всех изменений в файлах конфигурации, чтобы даже в случае отказа, оставалась возможность вызова специальных служб (911 или 999 или 112 или 01). Всегда проверяйте лог файлы после внесения изменений в файл extensions.conf на рабочем сервере. Одно из возможных решений: это использование системы контроля версий, типа CVS или SVN, для Ваших файлов конфигурации. При использовании CVS или SVN, если Вы по каким-либо причинам изменяете файлы конфигурации и после этого система заработала не так как надо, то Вы всегда можете откатить (roll back) Вашу конфигурацию к предыдущей рабочей версии.

  • Стоит задуматься о лимитах на голосовые почтовые ящики, или о скрипте, который будет удалять (или переносить в архив) все голосовые сообщения, которые старее определенного числа дней. Еще один вариант для ограничения объема сообщений - это исполнение AGI скрипта, перед тем как пользователь будет переключен на голосовой почтовый ящик, который и примет решение, может ли пользователь оставить свое сообщение или число сообщений достигло заданного лимита.

  • Устанавливайте значение абсолютного таймаута для всех вызовов, которые стоят денег. Это сведет к минимуму шансы получить счет с занебесными цифрами, в случае, если что то не так сработало в Asterisk или с подключенным к нему телефоном и соединение не было закончено и осталось в зависшем состоянии. Используйте, по возможности, протокол SIP и предусмотренные в нем возможности определения момента отсоединения абонента.

  • Стоит подумать и о некоторых моментах по резервированию мощностей, распределению нагрузки и, может быть, кластеризации системы. Пока не существует однозначного рабочего решения вышеуказанных задач для сервера Asterisk, однако, это не должно мешать Вам думать о решении этих вопросов (поиск в списке рассылки asterisk-users может дать Вам некоторое количество компетентных советов). Например: Как сделать переключатель на резервный канал, который смог бы автоматически переводить на резервный сервер каналы T1/E1, Аналоговые телефонные линии или соединения ethernet, при отказе основного сервера, при условии, что Вы не желаете потерять не одного входящего вызова. Также, можно рассмотреть вариант с распределением вызовов, поступающих по SIP протоколу, с помощью переназначения их на несколько серверов, при этом конечно, конфиги для этих серверов asterisk можно получать различными способами из баз данных, например из mysql.

  • Модернизация рабочей системы: Когда Вы апгрейдите исходные коды ("make update" или "cvs update") и компилируете новую версию сервера ("make"), останавливать Asterisk нет необходимости. Однако стоит отметить, что рекомендуется вместо "CVS update" делать "CVS checkout"! Если компиляция прошла успешно, останавливаем Asterisk и делаем "make install". Как альтернативный вариант, можно установить новую версию в другое место командой "make install DESTDIR=/somewhere". В этом случае, если что-то пойдет не так, то у нас остается старая версия в неизменном виде. Вообще, когда установлены различные версии сервера в разных директориях, процесс модернизации намного проще и на душе спокойней т.к. в случае чего можно "откатиться" на предыдущую версию. Другой подход - это создание неких "rpm" (в разных системах используются разные форматы). В случае с rpm, можно использовать инсталляцию с параметром DESTDIR и использовать переменную RPM_BUILD_ROOT для создания пакета без остановки рабочей системы.

  • И конечно, Делайте бекапы, господа: При необходимости делайте резервные копии истории звонков (CDR), логов, и содержимое голосовых почтовых ящиков. Если вы используете CVS версию, то также включите эту директорию в список. Т.к. если вы периодически апгрейдите исходники из CVS, то может получиться так, что новая версия может оказаться или вообще не рабочей или не стабильной или даже просто не соберется из исходников. Если у Вас используются базы данных, то очень неплохо бы делать их периодический дамп и сохранять его в каком-нибудь отдельном месте.

Ссылки по теме:

  • Asterisk billing - поддержка билинга.
  • Asterisk RealTime - конфигурация Asterisk с использованием базы данных.
  • Мониторинг сервера и периодическая проверка его работоспособности.
  • Asterisk rollout tips: Помощь в переходе от испытаний к практическому использованию.
  • Asterisk security: Безопасность Вашей АТС.
  • Рекомендации для маштабных решений: (SIP прокси, распределение нагрузки).
  • Asterisk High Availability Solutions: Программные и аппаратные решения для увеличения надежности работы сервера (резервирование, балансирование нагрузки).
  • Asterisk QoS: как в Asterisk поддерживается QoS.
  • Asterisk debugging: Как получить отладочную информацию в Asterisk и определить причину ошибки.
  • Asterisk password files: Где Вы можете найти описание пользователей и их пароли в конфигурационных файлах Asterisk?
  • Asterisk slimming: Заметки по удалению из конфигурации модулей и кодеков, которые Вы не используете в работе Вашего сервера.
  • Скрипты для запуска Asterisk
  • How To Debug and Troubleshoot VOIP
  • Failover Switches
  • app_radius: Использование RADIUS совместно с Asterisk (eng).
  • Подготовка Вашей сети к работе VoIP (eng).
  • Новая версия АМРа теперь именуется freePBX 2.0.1 - русификация