Опуская ненужную лирику и скучную теорию, приступим к делу. Соединять два сервера Asterisk будем по протоколу IAX2. Для этого требуется внести изменения в файлы /etc/asterisk/iax.conf и /etc/asterisk/extentios.conf
Настройка iax.conf
На первом сервере в секции [general] добавляем строчки:
[general]
;register=> :@IP адрес второго сервера - для чего нужен этот параметр описано ниже
;
[serverA]
type=friend
user=
secret=
host=IP адрес второго сервера
На втором сервере в секции [general] добавляем строчки:
[general]
;register=> :@IP адрес первого сервера - для чего нужен этот параметр описано ниже
;
[serverB]
type=friend
user=
secret=
host=IP адрес первого сервера
Настройка extensions.conf
Например, на первом сервере у вас есть логин 111, а на втором - 222, и необходимо сделать так, чтобы можно было звонить с одного номера на другой.
На первом сервере добавляем строки:
[iaxconf]
exten=>8222,1,dial(IAX2/serverB/${EXTEN:1},30,m)
exten=>8222,2,Congestion
[demo]
exten => 111, 1, dial(sip/111,10,t)
include=>iaxconf
На втором сервере добавляем строки:
[iaxconf]
exten=>8111,1,dial(IAX2/serverB/${EXTEN:1},30,m)
exten=>8111,2,Congestion
[demo]
exten => 222, 1, dial(sip/222,10,t)
include=>iaxconf
Итак, что мы тут надобавляли. Выражение exten => 222, 1, dial(sip/222,10,t) означает, что на текущем сервере можно позвонить по номеру 222 и сервер вызовет абонента с номером 222, дается 10 секунд на вызов (в это время вызывающий абонент слышит гудки - параметр t), после истечении которых, если абонент не ответил - вызов сбрасывается (абонент не доступен или находиться вне зоны действия сети =) ).
Выражение exten=>8111,1,dial(IAX2/serverB/${EXTEN:1},30,m) указывает, что при наборе номера 8111, сервер вызывает соседний сервер по протоколу IAX2 и просит его вызвать абонента по номеру 111, т.е., грубо говоря, вызываем абонента по номеру 111 через восьмерку. ${EXTEN:1} - указывает, что нужно передать соседнему серверу текущий набранный номер, начиная со второго символа, длительность вызова - 30 сек, во время ожидания вызывающий абонент слышит музыку - m.
Выражение exten=>8111,2,Congestion указывает, что если вызываемый абонент по номеру 8111 вовремя не ответил - параметр 2 (т.е. это выражение выполниться после того как завершится первое), то сервер сообщает, что вызываемый абонент не доступен и корректно завершает соединение. Использование этого выражения более правильно, т.к. если абонент вовремя не ответил и в конфиге нет этого выражения для текущего вызываемого номера, то некоторое время сервер не сможет никого соединить с этим номером.
Команда register
Когда ip адрес клиента типа user неизвестен, пользователь типа peer не знает, куда совершать вызов (например, при вызове из офиса сотрудника, который работает на дому, когда у него имеется только динамически назначаемый ip адрес или он находиться за NAT.) Для решения этой задачи, домашний работник активно регистрируется на сервере в офисе, предоставляя свои данные и местоположение в сети.
Для включения регистрации, в секции [general] файла iax.conf, добавьте директиву для регистрации:
register => user:password@hostname.domain.ext
При этом непрерывно, через некоторые интервалы, будет обновляться информация о пользователе, и сервер всегда будет знать, как вызвать пользователя, даже если его IP адрес будет меняться.
Директива "register" работает только, если вы хотите соединить свой сервер с динамическим IP адресом c сервером, который имеет статический (реальный) IP адрес, т.е. для пользователя, на котором производиться регистрация, Вы должны добавить директиву "host=dynamic" в файле iax.conf. Если оба сервера имеют известные статические IP адреса, то в этом случае нет никакой нужды в регистрации, просто используйте директиву host=hostname на обоих серверах.
Правила iptables
Нелишним будет указать некоторые полезные правила iptables. Чтобы пакеты беспрепятственно проходили через фильтр, пишем:
Для протокола SIP:
iptables -A INPUT -p udp -m udp --dport 5004:5082 -j ACCEPT
Для протокола IAX2:
iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT
Медиапотоки RTP:
iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT
Некоторые используют протокол MGCP (media gateway control protocol):
iptables -A INPUT -p udp -m udp --dport 2727 -j ACCEPT
Для установки TOS в исходящих пакетах используем (для SIP) такое правило:
iptables -A OUTPUT -t mangle -p udp -m udp --dport 5060 \
-j DSCP --set-dscp 0x28
iptables -A OUTPUT -t mangle -p udp -m udp --sport 10000:20000 \
-j DSCP --set-dscp 0x28
http://www.xakep.ru/magazine/xa/108/154/1.asp
Источник: http://voipx.ru/cgi-bin/loscont.cgi?ID=1098 |