использовать ip адрес в sdp
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
🔥 Популярное
DHCP: Опция 150 и 66
VoIP кодеки – подробное описание и характеристики
IP- телефония и VLAN
SIP против PRI – сравнение и преимущества
👌 Похожее
Версус: сравнение виртуальной и офисной АТС
Регистрация IP телефона
Описание протокола SIP
Про Session Description Protocol
Одним из важных компонентов установления соединения по протоколу SIP является протокол Session Description Protocol, или сокращенно SDP.
Продвинутый курс по Asterisk
Концентрат редких знаний, для внедрения Asterisk в крупных предприятиях. Все это мы собрали в одном курсе для тебя.
О протоколе SDP впервые заговорили в 1998 году в рамках опубликованного RFC2327. Спустя 8 лет, в 2006 году протокол претерпел некоторые изменения, которые были отображены в RFC4566.
Протокол SDP используется для установления соединения и согласования параметров передачи и приема аудио или видео потоков между оконечными устройствами. Наиболее важными параметрами обмена являются IP – адреса, номера портов и кодеки. Давайте разбираться?
Пример SDP
При установлении сессии SDP параметры передаются в рамках SIP – запросов. Давайте взглянем на один из таких запросов. В данном случае распарсим SIP INVITE, который прилетело на нашу IP – АТС Asterisk с помощью утилиты sngrep:
Про SDP поля
Каждый из параметров SDP сообщения можно отнести к одной из следующих категорий:
Продвинутый курс по Asterisk
Концентрат редких знаний, для внедрения Asterisk в крупных предприятиях. Все это мы собрали в одном курсе для тебя.
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
NAT, SIP и Asterisk
Трансляция сетевых адресов (NAT) является обычной практикой в сети и нередко мешает прохождению голосовых пакетов (нет звука) и инициализации соединений (нет соединения). Решение этой проблемы требует понимания принципов работы NAT и VoIP. В этой статье рассматривается протокол SIP и Asterisk, но проблемы и решения применимы и к большинству других приложений и протоколов.
Reinvite
Клиент за NAT
[sip_phone]
nat=yes
qualify=300 ; проверять соединение каждые 300 мс.
nat=force_rport,comedia
При такой конфигурации Asterisk использует внешний IP адрес externip для вызовов клиентов с параметром nat=yes. Дополнительно параметр qualify=yes поддерживает соединение, не позволяя удалять запись из таблицы трансляций.
SIP клиенты и Asterisk за NAT
Все усложняется если и Asterisk, и клиенты, находятся за NAT. Клиенты с внешней стороны не смогут получать SIP сообщения и принимать звонки. Или в SIP сообщении будет указан локальный IP адрес телефона, что приведет к потере звука.
Чтобы избежать потери звука запретите re-invite в файле sip.conf
Опция canreinvite устарела. Используйте ‘directmedia’.
Но клиенты находящиеся за NAT, все равно не смогут инициировать соединение с Asterisk и направить голосовые пакеты RTP на требуемый екстеншен. Для того чтобы это работало, надо пробросить требуемые порты через брандмауер на Asterisk. Диапазон RTP портов используемых Asterisk, назначается в файле rtp.conf.
По умолчанию задан диапазон от 10000 до 20000. Измените диапазон в соответствии с вашими потребностями (3 порта на каждый конкурирующий вызов).
Для нормальной работы за NAT, потребуется пробросить диапазон RTP портов в соответствии с настройками в файле rtp.conf и порт SIP (обычно 5060). В iptables это будет выглядеть так:
Где eth0 – внешний интерфейс, а 192.168.1.10 – IP адрес Asterisk.
Основные параметры конфигурации NAT для Asterisk
localnet
Параметр ‘localnet’ список сетевых адресов, которые считаются «внутренними».
externaddr
Внешний адрес щлюза (маршрутизатора) во внешнюю сеть. «externaddr = hostname[:port]» указывает статический адрес[:port] который будет использован в SIP и SDP сообщениях. Имя хоста (hostname) поднимается каждый раз, когда [пере]загружается sip.conf. Если порт не назначен, используется значение указанное в параметре «udpbindaddr». примеры:
externhost
«externhost = hostname[:port]» то же что и «externaddr» только это ‘hostname’ обновляемое через «externrefresh» секунд (по умолчанию 10 сек.).
В дополнение к вышесказанному Asterisk имеет дополнительный параметр «NAT» для разрешения вопросов, связанных со входящими SIP или медиа сессиями. В частности, в зависимости от настроек ‘NAT=’ как описано ниже, Asterisk может переопределить адрес/порт информацию, указанную в SIP/SDP сообщениях.
настройки могут совмещаться:
media_address
IP адрес используемый для медиа (аудио, видео и текста) в SDP может быть переназначен параметром ‘media_address’. Данный параметр может быть использован только в секции [general].
icesupport
ICE/STUN/TURN использование может быть включено глобально или для конкретного пира с помощью ‘icesupport’ опции.
directmedia
Для отключения прямых RTP потоков (peer-to-peer) используйте опцию:
устаревшие настройки sip.conf
externip= Этот параметр задается в секции [general] файла sip.conf и указывает внешний IP адрес, или имя хоста на вашем устройстве NAT.
Этот адрес будет использован для общения с устройствами с установленным параметром nat=force_rport.
localnet = Этот параметр задается в секции [general] файла sip.conf и указывает на локальную сеть и используется для обращения к устройствам с параметром nat=no.
Возможные значения:
NAT= yes, no, never, route
Начиная с версии Asterisk 11: nat=yes is deprecated, use nat=force_rport,comedia instead
Asterisk будет отправлять голосовые пакеты на порт и IP адрес с которого их получает а не указанные в SIP и SDP сообщениях.
Это будет работать только, если телефоны за NAT будут использовать для одинаковый порт для голосовых пакетов RTP и одинаковый (но отличный от голосового) для сигнализации RTCP.
directmedia
qualify = Эта опция имеет два назначения.Первое – поддерживать запись в таблице трансляций NAT и контролировать регистрацию телефона.
Возможные значения:
Этот параметр задает проверку по умолчанию каждые 2 секунды.
Это выключает проверку.
ключает проверку через заданное время в 300 ms.
rtp.conf
Задает первый порт диапазона для приема и оправки голосовых пакетов RTP.
Задает последний порт диапазона для приема и оправки голосовых пакетов RTP.
В Asterisk начиная с версии 11 появилась поддержка stun. icesupport должно быть включено.
Настройка res_pjsip для работы через NAT
В данной статье приведены примеры рабочей конфигурации драйвера канала PjSIP, когда Asterisk находится за NAT (Network Address Translation). Asterisk подключается через NAT к провайдеру IP телефонии (ITCP).
Этот пример подходит для большинства простых сценариев NAT при следующих условиях: Asterisk и телефоны находятся в частной сети. Маршрутизатор имеет локальный и публичный интерфейсы. Маршрутизатор реализует функции Трансляции Сетевых Адресов (NAT) и файерволла. На маршрутизаторе настроен проброс SIP и RTP портов на локальный IP адрес сервера Asterisk. В данном примере проброшены порты 5060 TCP/UDP и UDP 10000-10100 на LAN 10.10.2.10.
Устройства используемые в примере:
Устройство | 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) |
Для наглядности, в примере использованы фальшивые детали:
TSP номер аккаунта : 123456789 и DID номер входящий от провайдера IP телефонии (ITSP): 3216111.
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
Работа PJSIP за NAT
Рассмотрим работу PJSIP за NAT на примере CentOS 8 и Asterisk 16. PJSIP — мультимедийная коммуникационная библиотека, написанная на Си. Поддерживает такие протоколы как SIP, SDP, RTP, STUN, TURN, и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Network Address Translation (NAT) При настройке с помощью chan_sip […]
Рассмотрим работу PJSIP за NAT на примере CentOS 8 и Asterisk 16.
PJSIP — мультимедийная коммуникационная библиотека, написанная на Си. Поддерживает такие протоколы как SIP, SDP, RTP, STUN, TURN, и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями.
Network Address Translation (NAT)
no — Не выполняйте обработку NAT, отличную от RFC 3581.
force_rport — Если параметр rport отсутствует, все равно отправьте ответы на исходный IP-адрес и порт, как если бы присутствовал параметр rport.
comedia — Отправьте медиа на адрес и порт, с которого Asterisk получил его, независимо от того, где SDP указывает, что его следует отправить.
auto_force_rport — Автоматически разрешить отправку ответов на исходный IP-адрес и порт, как если бы присутствовал rport, если Asterisk обнаружит NAT. По умолчанию.
auto_comedia — Автоматически отправлять носитель на порт, с которого Asterisk получил его, независимо от того, где SDP указывает, что его следует отправить, если Asterisk обнаружит NAT.
Версии Asterisk до 1.8 имели меньшую степень детализации для параметра nat:
no — Не выполняйте обработку NAT кроме RFC 3581.
yes — Отправьте медиа на порт, с которого Asterisk получил его, независимо от того, где SDP указывает, что его следует отправить; отправлять ответы на исходный IP-адрес и порт, как если бы присутствовал rport; и переписать SIP-контакт на адрес источника и порт запроса, чтобы последующие запросы перешли на этот адрес и порт.
never — Не выполнять обработку NAT.
route — Отправьте носитель на порт, с которого Asterisk получил его, независимо от того, где SDP указывает, что он должен быть отправлен, и перезапишите SIP-контакт по адресу источника и порту запроса, чтобы последующие запросы перешли на этот адрес и порт.
Asterisk и телефоны, соединяющиеся через NAT с провайдером.
Этот пример подходит для большинства простых сценариев NAT, которые соответствуют следующим критериям:
Asterisk и телефоны находятся в частной сети.
Существует маршрутизатор, взаимодействующий с частными и общедоступными сетями. Где общедоступная сеть интернет.
Маршрутизатор выполняет функции трансляции сетевых адресов и брандмауэра.
Маршрутизатор настроен для переадресации портов, где он отображает необходимые диапазоны трафика SIP и RTP на ваш внутренний сервер Asterisk.
В этом примере маршрутизатор перенаправляет порты WAN TCP / UDP 5060 и UDP 10000-20000 в LAN 192.168.32.47
Устройства, включенные в пример:
Ради полного примера и ясности в этом примере мы используем следующие поддельные детали:
Конфигурация pjsip.conf
local_net — Это IP-сеть, которую мы хотим рассмотреть в нашей локальной сети. Для связи с адресами в этом диапазоне мы не будем применять какие-либо настройки, связанные с NAT.
external_media_address — Это внешний IP-адрес для использования при обработке RTP. Когда запрос или ответ отправляется из Asterisk, если пункт назначения сообщения находится за пределами IP-сети, определенной в опции «local_net», и медиа-адрес в SDP находится в локальной сети, тогда медиа-адрес в SDP будет переписан в значение, определенное для external_media_address.
external_signaling_address — Это очень похоже на настройку external_media_address, но для сигнализации SIP вместо RTP media. Упомянутые здесь две внешние опции должны быть установлены на один и тот же адрес, если вы не разделите сигнальный и медиа трафик и направите на разные IP адреса или сервера..
direct_media — Определяет, медиа поток и направляет RTP трафик непосредственно между конечными точками, или через Asterisk.
Вместе эти параметры гарантируют, что дальний конец знает, куда отправлять обратно пакеты SIP и RTP, а direct_media гарантирует, что Asterisk остается на пути передачи мультимедиа. Это важно, потому что наша система имеет частный IP-адрес, на который SIP провайдер не может направить трафик. Мы хотим убедиться, что трафик SIP и RTP возвращается на адрес WAN / Public Internet нашего маршрутизатора. Разделы с префиксом «sipus» — это все настройки, необходимые для входящих и исходящих соединений магистрали SIP, а разделы с именем 201 предназначены для телефона VOIP.
Пример настройки chan_pjsip(pjsip.conf):
Для удаленных телефонов за NAT
В приведенном выше примере мы предположили, что телефон находится в той же локальной сети, что и Asterisk. Теперь, возможно, Asterisk выставлен на публичный адрес, и вместо этого ваши телефоны являются удаленными и находятся за NAT, или, возможно, у вас есть сценарий двойной NAT?
В этих случаях вы можете рассмотреть следующие параметры для удаленных конечных точек.
media_address — IP-адрес, используемый в SDP для обработки медиа
Во время создания SDP IP-адрес, определенный здесь, будет использоваться в
качестве медиа-адреса для отдельных потоков в SDP.
rtp_symmetric — Обеспечить, чтобы RTP был симметричным. Отправьте RTP обратно на тот же адрес / порт, с которого мы его получили.
force_rport — Принудительное поведение, совместимое с RFC3581, даже если отсутствует параметр rport. По сути, всегда отправляйте ответы SIP обратно на тот же порт, с которого мы получили запросы SIP.
direct_media — Определяет, может ли носитель передаваться напрямую между конечными точками.
rewrite_contact — Определите, будут ли запросы SIP отправляться на исходный IP-адрес и порт вместо адреса, предоставленного конечной точкой.
Всё, что вы хотели знать о протоколе SIP
Архив номеров / 2007 / Выпуск №9 (58) / Всё, что вы хотели знать о протоколе SIP
|