Страница 1 из 2
Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 08 окт 2021, 18:54
aclz
Суть в двух словах:
Есть Астериск 18 (chan_pjsip), есть клиент за NAT'ом (PhonerLite) на TLS, в нем прописан STUN.
В Астериске из настроек, касающихся сабжа, стоит max_contacts=1, rewrite_contact='yes'.
Клиент регистрируется на Астериске. В фазе REGISTER клиент в поле Contact отдает серверу вместо своих локальных корректные внешние IP и порт маршрутизатора (получающиеся после прохождения им NAT и определенные STUN-сервером). Поэтому Астериск в своих ответах на REGISTER, успешно коммуницирует с клиентом через эти IP и порт (роутер пробрасывает с этого порта пакеты на рабочую станцию клиента на порт софтфона).
Но когда проходит входящий вызов от другого клиена, находящегося, скажем, в одной локалке с Астериском, то софтфон за NAT, после пришедшего INVITE отправляя на Астериск RINGING и все последующие сообщения, в поле Contact уже указывает не тот динамический порт на маршрутизаторе из первого шага, а свой локальный порт для входящих SIP-соединений (5061). IP при этом по прежнему шлется внешний, тут все ок.
Ну и понятно, что после этого Астериск начинает слать все SIP-сообщения на клиента за NAT'ом уже на этот порт, о котором маршрутизатор с NAT'ом знать ничего не знают, поэтому и дропает все эти пакеты, вплоть до BYE. Поэтому когда вызывающий абонент кладет трубку, софтфон за NAT это не видит (секунды разговора продолжают идти).
Хочу понять, это косяк Астериска, косяк софтфона, особенности реализации SIP, и каков минимальный набор костылей нужно городить, чтобы это обойти (при условии, что настройки роутера нам недоступны, типа поднятия UPnP NAT, проброса индивидуальных портов до каждого софтфона итп), или просто руки кривые.
И да, вопрос ни коим образом не касается RTP/SRTP и его настроек (голос ходит нормально), вопрос исключительно по обрыву сигнализации по направлении от Астера к клиенту с момента установки голосового соединения (от клиента на Астер пакеты продолжают ходить, поэтому, если трубку кладет вызываемый абонент за NAT, у вызывающего, который звонит из локалки Астериска, не преодолевая NAT, звонок успешно прекращается).
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 09 окт 2021, 19:06
Zavr2008
Умиляют меня нигилисты от телефонии, ставят Asterisk 18 с PJSIP, конфигов и pjsip отладку не выкладывают, хотят лечение по фотографии)
А потом
Хочу понять, это косяк Астериска
FreePBX?
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 01:47
aclz
Каких конфигов вам отвесить? У меня файлов конфигов как таковых почти нету (всё в realtime), астер собран из сырцов с pj-bundled (FreePBX и подобным тем более не увлекаюсь), значения параметров, влияющие на сабж я уже привел, поэтому вываливать портянки прям всего подряд не вижу смысла, а что-то конкретное - пожалуйста, скажите только чего.
Последний раз работал с NAT когда-то еще в эпоху chan_sip.so лет 7 назад, и там всё заводилось с полпинка, а с pjsip как-то всё и грустно, и в интернетах пусто (все мануалы под копирку про поставить rtp_symmetric=yes, force_rport=yes и вот это вот всё, и якобы будет работать). При этом, сами разрабы астера пишут, что астер с pjsip не реюзает уже существующие TLS-соединения с пирами, и при инвайтах может создавать новые. И каким образом при всём при этом должен хотя бы в теории работать траверс нат я ума не приложу.
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 01:58
aclz
Вот куски логов SIP, но в них вы не найдете особо ничего нового относительно первого поста.
Софтфон IP:port (TLS): 192.168.0.1:5061
PBX IP:port: 1.2.3.4:5061
Экстеншен софтфона: 90000
Исходящий локальный порт софтфона при установке TLS-сессии: 192.168.0.1:56789
Внешний ИП и порт софтфона после преодоления NAT: 100.100.100.100:60000
REGISTER от софтфона:
Код: Выделить всё
REGISTER sip:1.2.3.4 SIP/2.0
Via: SIP/2.0/TLS 100.100.100.100:60000;rport
Contact: <sip:90000@100.100.100.100:60000;transport=tls>
Видим, что софтфон успешно определил свои IP и порт через STUN (100.100.100.100:60000) и послал их серверу в поле Contact.
-------------------------------------------
Астер отвечает успехом регистрации:
Код: Выделить всё
SIP/2.0 200 OK
Via: SIP/2.0/TLS 100.100.100.100:60000;rport=60000
Contact: <sip:90000@100.100.100.100:60000;transport=tls>
Астер шлет ответ на 100.100.100.100:60000, что делает возможным преодоление NAT, роутер пересылает их на локальный ип и порт софтфона (192.168.0.1:56789)
-------------------------------------------
Спустя какое-то время на софтфон приходит входящий звонок:
Код: Выделить всё
INVITE sip:90000@100.100.100.100:60000;transport=tls SIP/2.0
Via: SIP/2.0/TLS 1.2.3.4:5061;rport;
Contact: <sip:asterisk@1.2.3.4:5061;transport=TLS>
Пока всё нормально, Астер опять шлет пакеты на 100.100.100.100:60000, используя установленное соединение, преодолевая тем самым NAT.
-------------------------------------------
Софтфон сигнализирует АТС, что звонит звонок:
Код: Выделить всё
SIP/2.0 180 Ringing
Via: SIP/2.0/TLS 1.2.3.4:5061;rport=5061;
Contact: <sip:90000@100.100.100.100:5061;transport=tls>
А вот тепер софтфон анонсирует АТС свой локальный порт (но внешний ИП): "100.100.100.100:5061".
Всё. Дальше Астер будет слать весь SIP на 100.100.100.100:5061, а роутер будет эти пакеты дропать, т.к. по этому порту нет активной TCP-сессии, соответственно роутер не знает куда их дальшефорвардить в локалку. SRTP на этот момент уже пошел на отдельном порту, поэтому голос мы слышим, но когда, например, удаленный абонент положит трубку, BYE мы не получим, и так и будем продолжать слушать тишину разговора.
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 18:36
Zavr2008
Каких конфигов вам отвесить?
После подобного помогать желание как-то отпало.
Так и есть, realtime, pjsip, asterisk 18 самосбор, tls, локальные адреса замалеваны - все намешано в кучу.
Понимать ничего не хочу, астериск же глючный..
А теперь к делу:
Просто делаете ОТДЕЛЬНЫЙ сетап, на том же freepbx distro или из пакетов на asterisk 16.
Без извратов всяких, без tls и прочего - МИНИМАЛЬНУЮ конфигурацию и пробуете повторить данную проблему.
Если проблема осталась - выкладываете нормальные конфиги pjsip и отладку (pjsip set logger host <ip>).
PJSIP хоть и позиционируется и пиарится сангомой как замена SIP, но иногда есть еще темные пятна.
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 18:56
aclz
А теперь к делу:
Просто делаете ОТДЕЛЬНЫЙ сетап, на том же freepbx distro или из пакетов на asterisk 16.
Без извратов всяких, без tls и прочего - МИНИМАЛЬНУЮ конфигурацию и пробуете повторить данную проблему.
Скажите, у вас Астер на TLS и PJSIP работает с клиентами, находящимися за чистым NAT'ом (без извращений типа uPNP и пробросов портов)?
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 20:40
Zavr2008
Еще и лентяй)
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 10 окт 2021, 22:29
aclz
Дело в том, что вы, похоже, не поняли вопроса, вам нужны какие-то конфиги, зачем-то установка FreePBX и подобн. nonsence, когда мой вопрос сугубо теоретический, не связан с конфигами и моей инсталляцией вообще. Какое-то подобие управления сабжем я нашел лишь в api pjsip (взаимодействие с коим через конфиги астера недоступно, насколько я понимаю только правкой сырцов), в астере на уровне конфигов настроек, управляющих сабжем просто нет (во всяком случае, в ps_endpoints, ps_aors и конфиге транспортов я относящихся к сабжу настроек, кроме означенных выше, не нашел). Поэтому вместо лишней траты времени, хочется "спорить о вкусе устриц с теми, кто их ел".
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 11 окт 2021, 03:25
Zavr2008
Наоборот, дилетанты вроде вас всегда ставят последний астер, собирают сами, еще и реалайм и потом пишут всякую чушь.
Ни у кого нет желание разбираться в анании что сами и развели.
Выполните мои рекомендации со стабильной проверенной сборкой и простыми конфигами (статическими) и можно будет продолжить .
спорить о вкусе устриц с теми, кто их ел
Ага, конечно ни я ни остальные ничего не понимаем в астере. И еще он - глючный.
Re: Софтфон за NAT, Asterisk в интернете, не работает.
Добавлено: 11 окт 2021, 03:34
Zavr2008
rewrite_contact — Определите, будут ли запросы SIP отправляться на исходный IP-адрес и порт вместо адреса, предоставленного конечной точкой.
direct_media — Определяет, может ли носитель передаваться напрямую между конечными точками.