Введение
Однажды в организации, где я работаю, случился Asterisk
Случился не без моего участия, а если быть точным, то я и был главным виновником, и как следствие - главным исполнителем. Напасть была локальной, но достаточно быстро получила широкое распространение, хотя, в отдельных уголках приходилось нести прогресс в массы с применением тяжелой артиллерии и напалма. В итоге Asterisk`ом было охвачено порядка полутора тысяч абонентов.
Процесс настройки абонента изначально выглядел следующим образом:
Включил телефон, обновил прошивку. Пока он перезагружается, завел абонента на Asterisk (создал запись для регистрации SIP-клиента). Далее, самый очевидный способ настройки телефона - web-интерфейс; набрал в адресной строке браузера IP-адрес телефона, авторизовался, настроил два десятка параметров и готово. На всё ушло 2-3 минуты.
Следующий абонент - повторяем.
На втором десятке абонентов начало надоедать, появилось желание как-нибудь упростить процесс.
Заглянул в настройки: экспорт и импорт конфигурации присутствует; сохранил конфигурацию телефона в файл, заглянул в него - обычный текстовый файл, в котором перечислены параметры с их значениями.
Нашел параметры, значения которых менял в web-интерфейсе, причем большинство из этих параметров, хоть и отличается от дефолтных, но одинаково для всех настраиваемых в рамках данной организации телефонов. Таким образом, имея эталонный файл конфигурации и редактируя в нем всего 5-6 строк, я получал конфигурации для остальных телефонов, которые "заливал" в аппараты всё через тот же web-интерфейс.
Спустя какое-то время количество абонентов заметно выросло, компания продолжала развиваться, сотрудники мигрировали между подразделениями, увольнялись, появлялись новые, некоторые телефоны выходили из строя, и возня с файлами стала постепенно отнимать много времени и раздражала с каждым днем всё больше. Тут я вспомнил про пункт меню из web-интерфейса, в котором были написаны многообещающие слова "Auto Provision".
Обратимся за определением к производителям телефонов. У Dlink или Fanvil мы получим следующее:
Auto Provisioning используется для реализации удаленной/автоматической инсталляции, развертывания конфигурационных и некоторых других связанных файлов.
Snom дает нам практически такое же:
Auto Provisioning может использоваться для предоставления общих и специфических параметров конфигурации на телефоны и для актуализации прошивки.
Вроде бы всё устраивает, значит, будем для наших целей отталкиваться от этих определений.
Вариантов автоматической настройки предусмотрено несколько, и без долгих терзаний, как наиболее понятный и доступный был выбран следующий:
Развертывание конфигурации с tftp сервера, адрес которого телефон будет получать по DHCP в Option 66.
Разберемся вкратце, что есть что.
TFTP - простой протокол передачи файлов (Trivial File Transfer Protocol). В отличие от FTP основан на транспортном протоколе UDP и в нем отсутствует возможность аутентификации (однако, возможна фильтрация по IP-адресу). Одно из основных преимуществ TFTP - простота реализации клиента, поэтому он достаточно широко используется в частности для загрузки обновлений и конфигураций сетевых устройств.
DHCP - протокол динамической настройки узла (Dynamic Host Configuration Protocol); сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP.
Не вдаваясь глубоко в подробности, схема обмена сообщениями DHCP при получении параметров выглядит следующим образом:
DHCPDISCOVER: клиент (в нашем случае, телефон) передает это сообщение broadcast, и использует его для поиска DHCP-серверов в своей канальной среде.
В одном из полей этого пакета, в поле options, клиент передает список необходимых ему опций, наиболее распространенными из которых являются:
(1) - Subnet Mask
(3) - Router
(6) - Domain Name Server
(15) - Domain Name
именно в этом поле клиент сообщает о том, что ему нужен адрес tftp сервера для загрузки конфигурационного и/или других связанных файлов. Номер опции, которая его содержит - 66 (у cisco есть аналогичная опция 150, основное отличие которой в том, что она может содержать адреса нескольких tftp серверов).
DHCPOFFER: cервер отвечает на запрос клиента. Сервер может передать это сообщение как broadcast так и unicast (зависит от значений полей полученных от клиента). В этом сообщении сервер предлагает клиенту параметры, которые он может отдать в текущей конфигурации. Если в сегменте сети клиента несколько DHCP серверов, то получив запрос, они все отправляют OFFER-ы.
После того, как клиент выбрал, OFFER какого из DHCP серверов принять, он отправляет следующий пакет:
DHCPREQUEST: казалось бы, если клиент определился, какой DHCP сервер "пришелся ему по душе", можно передать unicast-запрос этому серверу; однако предается broadcast, чтобы уведомить остальные DHCP серверы о своём выборе (добавляется опция 54, указывающая адрес выбранного DHCP-сервера), и они могли освободить зарезервированные OFFER-ы.
DHCPACK: cервер отправляет подтверждение клиенту. После этого клиент настраивает свой сетевой интерфейс, используя предоставленные параметры и опции.
В различных ситуациях могут еще возникать DHCPDECLINE, DHCPNAK, DHCPRELEASE, DHCPINFORM, но их рассмотрение в рамки данной статьи не входит.
Для получения исчерпывающей информации о работе DHCP можно обратиться к RFC 2131:
https://tools.ietf.org/html/rfc2131
Про опции 66 и 150 можно почитать здесь:
https://wiki.merionet.ru/ip-telephoniya/67/dhcp-opciya-150-i-66/
https://blog.router-switch.com/2013/03/dhcp-option-150-dhcp-option-66/
Про настройку DHCP сервера и Option 66 на Mikrotik можно почитать здесь:
https://wiki.merionet.ru/seti/5/nastrojka-dhcp-servera-na-mikrotik/
Чтобы передать телефону адрес tftp сервера, с которого он может получить конфигурационный файл, на DHCP сервере в параметрах области задаем Option 66, в которой указываем hostname либо IP адрес нашего tftp сервера.
Настройки по-умолчанию в большинстве телефонов подразумевают получение IP-адреса по DHCP и запрос Option 66.
В итоге, телефон получает IP, получает адрес tftp сервера и пытается "стянуть" оттуда файл своей конфигурации.
Согласно документации Dlink, загрузка файла конфигурации происходит следующим образом:
- Устанавливается соединение с сервером.
- Проверяется наличие файла с соответствующим именем:
- Проверяется версия конфигурационного файла.
- Если версия выше, чем текущая на телефоне, файл конфигурации применяется.
- в первую очередь проверяется файл с именем соответствующим аппаратной платформе;
- во вторую - соответствующий MAC адресу устройства;
- в третью - соответствующий ID устройства;
- файл с произвольным именем проверяется либо в последнюю очередь (DHCP option, UpnP) либо в первую, если он явно указан в конфигурации телефона.
Как уже говорилось ранее, файл конфигурации представляет собой текстовый документ определенного вида:
Первая строка:
<<VOIP CONFIG FILE>>Version:2.0002
Для того, чтобы конфигурация была применена, версия файла должна быть выше, нежели текущая на телефоне, инкрементировать требуется последний разряд версии. По-умолчанию версия конфигурации 2.0002
Пример:
Текущая версия конфигурации 2.0002 на одном телефоне и 2.0004 на еще двух. Для того чтобы конфигурация применилась только на один телефон в первой строке файла конфигурации ставим
<<VOIP CONFIG FILE>>Version:2.0004
для того чтобы обновить конфигурацию на всех телефонах ставим в первой строке
<<VOIP CONFIG FILE>>Version:2.0005
Разделы:
<GLOBAL CONFIG MODULE
- содержит данные о сетевых настройках, серверах DNS, SNTP...<LAN CONFIG MODULE>
- содержит данные о настройках LAN, режимах работы LAN<TELE CONFIG MODULE>
- настройки расширенных функций телефонной части (Call Feature)<DSP CONFIG MODULE>
- настройка кодеков<SIP CONFIG MODULE>
- настройки SIP, серверы, регистрация etc...<PPPoE CONFIG MODULE>
- настройки PPPoE<MMI CONFIG MODUL>
E - настройки доступа и WEB интерфейса<QOS CONFIG MODULE>
- qos и vlan<DHCP CONFIG MODULE>
- настройки внутреннего DHCP<NAT CONFIG MODULE>
- настройки NAT и ALG<PHONE CONFIG MODULE>
- настройки телефонной части, в этом же разделе настраивается remote phonebook и extension key.<SCREEN KEY CONFIG MODULE>
- настройка программных клавиш (для версии F3)<AUTOUPDATE CONFIG MODULE>
- настройки Autoprovision<VPN CONFIG MODULE>
- настройки VPN<TR069 CONFIG MODULE>
- настройки TR069
Заканчивается файл строкой <<END OF FILE>>
Для обновления какой-либо опции конфигурации телефона, чтобы файл конфигурации был принят телефоном достаточно наличие следующих полей:
<<VOIP CONFIG FILE>> Version:2.0002 <Название необходимого раздела> Название опции: значение <<END OF FILE>>
Например, для обновления имени хоста телефона необходимо создать следующий файл конфигурации:
<<VOIP CONFIG FILE>>Version:2.0003 <GLOBAL CONFIG MODULE> Host Name :ReceptionPhone <<END OF FILE>>
Все остальные элементы являются необязательными.
Итак, овал нарисован.
Остались сущие мелочи - реализовать инструмент для создания конфигураций и дальнейшего управления ими. Займемся этим в следующей публикации.