Asterisk за NAT-ом.

По воле случая пришлось вплотную столкнуться с проблемой, когда сервер Asterisk находится за NAT-ом. Проблема заключается в следующем — если маршрутизатор счел RTP-поток от нашего sip-провайдера не принадлежащем текущей сессии, или же RTP к нам приходит с другого ip (не того, с которым мы транк настроили), то мы получаем проблемы со связью. Выглядит это следующим образом: от нас голос слышен хорошо и четко, а от человека, которому мы звоним, не слышно вообще ничего (даже шума).
В данном случае такая проблема возникает при работе с такими sip-провайдерами, как sipnet и mtt. С mtel проблем не наблюдается, т.к. у них 1 ip и маршрутизатор все общение между серверами считает единой сессией и, соответственно, перенаправляет входящий аудиопоток куда нужно.

Итак, что нужно сделать для решения проблемы:

1. Явно указываем Asterisk, что он за NAT-ом. Для этого нужно добавить в sip.conf следующие строки

nat=yes
externip=наш_внешний_ип
localnet=192.168.1.0/255.255.0.0 # подсеть локалки

2. Перенаправляем входящие RTP-потоки на наш сервер. Для этого мы смотрим в rtp.conf какие порты сервер анонсирует для RTP. Должно быть что-то вида:

rtpstart=10000
rtpend=20000

Опции говорящие и в соответствии с ними, в нашем случае нужно открыть порты 10000-20000. Протокол третьего уровня udp.
3. Пускаем все потоки через Asterisk. Дело в том, что некоторые устройства вполне могут пускать аудиопоток напрямую между собой, не загружая при этом voip-сервер. В случае NAT-а думаю понятно, что может случиться.
Итак… открываем sip.conf и добавляем туда:

canreinvite=no

Внимание: Если у вас на входе в сеть стоит устройство, знающее что такое sip и умеющее его обрабатывать… эту функцию нужно выключить.

Запись опубликована в рубрике Программное обеспечение с метками , , , , , , . Добавьте в закладки постоянную ссылку.

Комментарии запрещены.