artem
18.12.2012
59809

Решение проблем NAT в IP-телефонии Asterisk

NAT или трансляция сетевых адресов — довольно часто используется в сети. Но при использовании NAT необходимо учитывать тот факт, что данная технология может создавать препятствия для прохождения голосовых пакетов, а также инициализации соединений. Существует несколько схем нахождения SIP клиента и сервера Asterisk за NAT. Рассмотрим некоторые из них и способы решения проблем.

Рассмотрим случай, когда SIP клиент (телефон) находится за NAT, а Asterisk — снаружи. В данном случае голосовые пакеты будут перенаправляться на немаршрутизируемый адрес в сети, что в свою очередь соответственно приведет к потере звука.

В данной ситуации решением проблемы будет заключаться в следующем: в файле sip.conf указывается что включен NAT и используется внешний IP, тогда Asterisk будет использовать внешний IP для всех клиентов, кроме явно указанных в праметре localnet. Также стоит установить для сервера параметр qualify, равный примерно 300 миллисекунд — сервер будет опрашивать устройства в сети через заданный промежуток времени. Также возможно целесообразно будет разрешить использовать устройствам технологию Reinvite.

Пример:
sip.conf
[general]
localnet=192.168.1.10/255.255.255.0 ; локальная сеть
externip=88.128.221.1 ; внешний ip адрес
[client]
nat=yes ; включить НАТ
qualify=300 ; проверять соединение каждые 300 мс.

 Следующий случай — сервер Asterisk находится за NAT, а клиенты снаружи. В данной ситуации проблема может заключаться в следующем — поток RTP приходит не с того IP на который настроен транк, а с другого или же маршрутизатор определил поток как не принадлежащий текущей сессии — то чаще всего проявляется это в наличие голоса от звонящего и в тоже время полное отсутствие звука от того кому был совершен звонок.

Решение данной проблемы заключается в следующем: необходимо в явном виде указать серверу Asterisk, что он находится за NAT (в файле sip.conf); перенаправить входящие потоки RTP на Asterisk (в файле rtp.conf указаны порты для RTP соответственно эти порты и должны быть открыты); и последним шагом необходимо запретить Reinvite, т.е. пустить все потоки через Asterisk, запретив телефонам соединяться напрямую.

Пример:
[general]
localnet=192.168.1.10/255.255.255.0 ; локальная сеть
externip=88.128.221.1 ; внешний ip адрес
[client]
nat=yes ; включить НАТ
canreinvite=no
rtp.conf
rtpstart=10000
rtpend=20000

 Следующая типичная схема — когда и сервер Asterisk и SIP-клиенты находятся за NAT. Клиенты снаружи не смогут принимать звонки и SIP сообщения. Или в случае указания в SIP сообщении локального IP адреса телефона, будет происходить потеря звука.

Для избежания потери голоса запрещаем reinvite. Для того чтобы клиенты за NAT могли инициировать соединения с Asterisk и направлять RTP-пакеты на нужный экстеншен — необходимо пробросить требуемые порты через файервол на сервере. Смотрим диапазон портов, используемых Asterisk для RTP, в файле rtp.conf.

Пример проброса портов:
iptables -t nat -A PREROUTING -i eth0 -p udp -m udp –dport 10000:12000 -j DNAT –to-destination 192.168.1.10
iptables -t nat -A PREROUTING -i eth0 -p udp -m udp –dport 5060 -j DNAT Клиент за NAT –to-destination 192.168.1.10
Где eth0 — внешний интерфейс, а 192.168.1.10 — IP адрес Asterisk.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices