Внешняя линия IAX2 27.04.2011

Наш провайдер Мультиком организовал для нас дополнительную линию IAX2. Разумеется, грех не воспользоваться такой возможностью и попробовать позвонить на внешний номер.

Сформируем задачу следующим образом (подчеркиваю, пока это в целях теста): при наборе номера из 11 цифр (7-XXX-XXX-XXXX) набрать номер через IAX2 соединение.

Настройка IAX канала

Первым делом, необходимо пробросить порт UDP 4569 (стандартный порт IAX2) на роутере вовне и открыть его на локальном фаерволе. Рекомендую так же жестко прописать хост, от которого будет идти вызов.

Попросите так же провайдера со своей стороны ограничить диапазон IP, с которыми может устанавливаться соединение.

В нашем случае, мы будем только отправлять звонки по этому каналу. Прием звонков будет запрещен.

Теперь настроим астериск.

Для начала, по непонятным причинам, мне пришлось создать пустую папку /var/lib/asterisk/firmware/iax. В ином случае – попытка перезагрузки IAX ругалась на отсутствие этой папки. Так же создайте пустой /etc/asterisk/iaxprov.conf.

Cоздаем файл /etc/asterisk/iax.conf.

[general]
; пересоздавать, если нет ответа в течение
; 2 секунд
autokill=yes
qualify=2000

[multicom]
; т.к. мы не будем принимать входящие через
; этот номер, то можно не задавать контекст.
; но мы его зададим
context=exteral_multicom

; тип задаем как peer - только отправка
type=peer

; задаем IP удаленного хоста
host=1.2.3.4
mask=255.255.255.255
; логин
username=*****
; и пароль
secret=*****

; признак, что это транк. немного оптимизирует
; передачу
trunk=yes

и смотрим – что у нас вышло

asterisk*CLI> iax2 reload
  == Parsing '/etc/asterisk/iax.conf':   == Found
asterisk*CLI> iax2 show peers
Name/Username    Host                 Mask             Port          Status
multicom         1.2.3.4    (S)  255.255.255.255  4569 (T)      OK (2 ms)
1 iax2 peers [1 online, 0 offline, 0 unmonitored]

Настройка диалплана

Тут, на данном этапе, все просто

[internal_phones]

; если набираем номер из 11 цифр
exten => _XXXXXXXXXXX,1,NoOp(multicom dialed ${EXTEN})
; то набираем его через IAX2, расширение multicom
exten => _XXXXXXXXXXX,n,Dial(IAX2/multicom/${EXTEN});
exten => _XXXXXXXXXXX,n,Hangup();