Домашний интернет и телефон
ETEL.RU

Asterisk и NAT

Автор записи:

Рубрики: Asterisk

14 Апр 2016

Для голосовой связи в IP-телефонии обычно используется протокол SIP. Трафик взаимодействия устройств по этому протоколу состоит из непосредственно трафика сигнализации SIP и трафика передачи голоса — RTP. Для корректной работы голосовой связи нам нужно обеспечить прохождение обоих видов этого трафика через НАТ.

Клиент находится за NAT, а Asterisk — снаружи

В этом случае в конфигурационном файле sip.conf астериск нам надо указать что мы включаем НАТ и используем внешний IP, чтобы астериск для всех клиентов кроме указанных в localnet использовал externip.

[general]
localnet=172.16.12.0/255.255.255.0 ; локальная сеть
externip=85.165.01.12 ; внешний ip адрес

[phone1] 
nat=yes ; включить НАТ
qualify=300 ; проверять соединение каждые 300 мс.

указываем параметр qualify — чтобы опрашивать устройство каждые 300 миллисекунд.

Дополнительно на устройстве SIP можно указать в настройках оборудования параметро Reinvite — это позволить пускать RTP-трафик не через IP-атс Asterisk, а напрямую между SIP-устройствами.

В случае, если у нас и телефонная станция и клиенты находятся за NAT, нам нужно принудительно запретить Reinvite с клиентов, поскольку они не смогут завязывать соединения с другими клиентами SIP за НАТ напрямую. Эти соединения, конечно, могли бы работать внутри, но это не имеет смысла, поскольку обычно в локальной сети и так высокая скорость. Кроме того, в конфигурационном файле rtp.conf нам нужно определить диапазон портов, в котором будет идти трафик RTP, и этот входящий трафик надо транслировать на Asterisk с сервера NAT (в данной статье это не описывается). Обычно для работы RTP необходимо использовать не менее 10 портов.

sip.conf

[general]
canreinvite => no

rtp.conf.

[general]
rtpstart=10000 
rtpend=10010

Давайте подведем итог, какие параметры в конфигурационных файлах могут быть нам полезны.

sip.conf :

port={номер_порта} порт для SIP-сигнализации (по умолчанию UDP 5060)
bindaddr={адрес} IP-адрес, с которого работает сервер Asterisk, если указано 0.0.0.0, то любой адрес.
externip={IP-адрес} внешний адрес интерфейса, на котором работает NAT (используется для nat=yes).
localnet={IP-адрес_сети}/{маска_сети} — определяет адрес локальной сети (используется при nat=no).
nat={yes|no|never|route} — определяет как будет подключаться пользователь к серверу Asterisk.
qualify={yes|no|время_в_мс} — как часто будет проверяться регистрация SIP-клиента

rtp.conf :

rtpstart={стартовый номер порта}
rtpend={конечный номер порта} — диапазон портов используемых для RTP, по умолчанию UDP 10000 — 20000

Если вы используете для NAT оборудование CISCO, то может возникнуть проблема с обработкой трафика SIP. Оборудование подменяет в заголовках SIP внутренний адрес клиента на свой, при этом не меняет порт. В результате этого оборудование пытается отсылать NOTIFY и INVITE на порт, указанный в полях Contact и Via и пакеты к клиенту не попадают.

Самое простое решение — отключить на Cisco sip-nat и работать с этими пакетами как обычные с обычными.
На маршрутизаторах (IOS):

no ip nat service sip tcp port 5060
no ip nat service sip udp port 5060

Если в качестве роутера для NAT вы используете межсетевой экран CISCO PIX или CISCO ASA, нужно отключить инспекцию трафика SIP

policy-map global_policy
class inspection_default
no inspect sip
  • Комментарии к записи Asterisk и NAT отключены

Возможность комментирования закрыта модератором.

Корпоративный блог

Рубрики

Комментарии

  • Евгений Иванович: Прекрасно знаю и помню Анатолия Петровича Струка. В годы службы в УВД Свердлоблисполкома не раз наш [...]
  • МИла: Говорить о пиратстве будут и дальше, в зависимости от того сколько "премируют" за независимые исслед [...]
  • Нина: Елена с удовольствием бы Вам ответила, но вы не указали адрес [...]
  • Елена: Добрый день, Нина! Большая просьба - напишите мне на почту, мне надо вас спросить о важном для меня [...]
  • Ната: Здравствуйте, Ольга Федоровна! А где же свежие статьи? Даже с Новым годом своих абонентов и читателе [...]
  • Александр: Меня больше впечатлило фото, я владелец нового журнала на Юге России очень хочется предложить фото [...]
  • ирина: Место просто потрясающее, провела там почти всё лето очень интересно. Дача прям рядом с ней)буквальн [...]
  • Антон: А можно глупый вопрос? Вот иностранцы как должны на эти сайты заходить или они только для внутреннег [...]
  • Ната: Как продвигать будете? Есть ли портфолио работ, чтобы иметь какое-то представление, что это за сайт- [...]
  • Владилен: Спасибо за проявленный интерес. Предложение очень агрессивное по цене (в хорошем смысле), поэтому в [...]
Телефон контакт-центра: (343) 385-2000
© 2006 – 2017 ETEL.RU, ООО «СЦК»
Россия, Урал, Екатеринбург