Настройка 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) |
Для наглядности, в примере использованы фальшивые детали:
ITSP номер аккаунта : 123456789 и DID номер входящий от провайдера IP телефонии (ITSP): 3216111
pjsip.conf конфигурация
Подразумевается, что вы ознакомились со статьей о конфигурации Asterisk pjsip.conf и имеете основные представления о работе Asterisk. Для этого примера, важно отметить опции - local_net, external_media_address и external_signaling_address в transport секции и direct_media в endpoint секции. Остальные параметры могут зависеть от конкретной конфигурации, модели телефона, сетевых настроек, специфики провайдера IP телефонии и т.д.
local_net
Диапазон адресов локальной сети.
external_media_address
Внешний IP адрес используемый для обработки RTP трафика. Когда запрос или ответ на запрос отправляется из Asterisk и IP адрес назначение находится за пределами сетей указанных в параметре 'local_net', а медиа адрес в SDP сообщении из локальной сети, тогда медиа адрес из SDP сообщения перезаписывается значением назначенным в параметре 'external_media_address'.
external_signaling_address
Это тоже самое что и 'external_media_address', только для SIP сигнализации, вместо RTP медиа трафика. Этим двум опциям внешних адресов, должен быть назначен один и тот же IP адрес, если вы, конечно, не хотите разделить сигнальный и медиа трафик и направить на разные IP адреса или сервера.
direct_media
Управляет медиа потоком, направляя RTP трафик непосредственно между конечными точками, или через Asterisk. (вспомните canreinvite из sip.conf) Вместе, использование этих опций, обеспечивает правильное прохождение SIP и RTP пакетами сетевых узлов, а 'direct_media=no' указывает, что именно Asterisk должен обрабатывать медиа трафик. Это важно, т.к. наша система Asterisk имеет локальный IP адрес и провайдер IP телефонии (ITCP) не может маршрутизировать трафик напрямую к нему, поэтому мыдолжны убедится что SIP и RTP трафик возвращается на WAN публичный интернет адрес нашего роутера. В секциях имена которых начинаются с «sip_provider_*», настраиваются входящие и исходящие подключения SIP транка, а в секциях [7777] VoIP телефон.
[transport-udp-nat] type=transport protocol=udp bind=0.0.0.0 local_net=10.10.2.0/24 local_net=127.0.0.1/32 external_media_address=123.123.123.123 external_signaling_address=123.123.123.123 [sip_provider_reg] type=registration transport=transport-udp-nat outbound_auth=sip_provider_auth server_uri=sip:gw1.example.com client_uri=sip:123456789@gw1.example.com contact_user=3216111 retry_interval=60 [sip_provider_auth] type=auth auth_type=userpass password=************ username=123456789 realm=gw1.example.com [sip_provider_endpoint] type=endpoint transport=transport-udp-nat section=from-trunk disallow=all allow=ulaw outbound_auth=sip_provider_auth aors=sip_provider_aor direct_media=no from_domain=gw1.example.com [sip_provider_aor] type=aor contact=sip:gw1.example.com contact=sip:gw2.example.com [sip_provider_identify] type=identify endpoint=sip_provider_endpoint match=203.0.113.1 match=203.0.113.2
[7777] type=endpoint section=from-internal disallow=all allow=ulaw transport=transport-udp-nat auth=7777 aors=7777 direct_media=no [7777] type=auth auth_type=userpass password=********* username=7777 [7777] type=aor max_contacts=2
Удаленные телефоны за NAT
Выше приведенный пример подразумевает, что телефон находится в локальной сети, так же как и сервер Asterisk.
Но может так статься, что Asterisk расположен на внешнем IP адресе, а удаленные телефоны находятся за NAT, или же и Asterisk, и телефоны расположены за NAT, т.е. имеет место двойной NAT?
В этих случаях пригодятся следующие настройки оконечных точек (ENDPOINTS)
media_address
IP адрес используемый SDP для обработки медиа трафика.
В момент создания SDP сообщения, IP адрес назначенный здесь(media_address=1.2.3.4), используется как медиа адрес для потока SDP. At the time of SDP creation, the IP address defined here will be used as the media address for individual streams in the SDP. Помните также , что опция 'external_media_address', заданная в секции transport , установит окончательный адрес для возврата медиа трафика.
rtp_symmetric
Обязательный симметричный RTP. Отправлять RTP назад на тот же адрес/порт с которого он был получен.
force_rport
Поведение обязательно совместимое с RFC 3581, т.е., если rport не указан, отправлять SIP ответы на тот же порт с которого были получены запросы.
direct_media
Управляет медиа потоком, направляя RTP трафик, непосредственно, между конечными точками, или через Asterisk.