Rport sip что это
Asterisk 11 за NAT, нет звука в одну сторону, нет слышимости. Что делать?
Опубликовано в Asterisk
Преодоления NAT для Asterisk бывает очень сложной задачей (нет звука), потому как RTP трафик и SIP сигнализация идут отдельно. В интернете практически все описания настроек опции NAT, сводятся к более старым версия Asterisk 1.8. Попытаемся рассмотреть опции настроек, для актуального Asterisk 11. Если у вас нет звука, нет звука в одну сторону, нет слышимости, прочтите внимательно эту инструкцию.
Когда клиент пытается инициировать сеанс связи, оно отправляет SIP сообщение, содержащее его IP-адрес и некоторую дополнительную информацию. Получив это сообщение, Asterisk использует его, чтобы определить, куда отправить ответ на это сообщение. Поскольку устройство находится за NAT, SIP-сообщение будет иметь серый адрес, например, 192.168.1.104. Тем не менее, мы можем сообщить Asterisk, игнорировать SIP-адрес этого сообщения, а вместо этого использовать то, что поставляется сетевым стеком. Рассмотрим какие опции мы можем использовать в sip.conf для преодоления NAT:
Стоит заметить что начиная с версии Asterisk 11: nat=yes устарело, и необходимо использовать nat=force_rport,comedia.
RFC 3581 позволяет одному клиенту использовать параметр rport, для того чтобы передать другому клиенту, что оно должно реагировать на адрес источника IP и порт запрос, а не на IP адрес прописанный в SIP заголовке. Установка параметра rport может произойти, когда устройство знает, что он находиться за NAT и не может записать информацию, которая была бы необходима, для связи в обоих направлениях, в заголовке SIP. Asterisk всегда читает параметр rport, если он передается, но так как это происходит не так часто, как хотелось бы, мы можем заставить Asterisk предположить, что устройство будет передавать параметр rport. Выполняя это, мы заставляем Asterisk всегда отвечать на адрес IP и порт источника сообщения, от которого он получил запрос. Если настройки NAT явно не определены, Asterisk будет выполнять auto_force_rport, в качестве параметра по умолчанию. Вы можете принудительно изменить такое поведение, установив nat=force_rport.
Во многих реализациях NAT, при не получении пакетов поддержки диалога, может происходить закрытие соединения. В Asterisk для предотвращения этого используется опция qualify=yes, выполняющая отправку OPTIONS серверу каждые 2000 миллисекунд (2 секунды), не давая закрыть сессию NAT устройством. Также можно указать свое время в миллисекундах:
SIP клиенты и Asterisk за NAT
Есть два основных варианта, когда Asterisk находится за NAT: externaddr и extern хост.
Внешний адрес шлюза (маршрутизатора) во внешнюю сеть. «externaddr = hostname[:port]» указывает статический адрес[:port] который будет использован в SIP и SDP сообщениях. Имя хоста (hostname) поднимается каждый раз, когда [пере]загружается sip.conf. Если порт не назначен, используется значение указанное в параметре «udpbindaddr».
«externhost = hostname[:port]» то же что и «externaddr» только это ‘hostname’ обновляемое через «externrefresh» секунд (по умолчанию 10сек.).
Параметр ‘localnet’ указывает список сетевых (серых) адресов, согласно RFC1918, которые считаются «внутренними».
Обработка RTP медиа потоков.
В том случае когда вы используете внешнего VoIP провайдера, а ваш Asterisk находиться за NAT устройством, необходимо использовать опцию directmedia=no:
Стоит упомянуть, если ваш провайдер VoIP использует RTP медиа сервер с IP адресом отличным от SIP сервера, а сам Asterisk находиться за NAT, опция directmedia=no может не подойти для вас.
Asterisk будет всегда использовать симметричный режим RTP, как определено в RFC 4961, это означает то, что Asterisk всегда будет отправлять пакеты из того же порта, и то которого их получил. Значение по умолчанию directmedia=yes, так что если у вас есть конечные точки за NAT, вы должны установить опцию directmedia=no.
IP адрес используемый для RTP (аудио, видео и текста) в SDP может быть переназначен параметром media_address. Данный параметр может быть использован только в секции [general].
ICE/STUN/TURN использование может быть включено глобально или для конкретного пира, с помощью icesupport опции, по умолчанию эта опция выключена.
NAT, SIP и Asterisk
Если у вас нет звука, нет звука в одну сторону, нет слышимости, прочтите внимательно эту инструкцию.
Reinvite
Клиент за NAT
Начиная с версии Asterisk 11: ‘nat=yes’ устарело, используйте ‘nat=force_rport,comedia’
nat=force_rport,comedia
SIP клиенты и Asterisk за NAT
Чтобы избежать потери звука запретите re-invite в файле sip.conf
Опция canreinvite устарела. Используйте ‘directmedia’.
По умолчанию задан диапазон от 10000 до 20000. Измените диапазон в соответсвии с вашими потребностями (3 порта на каждый конкурирующий вызов).
Основные параметры конфигурации NAT для Asterisk
sip.conf
Поддержка NAT в Asterisk 12
localnet
параметр ‘localnet’ список сетевых адресов, которые считаются «внутренними».
externaddr
externhost
«externhost = hostname[:port]» то же что и «externaddr» только это ‘hostname’ обновляемое через «externrefresh» секунд (по умолчанию 10сек.).
настройки могут совмещаться:
Установка force_rport принуждает Asterisk всегда передавать ответы обратно на адрес / порт, с которых он получил запросы, даже если другая сторона не поддерживает добавления параметра ‘rport’.
media_address
icesupport
directmedia
устаревшие настройки sip.conf
bindaddr= IP адрес Asterisk, если указано 0.0.0.0, то любой адрес.
Этот адрес будет использован для общения с устройствами с установленным параметром nat=force_rport.
localnet= Этот параметр задается в секции [general] файла sip.conf и указывает на локальную сеть и используется для обращения к устройствам с параметром nat=no.
Начиная с версии Asterisk 11: nat=yes is deprecated, use nat=force_rport,comedia instead
Asterisk будет отправлять голосовые пакеты на порт и IP адрес с которого их получает а не указанные в SIP и SDP сообщениях.
directmedia
Этот параметр задает проверку по умолчанию каждые 2 секунды.
Это выключает проверку.
Включает проверку через заданное время в 300 ms.
rtp.conf
В Asterisk начиная с версии 11 появилась поддержка stun. icesupport должно быть включено.
Настройка res_pjsip для работы через NAT
Устройства используемые в примере:
Устройство | IP адрес в примере |
---|---|
VOIP телефон(7777) | 10.10.2.77 |
PC/Asterisk | 10.10.2.10 |
Маршрутизатор | LAN : 10.10.2.1 |
WAN: 123.123.123.123 | |
ITSP SIP шлюз | 203.0.113.1(gw1.example.com) |
203.0.113.2(gw2.example.com) |
Для наглядности, в примере использованы фальшивые детали:
pjsip.conf конфигурация
local_net
Диапазон адресов локальной сети.
external_media_address
external_signaling_address
direct_media
Удаленные телефоны за NAT
Дополнительные настройки соединения с SIP-сервером (версия 3.xx)
Содержание
Как попасть на страницу настроек
На странице запуска в меню слева при остановленном сценарии кликнуть по пункту «Параметры устройства»,
затем выбрать параметр «IP-телефония», указав в строке «Имя или ip-адрес шлюза» адрес SIP-шлюза и нажать кнопку «Далее» внизу справа.
Описание настройки
Выбрать IP-адрес для соединения
Посмотрите, какие параметры есть в выпадающем меню. Если у вас в списке только один IP-адрес, можете оставить значение «Автоматически», если адресов два или более, необходимо выбрать именно тот IP-адрес, через который будет происходить соединение с SIP-шлюзом.
Использовать StunServer
При наличии роутера, маршрутизатора или интернет-сервера включите данный параметр с настройками по умолчанию, чтобы автоматически определить топологию сети. В случае, если не слышно ответа от абонента или абонент не слышит вашего сообщения, попытайтесь включить эту опцию.
Использовать User ID
Позволяет задать имя пользователя User ID, в случае, если он отличается от Auth ID.
Использовать Caller ID
Позволяет задать номер телефона, который будет отображаться у абонента, в качестве номера вызывающего. Поддерживается не всеми SIP-шлюзами.
Rport
При использовании протоколов транспортного уровня без гарантии доставки отправка ответа на SIP-запрос производится на тот IP-адрес, с которого запрос был получен. Этот IP-адрес транспортный уровень протокола SIP заносит в параметр received заголовка Via перед передачей сообщения вышележащим уровням. Номер же порта для отправки извлекается из заголовка Via. В случае применения NAT — это порт, на котором ожидает ответа находящийся за NAT пользовательский агент, а не тот порт, через который происходит NAT-трансляция и на котором NAT ожидает поступления ответа; следовательно, ответ не может достичь адресата.
Решение этой проблемы было предложено в RFC 3581 и заключается в отправке ответа на порт, с которого запрос был получен, вместо порта, взятого из заголовка Via. При этом сам порт заносится в специальный параметр rport-заголовка Via. Таким образом, прокси-сервер отсылает ответное сообщение на порт и IP-адрес, с которых пришёл запрос. Это позволяет ответу найти соответствие в таблице трансляции NAT и достичь целевого узла. Этот метод называется симметричной маршрутизацией ответов.
Программное распознавание голосового ответа абонента
По умолчанию выключено. Используется программное распознавание снятия трубки абонентом. Использовать не рекомендуется, в правильно настроенном SIP-шлюзе распознавание ответа происходит на аппаратном уровне. Подробнее в вопросах и ответах.
Включить DNS
По умолчанию включено. Рекомендуется оставлять включенным этот параметр при соединении с сервером, указываемом по доменному имени, а не по IP-адресу.
Поддерживать соединение с SIP-сервером (Keep Alive)
По умолчанию выключено. Некоторые SIP-серверы, особенно принимая входящие звонки, требуют для поддержания сеанса соединения, чтобы клиентская программа периодически посылала на сервер запрос. Включение данной опции активирует режим соединения, в котором через выбранное пользователем время посылается запрос нужного типа.
Тип распознавания DTMF-сигналов
Можно выбрать один, два или все три варианта распознавания нажатых абонентом клавиш.
Подробное описание дополнительных настроек SIP-соединения можно найти на странице устройств SIP.
Всё, что вы хотели знать о протоколе SIP
Архив номеров / 2007 / Выпуск №9 (58) / Всё, что вы хотели знать о протоколе SIP
|