IP телефония и NAT traversal для чайников
Список наиболее часто задаваемых вопоросов службе поддержки VOIP провайдера:
- Меня не слышат.
- Я не слышу.
- Мне не приходит входящий звонок.
Все они являются, в 90 процентах случаев результатами одной проблемы.
В данной статье не будут рассматриваться варианты как с этим бороться. Дело в том, что по разному, поэтому планируется написать целый ряд статей где будут рассмотренны разные варианты решения проблем. Здесь рассмотрим только вопрос почему?
Все нижесказанное относится к 3 наиболее популярным протоколам: SIP, H323, MGCP. С точки зрения NAT traversal, то-есть прохождения маршрутизатора с NAT проблемы одни и те же, только порты разные.
Простейший случай. Абонент офисной сети с IP адресом 192.168.0.1 c программой IP телефона. Офисная сеть подключена к интернету через Линукс роутер c iptables в качестве NAT без sip_conntrack. Со стороны интернета адрес Linux роутера 66.230.160.14. Как происходит звонок. Во сигнальной сессии абонент А через порт 5060 посылает команду softswitch соединить его с абонентом B, и при этом сообщает, что будет слушать RTP поток (голос) на своем локальном адресе-порте 192.168.0.1:16384. Хотя с точки зрения абонента B, а также softsich-а, он будет слушать на интернет адресе 66.230.160.163:5060. Ни proxy ни ip телефон абонента B об этом понятия не имеют и соответственно голос от абонента B к абоненту А не пройдет.
В такой же схеме Абонент B зарегестрировался на SIP регистаре и ожидает входящего звонка от абонента А. Здесь возможны варианты.
- Или регистар берет обратный IP адрес, не из заголовка пакета c сообщением Register а из тела регистрационного запроса. То есть не 66.230.160.14 а 192.168.0.1. Естественно запрос на соединение (сообщение INVITE), будет послано вместо реального IP 66.230.160.14 адреса, на несуществующий в интернете 192.168.0.1.
- Более неприятная ситуация, это время жизни трансляции в NAT таблицах. Дело в том, что NAT роутер осуществляет трансляцию локального адреса-порта в глобальный и наоборот при приходе пакета. Затем, эта информация некоторое время хранится в таблице трансляциий (в пределах нескольких секунд). Стандартое время удержания информации о клиенте на SIP регистарах, H323 gatekeepers и других устройствах, от минуты и выше. Так вот, если входящий звонок прийдет в этот период времени, он дойдет до абонента B. В противном случае, NAT роутер просто проигнорирует его и звонок не дойдет.
В качестве заключения. Все описанные выше проблемы обычно решены, тем либо образом на VOIP серверах и клиентах. Как сделать, чтобы они работали првильно, будет рассказано в дальнейших публикациях.
Июнь 23rd, 2009 | 10:53
Если вкратце описать проблему:
1)2) Сигнальные пакеты зачастую идут нормально (звонок проходит), а RTP идёт ОТ абонента и К абоненту разными маршрутами (неважно через разные IP или порты)
3) Даже пакеты сигнализации идут «криво»
Сентябрь 16th, 2009 | 09:04
Здравствуйте!
Подскажите пожалуйста как дать трафику от\к АТА адаптера в локальной сети гарантированную пропускную способность в\из интернет.
Есть линукс с iptables, используется для выхода в и-нет (WAN,LAN).
C Уважением, Стас.
Кзахстан, Алматы.