Работа 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)
При настройке с помощью chan_sip одноранговые узлы, которые относительно Asterisk расположены за NAT, настраиваются с использованием параметра nat . В Asterisk версии 1.8 и выше доступны следующие параметры 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-контакт по адресу источника и порту запроса, чтобы последующие запросы перешли на этот адрес и порт.
В chan_pjsip параметры конечной точки , которые управляют поведением NAT:
- rtp_symmetric — отправляет носитель на адрес и порт, с которого Asterisk получает его, независимо от того, где SDP указывает, что его следует отправить
- force_rport — отправлять ответы на исходный IP-адрес и порт, как если бы порт присутствовал, даже если это не так
- rewrite_contact — переписать SIP. Контакт с адресом источника и портом запроса, чтобы последующие запросы перешли на этот адрес и порт.
Asterisk и телефоны, соединяющиеся через NAT с провайдером.
Этот пример подходит для большинства простых сценариев NAT, которые соответствуют следующим критериям:
Asterisk и телефоны находятся в частной сети.
Существует маршрутизатор, взаимодействующий с частными и общедоступными сетями. Где общедоступная сеть интернет.
Маршрутизатор выполняет функции трансляции сетевых адресов и брандмауэра.
Маршрутизатор настроен для переадресации портов, где он отображает необходимые диапазоны трафика SIP и RTP на ваш внутренний сервер Asterisk.
В этом примере маршрутизатор перенаправляет порты WAN TCP / UDP 5060 и UDP 10000-20000 в LAN 192.168.32.47
Устройства, включенные в пример:
VOIP телефон (201)
192.168.32.21
PC / Asterisk
192.168.32.47
маршрутизатор
LAN: 192.168.32.1
WAN: 176.214.40.2
ITSP SIP-шлюз
203.0.103.1 (example.com)
203.0.103.2 (example.com)
Ради полного примера и ясности в этом примере мы используем следующие поддельные детали:
Конфигурация pjsip.conf
Мы предполагаем, что вы уже прочитали Описание параметров конфигурации PJSIP в Asterisk с примерами. Для этого примера c NAT важными параметрами конфигурации, являются local_net , external_media_address и external_signaling_address в разделе типа транспорта и direct_media в разделе конечной точки. Остальные параметры могут зависеть от вашей конкретной конфигурации, модели телефона, сетевых настроек, ITSP и т. д.
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):
[transport-udp-nat]
type=transport
protocol=udp
bind=0.0.0.0
local_net=192.168.32.0/24
local_net=127.0.0.1/32
external_media_address=176.214.40.2
external_signaling_address=176.214.40.2
[sipus_reg]
type=registration
transport=transport-udp-nat
outbound_auth=sipus_auth
server_uri=sip:example.com
client_uri=sip:[email protected]
contact_user=1999888777
retry_interval=60
[sipus_auth]
type=auth
auth_type=userpass
password=************
username=1112223333
realm=gw1.example.com
[sipus_endpoint]
type=endpoint
transport=transport-udp-nat
context=from-external
disallow=all
allow=ulaw
outbound_auth=sipus_auth
aors=sipus_aor
direct_media=no
from_domain=gw1.example.com
[sipus_aor]
type=aor
contact=sip:gw1.example.com
contact=sip:gw2.example.com
[sipus_identify]
type=identify
endpoint=sipus_endpoint
match=203.0.103.1
match=203.0.103.2
[201]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
transport=transport-udp-nat
auth=201
aors=201
direct_media=no
[201]
type=auth
auth_type=userpass
password=*********
username=201
[201]
type=aor
max_contacts=2
Для удаленных телефонов за 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-адрес и порт вместо адреса, предоставленного конечной точкой.
Таким образом, следующее эквивалентно:
chan_sip (sip.conf) | chan_pjsip (pjsip.conf) |
[peer101] type=peer nat=yes ;… | [peer101] type=endpoint rtp_symmetric=yes force_rport=yes rewrite_contact=yes ;… |
[peer102] type=peer nat=no ;… | [peer102] type=endpoint rtp_symmetric=no force_rport=no rewrite_contact=no ;… |
[peer103] type=peer nat=never ;… | [peer103] type=endpoint rtp_symmetric=no force_rport=no rewrite_contact=no ;… |
[peer104] type=peer nat=route ;… | [peer104] type=endpoint rtp_symmetric=no force_rport=yes rewrite_contact=yes ;… |
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.