Pull to refresh

Настройка DUNDi в Asterisk, под управлением FreePBX

Reading time 3 min
Views 10K
Опытным администраторам VoIP эта статья будет мало интересна, адресована она админам малых IP-телефонных серверов для маленьких офисов.

DUNDI — что это и зачем нужно


DUNDi — протокол динамической маршрутизации для IP-телефонии. Позволяет автоматически находить сервер, обслуживающий конкретный номер.

Если вы не используете этот протокол, то для нескольких офисов приходится создавать отдельные планы нумерации, поделенные на диапазоны. И создавать отдельные маршруты до всех офисов (и транки до кучи). Когда сеть АТС несколько подрастет, то это положение вещей может стать неудобным, и даже создавать проблемы (а может и не создать).

Практика


Статей по настройке можно найти много, но они обычно не раскрывают особенности настройки DUNDi в связке с FreePBX (он поддерживает настройку DUNDi в полу ручном режиме).

Итак, нам потребуется:

  1. Создать пару приватный\публичный ключ для каждого сервера, подключенного к DUNDi маршрутизации
  2. Выбрать сервера, которые будут корневыми для работы DUNDi (можно сделать и простую звезду или связать всех со всеми)
  3. Создать контекст в котором будем искать внутренние номера (можно и не создавать, и прицепиться к существующему)
  4. Создать DUNDi конфигурацию
  5. Создать транк, через который будет происходить вызов (в этом случае я использую IAX2)
  6. Создать DUNDi транк, на который навесить исходящую маршрутизацию

Ключи DUNDi


Заходим на сервера по ssh и:

cd /var/lib/asterisk/keys
astgenkey -n <понятное нам имя сервера>

Файл *.pub надо передать на другие сервера, которые будут в прямой связи с этим сервером

Контекст поиска внутренних номеров


файл: /etc/asterisk/extensions_custom.conf


[dundi-extens]
include => ext-local
include => ext-intercom-users
include => ext-meetme

Конфигурация DUNDi


Файл: /etc/asterisk/dundi.conf


[general]
; Заполнять переменные ниже не обязательно, смысл как и у сертификатов
department=VoIP
organization=*******
locality=Moscow
stateprov=Moscow
country=RU
email=******
; А далее, уже надо
port=4520
entityid=FE:7E:15:DC:**:** ; Идентификатор этого сервера, обычно MAC сетевого интерфейса
cachetime=600 ; Время кэширования записей, выбирайте сами, сообразно тому, как часто меняется у вас нумерация
ttl=32 ; Тоже самое, что и для сетевых пакетов, как глубока может быть цепочка разрешения номера
autokill=yes

[mappings]
; Задаем соответствие между контекстом DUNDi, найденными номерами и вызывающим транком
; dundi_inter, как раз наш IAX2 транк, через который вызов будет совершен
; dundi-extens - контекст, в котором мы ищем номера
; dundi_context - собственно, контекст DUNDi
; ${IPADDR} - на некоторых версиях Asterisk дает глюк, и постоянно возвращает 127.0.0.1 в запросах. Если у вас такая проблема, поменяйте на IP этого сервера
dundi_context => dundi-extens,0,IAX2,dundi_inter:${SECRET}@${IPADDR}/${NUMBER},nopartial

; Секции DUNDi пиров, тут впишем всех, с кем мы имеем прямую связь по DUNDi
[FE:A0:79:26:52:65] ; ID пира, обычно MAC интерфейса
model = symmetric
host = *.*.*.* ; IP пира, можно указать и fqdn
inkey = <имя файла публичного ключа пира, без суффикса pub>
outkey = <имя файла приватного ключа этого сервера, без суффикса key>
include = dundi_context ; Тут указываем контекст DUNDi пира, в котором мы ищем номера
permit = dundi_context ; А тут разрешаем этому пиру искать в контексте этого сервера
qualify = yes
dynamic=yes

Транк для совершения вызова


Название транка в этой вкладе — просто отображаемое имя



А в этой, уже то, что использует Asterisk, секцию Incoming мы вообще не используем



Секция Outgoing
type=user
dbsecret=dundi/secret
context=dundi-extens



Перезагрузить конфигурацию DUNDi можно так:
module reload pbx_dundi.so

Перезагрузить ключи можно так:
module reload res_crypto.so


DUNDi транк и маршрутизация


Название транка в этой вкладе — просто отображаемое имя



DUNDi Mapping соответствует секции mappings из файла /etc/asterisk/dundi.conf



Создаем маршрут:



Так как план нумерации у меня четырехзначный, то и шаблон номера у меня такой



Проверка


После применения изменений, из командной строки asterisk -rv можно:
Посмотреть статус DUNDi пиров:


voip*CLI> dundi show peers
EID                  Host                Port   Model      AvgTime  Status
fe:a0:79:26:**:**    172.16.**.*     (S) 4520   Symmetric  Unavail  OK (9 ms)
1 dundi peers [1 online, 0 offline, 0 unmonitored]

Попробовать разрешить внутренний номер:


voip*CLI> dundi lookup 1000@dundi_context  #Это запрос номера, расположенный на этом-же сервере
DUNDi lookup returned no results.
DUNDi lookup completed in 170 ms
voip*CLI> dundi lookup 1901@dundi_context #Это запрос номера, расположенного на другом сервере
  1.     0 IAX2/dundi_inter:e3ade6Lmkz5GK5l4KBVsfA==@172.16.*.*/1901 (EXISTS)
     from fe:a0:79:26:*:*, expires in 600 s
DUNDi lookup completed in 9 ms
Tags:
Hubs:
+10
Comments 5
Comments Comments 5

Articles