Обход SIP и NAT - PullRequest
       44

Обход SIP и NAT

1 голос
/ 30 августа 2011

Я пытаюсь понять точную проблему с NAT и SIP и видел много разных объяснений.Вот что я собрал до сих пор:

1) Пользовательский агент SIP инициирует и принимает вызовы, поэтому, если NAT / межсетевой экран не настроен на прием входящего трафика через этот порт, он не может работать - это имеет смысл, нозвучит больше брандмауэр и сопоставление портов

2) SIP-сообщения содержат IP-адреса (которые могут быть частными) в теле, которое требует прохождения NAT - если это так

3, это не проблемас SIP, но с RTP, параметры которого включены в SDP как часть тела сообщения SIP, включающего частные IP-адреса

4), что-то связанное с UDP или TCP?

Ответы [ 4 ]

3 голосов
/ 30 августа 2011

Когда вызов выполняется с помощью SIP, конечная точка вызывающего абонента не знает конечную точку, которой должен достичь вызов, т.е. IP-адрес конечной точки.
Он знает только IP-адрес сервера SIP.
Таким образом, сообщение INVITE переходит кSIP-сервер и SIP-серверы «знают», где и как достичь вызываемых конечных точек.
Идея состоит в том, что сообщения SIP содержат данные SDP, которые содержат необходимую информацию, чтобы в конечном итоге телефоны моглиустановите сеанс, и пользователи смогут начать разговор.
Эти данные включают в себя IP, порт, кодеки и другие параметры.
Так что, если один из телефонов находится за NAT, телефон сообщит в качестве своего IP, например IP_X, которыйявляется его частным IP, а другая конечная точка не может достичь этого IP;публичный IP неизвестен на этом этапе.

1 голос
/ 30 августа 2011

Существует документ от Eyeball Networks, который четко объясняет проблему обхода NAT и брандмауэра для voip и решение STUN, TURN, ICE . Есть также пара отличных диаграмм о том, как выполняются вызовы SIP P2P и SIP TURN на http://www.eyeball.com/voip-solutions/stun-turn-ice.htm

1 голос
/ 30 августа 2011

Я слегка не соглашусь с ответом Цахи Левента-Леви.

Проблема в том, что IP-адрес, который вы указали в заголовках Via, Contact, From / To, SDP и т. Д., Должен быть глобально маршрутизируемым. Если вы находитесь за NAT, вам, очевидно, нужно будет указать свой внешний IP-адрес.

Реализация ICE, использование STUN и т. Д. Позволяет вам делать это автоматически , но вы всегда можете решить программу вручную.

В частности, просмотрев таблицу маршрутизации вашей машины, вы можете определить, находится ли вызываемая вами машина за NAT или нет (благодаря знанию того, что рабочие машины находятся за этой VPN NAT, а локальные машины включены или нет). эта подсеть, а все остальное работает через NAT вашего роутера). С помощью этой информации вы можете узнать внешний / удаленный адрес NAT каким-либо образом (STUN дает это автоматически, но ваш интернет-маршрутизатор может иметь статический адрес, или вы можете связаться с HTTP-сервером, способным вернуть ваш внешний адрес или ...). Если у вас есть этот внешний / внешний адрес, вы можете поместить адрес, где это необходимо - ваш заголовок контакта, SDP c = заголовки и т. П.

1 голос
/ 30 августа 2011

Все ваши предположения верны.В SIP вы можете разделить его на 2 основные проблемы: сигнализация и медиа.Сигнализация выполняется в SIP через TCP или UDP, и соединение может открываться в обоих направлениях, так как вызовы могут быть набраны или приняты агентами пользователя.Носитель работает по протоколу RTP (и RTCP), который обычно выполняется по протоколу UDP (если только вы не пытаетесь добиться прохождения NAT), а затем он может перейти по протоколу TCP).Здесь порты и адреса распределяются динамически, их необходимо использовать в обоих направлениях и запускать в нескольких сеансах (= несколько сокетов и подключений).

Для достижения обхода NAT обычно используется несколько методов: STUN, TURN, ICE, HTTP-туннелирование и даже SBC.Для обхода NAT для SIP требуется внешняя поддержка со стороны серверов - обычно не серверов SIP - которые выделены для работы.

...