VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Аsterisk за nat, голос в обе стороны, видео - нет.

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
shumiloff
Сообщения: 60
Зарегистрирован: 18 ноя 2010, 19:04

Аsterisk за nat, голос в обе стороны, видео - нет.

Сообщение shumiloff »

Добрый день.

Астериск за натом. Есть несколько учётных записей. Одна для входящего вызова и пара для исходящих. На одну из исходящих подключается linphone для теста, на другую - мобильное приложение (далее МП), использующее библиотеки liblibphone.

При вызове на linphone всё прекрасно и астер отправляет все RTP потоки на белый адрес маршрутизатора, за которым находится сип клиент. Всё работает без проблем.

В случае с МП два пакета RTP трафика со звуком уходят на серый адрес устройства, на котором запущено МП (10.11.11.116), а потом появляется новый RTP со звуком и уже уходит куда нужно - на адрес хоста маршрутизатора. RTP c видеопотоком как начинает пытаться так и продолжает идти на серый адрес вникуда.

Обе учётных записи отнаследованы от одного шаблона, находятся в одном контексте и т.п..
Слева - вызов на linphone, справа - на МП.
aster_117.png
С одной стороны можно было бы сказать, что проблема в МП, но узнать о портах/адресах, на которые должны прийти RTP потоки астер может либо из инвайта, либо из SDP. И то и другое при двух вызовах идентично за исключением ID сессий, номера вызова и конкретных портов. А RTP в сторону как linphone, так и МП отправляет именно астериск.

Вот пример 200 OK (SDP) от линфона (в белых адресах заменил октеты X.X.0.130 - адрес маршрутизатора, за которым астер, Y.Y.178.38 - адрес маршрутизатора, за которым linphone и МП):

Код: Выделить всё

2022/10/05 16:39:36.665042 X.X.0.130:43535 -> 10.6.0.49:5060
SIP/2.0 200 Ok
Via: SIP/2.0/UDP Y.Y.178.38:5060;branch=z9hG4bK3f2cff47;rport=55067
From: "11173" <sip:11173@Y.Y.178.38>;tag=as525610e7
To: <sip:11173@X.X.0.130:43535;transport=udp>;tag=vObDmIU
Call-ID: 0192902a0a3666f8283577f12c41a307@Y.Y.178.38:5060
CSeq: 102 INVITE
User-Agent: LinphoneAndroid/4.6.12 (ONEPLUS A5010) LinphoneSDK/5.1.51 (tags/5.1.51^0)
Supported: replaces, outbound, gruu
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, PRACK, UPDATE
Contact: <sip:11173@X.X.0.130:43535;transport=udp>;expires=3600;+sip.instance="<urn:uuid:b6d0079f-308c-00fe-ba39-a0a69f7143cc>"
Content-Type: application/sdp
Content-Length: 230

v=0
o=11173 991 3834 IN IP4 10.11.11.116
s=Talk
c=IN IP4 10.11.11.116
t=0 0
m=audio 7078 RTP/AVP 8 0 101
a=rtpmap:101 telephone-event/8000
m=video 9078 RTP/AVP 99
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42801F
Аналогичный пакет от МП:

Код: Выделить всё

2022/10/05 16:40:57.221551 X.X.0.130:55067 -> 10.6.0.49:5060
SIP/2.0 200 Ok
Via: SIP/2.0/UDP Y.Y.178.38:5060;branch=z9hG4bK5801ac5f;rport=55067
From: "11171" <sip:11171@Y.Y.178.38>;tag=as32faddfd
To: <sip:11171@X.X.0.130:55067;transport=udp>;tag=ohbHMWk
Call-ID: 50890fd45ee9254a1bb80ac95d75e5c7@Y.Y.178.38:5060
CSeq: 102 INVITE
User-Agent: LinphoneAndroid/2.4.9 (belle-sip/1.6.3)
Supported: replaces, outbound
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, UPDATE
Contact: <sip:11171@X.X.0.130:55067;transport=udp>;+sip.instance="<urn:uuid:180a3b1e-5714-4c13-9e57-69adc7a53887>"
Content-Type: application/sdp
Content-Length: 231

v=0
o=11171 3374 2716 IN IP4 10.11.11.116
s=Talk
c=IN IP4 10.11.11.116
t=0 0
m=audio 7076 RTP/AVP 8 0 101
a=rtpmap:101 telephone-event/8000
m=video 9078 RTP/AVP 99
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42801F
Настройки сипов:

Код: Выделить всё

[general]
context=cnt1
allowoverlap=no
allowguest=yes
udpbindaddr=0.0.0.0
tcpenable=no
transport=udp
srvlookup=no
externaddr=Y.Y.178.38


      localnet=192.168.0.0/255.255.0.0 ; RFC 1918 addresses
      localnet=10.0.0.0/255.0.0.0      ; Also RFC1918
      localnet=172.16.0.0/12           ; Another RFC1918 with CIDR notation
      localnet=169.254.0.0/255.255.0.0 ; Zero conf local network


videosupport=yes
disallow=all
allow=alaw
allow=ulaw
allow=h264

nat=no
canreinvite=no
directmedia=no

[remote](!)
type=friend
host=dynamic
nat=force_rport,comedia
canreinvite=yes
qualify=yes
context=cnt1

Все 3 учётных записи, участвующие в процессе отнаследованы от шаблона remote, отличаются только номерами и паролями.

Подскажите пожалуйста, в какую сторону копать?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: Аsterisk за nat, голос в обе стороны, видео - нет.

Сообщение ded »

Надо

Код: Выделить всё

canreinvite=no
Особенность передачи видео в chan_sip: в отличии от аудио - может иметь больше параметров для согласования (BIAS, TIAS, fmtp-profile, а цыскофоны ещё передают разные video image attr x= y= q=), и совсем не транскодируется. По дефолту Астериск что получает в инвайте от оригинатора, то и передаёт терминатору, разумеется - и голос, и видео пропуская через себя. Потому canreinvite=no. И если он какой-то SIP header параметр на входе не понимает, то он его и не передаёт, видео не передаётся. Конечсно можно пробовать с canreinvite=yes, но тогда строка Dial должна быть без всяких опций и таймаута, только Dial(SIP/${EXTEN}), тогда устройства попытаются становить прямой медиа канал. Но задампить его для анализа на моб. устриойстве трудно. И никаких трансферов, никакого RTCP.

Учитывать особенности двух НАТ на разных устроствах в сигнализации chan_sip - тупиковый способ создать работоспособное МП.
Много сил и сомнительный результат в конце.
Нужно делать туннельные соединения, концепция изложена тут:
http://asterisk.ru/news/183

Или осваивайте PJSIP.
shumiloff
Сообщения: 60
Зарегистрирован: 18 ноя 2010, 19:04

Re: Аsterisk за nat, голос в обе стороны, видео - нет.

Сообщение shumiloff »

Спасибо!

canreinvite=no на ситуацию никак не повлиял, linphone по-прежнему работает, в МП видео по-прежнему не идёт.

Заставить пользователя на стороне МП настраивать ещё и туннели и организовывать этот процесс - не вариант. Пробовали делать туннель L2 до боевого астериска в ЦОД, у которого есть белый статический адрес, подняли транк, с объекта по L2 без nat и маршрутизации вызов уходит на сервер с белым адресом, тот отправляет вызов на МП - аналогичная картина была и на нём при работе с МП и сип клиентом.

В сторону перехода на pjsip смотрим давно, но не было времени перейти. Видимо, время настало. Спасибо за совет, пойду гуглить "pjsip nat".
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH