Автоматическая настройка голосовых шлюзов Cisco и Eltex Asterisk provisioning
В компании, где я работаю было принять решение перевезти все наши магазины, а их почти 500, на IP-телефонию. Центральный и региональные офисы уже давно используют для этих целей решения от Panasonic. В центральном офисе это KX-NS1000, в региональных в основном KX-NS500.
Но для перевода магазинов на ip-телефонию было принято решение использовать Asterisk.
Если интересно, как реализовать «Asterisk provisioning» с помощью bash скриптов работающих с mysql, как настроить Asterisk RealTime, dhcp, tftp, а так-же процесс генерации и подписания запроса на подпись ssl сертификата для работы https provisioning у Cysco — добро пожаловать под кат!
В следующей статье немного про настройку KX-NS1000 и KX-NS500 для связи с Asterisk.
Техзадание:- Автоматическая настройка должна полностью исключить участие человека в настройке как шлюзов так и самой Asterisk. Процесс настройки должен включать в себя только «привязку» портов шлюза к определенному номеру телефона.
- Настройка должна осуществляться через единый web-интерфейс
- В любой момент любой шлюз может быть удалён, перенесен номер телефона с одного шлюза на другой или переназначен порт на шлюзе
- Возможность расширить список поддерживаемого оборудования
Главный критерием при выборе шлюза была корректная работа автоматической настройки т.к. шлюзов будет много, их надо настраивать. В любой момент, любой шлюз может выйти из строя и на его место придет новый шлюз или, что кажется ещё хуже, шлюз может переехать из одного магазина на другой, может смениться внутренний номер телефона на самом шлюзе или номер используемого порта.
Естественно мы несколько месяцев тестировали все шлюзы на мышах тестовых магазинах, воевали с кодеками, провайдерами и параметрами qos, настраивали свои пограничные шлюзы и т.д.
На выбор мы взяли несколько шлюзов у Элтекса, и Cisco. **Элтекс:** Плюсы — я раньше с ним работал, хорошие шлюзы, много чего умеют, на борту замечательная OpenWRT,
Минусы: крайне неудобная автоматическая настройка, например нельзя сделать один общий файл для всех шлюзов и вынести в отдельные файлы индивидуальные настройки.
На разных версиях прошивки шлюзы по разному делают запрос конфигурационного файла т.е. где-то мак написан с точками, где слитно. Восьми портовые TAU-8.IP тянут конфигурационный файл только с корня tftp сервера. По этой причине полноценной автоматической настройки для этих шлюзов реализовать так и не получилось, приходится заходить на WEB-интерфейс шлюза и указывать путь до tftp сервера. Причем TAU-2M.IP отлично понимает переменные в пути до файла: tftp://10.0.15.9/Eltex/$PN/config/$MA.tar.gz чего не скажешь про TAU-8.IP где в пути приходится писать мак-адрес шлюза.
В WEB-интерфейсе автонастройки добавили генерацию этого пути после настройки. Я отлично понимаю, что если в DHCP сервере указать все параметры для 43 опции, то скорее все заработает, но у нас эта опция занята.
**Cisco** Плюсы — я сними тоже раньше работал, замечательные шлюзы, с великолепной системой автоматической настройки.
Минусы: нет настройки QOS.
В итоге решили использовать SPA112, т.к. нам предложили очень вкусный ценник плюс у нас практически везде используется оборудование от Cisco.
Механизм создания конфигурационных файловAsterisk берёт список sip пользователей в базе данных mysql, этот механизм называется Asterisk RealTime. Это позволяет на лету создавать/удалять/редактировать учетные записи для SIP клиентов не заставляя Asterisk перечитывать sip.conf или users.conf.
Таблица из которой Asterisk берет sip аккаунты называется "sip_users" и она практически стандартна для механизма Asterisk RealTime.
Таблицы в которых пользователь производит привязку голосового шлюза к sip-аккаунту называются «redaction_gateway_and_phone» и «gateway_and_phone_info»:
При желании можно объединить обе таблицы в одну. я же разделил их, чтоб не плодить в одной таблице кучу записей с одинаковыми полями.
То есть в первой таблице описаны учётные записи для добавления в таблицу sip_users, а во второй какая модель шлюза будет настроена и где она стоит.
Вся логика настройки шлюзов заключается в том, что пользователь вносит mac-адрес голосового шлюза, номер используемого порта и желаемый номер телефона в обе эти таблицы, а точнее через web-интерфейс, а два скрипта создают соответствующую запись в таблице «sip_users» и генерируют конфигурационные файлы. Таким образом одновременно создается sip-аккаунт для Asterisk и соответствующий ей конфигурационный файл в директории tftp сервера для железки с данным mac-адресом.
Логика обработки базы данных и логика создания конфигурационных файлов разделена на две части. Они независимы друг от друга и позволяют путем создания новых скриптов делать авто-настройку для любых других шлюзов/телефонов.
За работу с базой данных отвечает скрипт AutoProvision_all.sh . Первым делом скрипт опрашивает таблицу gateway_and_phone на наличие записей с уникальным mac-адресом и с флагом No в поле actual . То есть находит не актуальные, с точки зрения Asterisk, шлюзы/телефоны где будет настроен один аккаунт на один голосовой шлюз(или VoIp-телефон). Далее скрипт меняет флаг с No на Yes в поле actual , поочередно выдает данные по каждой записи одновременно создавая запись в таблице sip_users .
Потом скрипт опрашивает таблицу gateway_and_phone_info на наличие записей с флагом No в поле actual и повторяющимися mac-адресами. То есть находит не актуальные, с точки зрения Asterisk, шлюзы/телефоны где будут настроены несколько аккаунтов на один голосовой шлюз(или VoIp-телефон). И так-же меняет флаг, создает запись и выводит данные.
На выходе скрипт выдает строчки вида: флаг_дублирования;mac-адрес;имя_пользователя;номер_порта;пароль
Пароль генерируется отдельным скриптом passGen.sh.
Второй скрипт называется «gen_prov.sh». Он запускает «AutoProvision_all.sh», получает от него список всех записей и генерирует конфигурационные файлы для SPA112, TAU2-2M.IP и TAU-8.IP. К сожалению для Элтексов не реализовал настройку отдельных портов т.е. на них настраиваются все порты и в WEB-интерфейсе это проверяется.
Так же этот скрипт подойдет для генерации файлов для PAP2T-na, SPA8000 и теоретически для любых голосовых шлюзов от Cisco и Linksys.
Совсем не элегантное решение с TAU8, тут просится цикл перебора. Как и писал выше, TAU-8.IP приходится настраивать ручками прописывая путь до конфигурационного файла. Двух портовые TAU-2M.IP так-же приходится настраивать ручками, но это из-за того, что у нас настроена 150 и 66 опции и не настроена 43 опция на DHCP сервере.
Все скрипты лежат в директории /etc/asterisk/scripts , там же необходимо создать каталог "template" в котором должны лежать шаблоны конфигурационных файлов для шлюзов, а для TAU-8.IP ещё и дерево каталогов т.к. у этого шлюза несколько конфигурационных файлов, которые лежат каждый в своей директории и вся эта кухня собирается в один архив. gen_prov.sh запускается раз в 1 минуту по крону.
Шлюзы SPA112 из коробки пытаются скачать конфигурационный файл с HTTPS сервера, соответственно на сервере должен быть актуальный сертификат ssl сертификат.
Как сгенерировать запрос на SSL сертификат неплохо описано вот тут, если кому лень читать то опишу всё тут:
1. Генерируем ключ 1 раз, сохраняем его.
2. Генерируем файл запроса сертификата.
3. Забираем сервера файл srv-shop-aster.csr, у вас конечно будет другое имя вобщем файл «имя_сервера.csr»
4. Идем на сервис подписывания сертификатов Выбираем продукт, время жизни сертификата и подписываем его нажав на кнопку «Sign Certificate Request», затем сохраняем себе на диск уже подписанный сертификат. Кстати надо зарегистрироваться на сайте Cisco.
5. Настроить HTTPS в Apache, неплохо написано вот тут.
У меня сертификат и ключ лежит в директории /etc/apache2/ssl/ в файле /etc/apache2/sites-enabled/default-ssl.conf прописаны пути к сертификату и ключу:
SSLCertificateFile /etc/apache2/ssl/srv-shop-aster.crt SSLCertificateKeyFile /etc/apache2/ssl/srv-shop-aster.key
И я не запрещал использование устаревшего протокола SSLv2, т.е. # SSLProtocol all -SSLv2 Не забудьте положить ключ с подписанным сертификатом в соответствующую директорию и перезапустить Apache.
В следующей статье опишу как подружить Asterisk с KX-NS1000, Про WEB-интерфейс и про настройку DHCP на маршрутизаторах.