Соединение двух серверов Asterisk по протоколу IAX2

Имеем 2 офиса в разных городах, в каждом свой сервер Asterisk. Нужно связать серверы между собой для совершения звонков между сотрудниками из разных офисов по внутренней связи.

Для начала соединим сервера в одну сеть используя VPN. После этого мы настроим связь между серверами используя протокол IAX2 (The Inter-Asterisk eXchange protocol, version 2). Это собственный протокол Asterisk, для работы он использует всего один порт 4569 и с ним удобнее работать через NAT.
Итак, у нас 2 сервера, в Москве и Новосибирске. Адрес московского сервера 192.168.21.5, адрес новосибирского - 192.168.0.5.

Заходим на московский астер и пишем в /etc/asterisk/iax.conf следующее:
[general]
autokill=yes;завершаем неудачно установленные соединения по тайм-ауту
qualify=2000;указываем таймаут - 2 секунды
disallow=all;разрешаем нужные кодеки
allow=ulaw
allow=alaw
allow=g729

;принимаем подключение из Новосибирска
;эта учётка, чтобы принимать входящие вызовы из Новосибирска
[from-nsk]
type=user;входящие вызовы
username=from-nsk;имя
secret=nsk-password;пароль
auth=md5;метод аутентификации
host=192.168.0.5;разрешаем подключение от новосибирского сервера
context=local;контекст куда попадают входящие звонки
qualify=yes;опрашиваем устройство каждые 2 секунды
trunk=yes;признак, что это транк, немного оптимизирует передачу
deny=0.0.0.0/0.0.0.0;запрещаем подключаться всем
permit=192.168.0.5/255.255.255.25;разрешаем подключаться только новосибирскому серверу

;подключаемся к серверу в Новосибирске
;эта учетка для исходящих звонков
[to-nsk]
type=peer;только исходящие звонки (входящие только при авторизации по IP)
username=from-moscow;имя
secret=moscow-password;пароль
auth=md5;метод аутентификации
host=192.168.0.5;подключаемся к IAX2 серверу в Новосибирске
context=local;контекст откуда совершаются звонки
qualify=yes;опрашиваем устройство каждые 2 секунды
trunk=yes;признак, что это транк, немного оптимизирует передачу
Открываем конфиг Новосибирского сервера, /etc/asteris/iax.conf:
[general]
autokill=yes;завершаем неудачно установленные соединения по тайм-ауту
qualify=2000;указываем таймаут - 2 секунды
disallow=all;разрешаем только нужные кодеки
allow=ulaw
allow=alaw
allow=g729

;подключаемся к серверу в Москве
;эта учетка для исходящих
[to-moscow]
type=peer;только исходящие звонки (входящие только при авторизации по IP)
username=from-nsk;имя
secret=nsk-password;пароль
auth=md5;метод аутентификации
host=192.168.21.5;подключаемся к IAX2 серверу в Москве
context=local;контекст откуда совершаются звонки
qualify=yes;опрашиваем устройство каждые 2 секунды
trunk=yes;немного оптимизирует передачу

;принимаем подключение из Москвы
;эта учетка для входящих
[from-moscow]
type=user;входящие вызовы
username=from-moscow;имя
secret=moscow-password;пароль
auth=md5;метод аутентификации
host=192.168.21.5;разрешаем подключение из Москвы с этого IP
context=local;контекст куда попадают входящие звонки
qualify=yes;опрашиваем устройство каждые 2 секунды
trunk=yes;немного оптимизирует передачу
deny=0.0.0.0/0.0.0.0;запрещаем подключаться всем
permit=192.168.21.5/255.255.255.255;разрешаем подключаться только московскому серверу
Далее применяем настройки iax2 на обоих серверах и смотрим доступность пиров:
asterisk -rx "iax2 reload"
asterisk -rx "iax2 show peers"
После этого нам нужно в диалплане указать, что звонки на номера в соседний должны идти через соответствующий транк (в Москву через IAX2/to-moscow/, в Новосибирск через IAX2/to-nsk/). В моем случае внутренняя нумерация была одинаковая на серверах, поэтому я сделал выход в другой город через 21*. То есть для звонка на номер 101 в другом офисе пользователи набирают 21101. Если настраиваете с нуля, удобнее сделать разную нумерацию, например 1XX в Москве и 2XX в Новосибирске.

Вносим изменения в диалплан новосибирского астериска в файл /etc/asterisk/extensions.conf как-то так:

;экстеншн для локальных звонков внутри офиса и в МСК
[local]
exten => _XXX,1,Dial(SIP/${EXTEN},40,Ttg);
;звонки в Московский офис
exten => _21XXX,1,SET(CALLERID(num)=21${CALLERID(num)})
same => n,SET(CALLERID(name)=Nsk-${CALLERID(name)})
same => n,Dial(IAX2/to-moscow/${EXTEN:2})
Вносим изменения в диалплан московского астериска в файл /etc/asterisk/extensions.conf как-то так:
;экстеншн для локальных звонков внутри офиса и в Новосибирск
[local]
exten => _XXX,1,Dial(SIP/${EXTEN},40,Tt)
;звонки в Новосибирский офис через IAX2 через 21XXX
exten => _21XXX,1,SET(CALLERID(num)=21${CALLERID(num)});добавляем к номеру звонившего 21 для удобства
same => n,SET(CALLERID(name)=Msk-${CALLERID(name)});добавляем к имени звонившего Msk для удобства
same => n,Dial(IAX2/to-nsk/${EXTEN:2});звоним через IAX2 транк убирая 2 цифры в начале номера
Еще мы можем использовать московский Asterisk для исходящих вызовов из Новосибирска на московские номера для сокращения расходов, например, такой строчкой в диалплане:
exten => _9[78]49[57-9]X.,1,Dial(IAX2/to-moscow/${EXTEN})

Комментариев нет:

Отправить комментарий