Pull to refresh

Как связать два asterisk-сервера (часть вторая. IAX2)

Development of communication systems *
image
Статья для начинающих астерисководов.
Итак, имеем два астериска.
Задача — организовать прямой дозвон через префикс туда и обратно по IAX2.
Исходные данные:
Астериск 1.4 на обеих концах
1. samara.asterisk.ru — внешнее DNS имя первого астериска.
2. kazan.asterisk.ru — внешнее DNS имя второго астериска. Пусть он имеет несколько провайдеров (например, kazan2.asterisk.ru, kazan3.asterisk.ru).

Обратимся к автомобильным кодам регионов.
Тогда дозвон из Самары будет 9-16-<номер>.
Из Казани 9-63-<номер>.

Для начала советую ознакомиться чем IAX2 лучше по сравнению с SIP для взаимодействия server-2-server.

Не важно имеют ли астериски прямой выход в интернет. Главное — пробросить UDP порт 4569.
В прошлой статье я описал как реализовать связь по SIP. Теперь дошла очередь IAX2. Тем более, что этот протокол для этого и создавался.

Еще один аспект — использование правильного кодека. По личному опыту лучше всего подходит G729. Вы его можете найти в интернете и загрузить в астериск в интерфейсе CLI посредством команды module load codec_g729.so.

iax.conf 1-го (самарского) астериска
[general]
disallow=all
allow=g729
allow=gsm
allow=alaw
allow=ulaw
bindaddr=0.0.0.0
calltokenoptional = 0.0.0.0/0.0.0.0
delayreject=yes

jitterbuffer=yes

register => samara:password4samara@kazan.asterisk.ru
register => samara:password4samara@kazan2.asterisk.ru
register => samara:password4samara@kazan3.asterisk.ru

; see tips in www.voip-info.org/wiki/view/Asterisk+config+iax.conf
[guest]
type=user
host=dynamic

; for incoming
[kazan]
type=friend
qualify=yes
auth=md5
trunk=yes
username=kazan
secret=password4kazan
host=dynamic
context=office_rules


extensions.conf 1-го (самарского) астериска
...
[office]
exten => _916.,1,Set(CALLERID(all)="Samara (num ${CALLERID(num)}) <63>")
exten => _916.,n,NoOp(${CALLERID(all)})
exten => _916.,n,Dial(IAX2/samara:password4samara@kazan/${EXTEN:3},60,tT)
exten => _916.,n,HangUp
...

include => office_rules

[office_rules]
exten => _[12]XX,1,Dial(SIP/${EXTEN},60,tT)
exten => _[12]XX,n,HangUp


iax.conf 2-го (казанского) астериска
[general]
disallow=all
allow=g729
allow=gsm
allow=alaw
allow=ulaw
bindaddr=0.0.0.0
calltokenoptional = 0.0.0.0/0.0.0.0
delayreject=yes

jitterbuffer=yes

register => kazan:password4kazan@samara.asterisk.ru

; see tips in www.voip-info.org/wiki/view/Asterisk+config+iax.conf
[guest]
type=user
host=dynamic

; for incoming
[samara]
type=friend
qualify=yes
auth=md5
trunk=yes
username=samara
secret=password4samara
host=dynamic
context=office_rules


extensions.conf 2-го (казанского) астериска
...
[office]
exten => _963.,1,Set(CALLERID(all)="Kazan (num ${CALLERID(num)}) <16>")
exten => _963.,n,NoOp(${CALLERID(all)})
exten => _963.,n,Dial(IAX2/kazan:password4kazan@samara/${EXTEN:3},60,tT)
exten => _963.,n,HangUp
...

include => office_rules

[office_rules]
exten => _[12]XX,1,Dial(SIP/${EXTEN},60,tT)
exten => _[12]XX,n,HangUp


Несколько комментариев.
1. Очень важно внешним абонентам дать возможность звонить только на внутренние номера.
Контекст office должен быть описан для ваших офисных пользователей, там же вы можете описать звонки в город и по межгороду.
Контекст office_rules используется для внешних абонентов — разрешаем там только звонить на внутренние номера (3-х значные, которые начинаются с 1 или с 2).
2. При звонках используется конструкция:
Dial(IAX2/login:password@iax-account/...)

Суть в том, что мы звоним с авторизацией на сервер, который смог у нас зарегистриваться для учетной записи iax-account. Как и в случае с SIP, можно указывать несколько директив register.
3. В примере внутри офиса используются клиенты, подключенные по SIP.
4. Просмотреть регистрации для IAX2 можно командой iax2 show registry.
5. Для случая, если астериск находится за NAT. Допустим для определения провайдера при исходящем трафике у вас используются отдельные ай-пи адрес (например, 192.168.4.5 — один провайдер, 192.168.14.5 — другой провайдер), а на шлюзе идет проброс на ай-пи адрес исходя из провайдера.

В этом случае, чтобы срабатывала регистрация, нужно в описание пиров на нашем астериске добавить:
sourceaddress=192.168.4.5
sourceaddress=192.168.14.5
Такая конструкция на текущей версии позволяет добиться множественной регистрации одного пира на нескольких провайдерах. Т.е. грубо говоря, имеем возможность несколько раз сказать, что «у нас такой-то IP адрес».
Пример
iax2 show registry:
Host dnsmgr Username Perceived Refresh State
155.15.75.270:4569 N peer1 72.255.69.78:4569 60 Registered
92.14.191.35:4569 N peer1 72.255.69.78:4569 60 Registered
Tags:
Hubs:
Total votes 6: ↑3 and ↓3 0
Views 43K
Comments Comments 10