Наш провайдер Мультиком организовал для нас дополнительную линию 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.
; пересоздавать, если нет ответа в течение
; 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
и смотрим – что у нас вышло
== 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]
Настройка диалплана
Тут, на данном этапе, все просто
; если набираем номер из 11 цифр
exten => _XXXXXXXXXXX,1,NoOp(multicom dialed ${EXTEN})
; то набираем его через IAX2, расширение multicom
exten => _XXXXXXXXXXX,n,Dial(IAX2/multicom/${EXTEN});
exten => _XXXXXXXXXXX,n,Hangup();