denisbondar
@denisbondar
Python, PHP developer

Проблема PJSIP на Android через VPN?

Asterisk 13.12.2, PJSIP 2.5.5
Сервер Asterisk имеет IP-адрес 192.168.100.223 и подключен к MikroTik.
На MikroTik работает РРТР-сервер, раздающий адреса из подсети 192.168.253.0, к которому подключаются клиенты (смартфоны) с целью использования Asterisk.
Клиент смартфон, подключенный по WiFi в другом офисе (маршрутизации между офисами нет) имеет IP-адрес 192.168.101.247, подключается по РРТР к MikroTik и получает IP-адрес в тунеле 192.168.253.2

SIP-клиент на смартфоне успешно подключается к Asterisk по IP 192.168.100.223. В консоли Asterisk:
pjsip show aors
Contact:  5001/sip:5001@192.168.253.2:35028;transport= eef5336413 Avail        28.189

Проблема RTP трафик со стороны Asterisk в сторону SIP-клиента поступает не на IP 192.168.253.2, а на IP 192.168.101.247, который назначен на WAN интерфейс смартфона.

При изучении трафика было обнаружено, что SIP-клиенты (все популярные, которые удалось испытать) подставляют в SIP-заголовки IP-адреса с интерфейсов смартфона наугад. Один клиент подставил IP-адрес WAN (192.168.101.247) в сообщение REGISTER в поля Sent-by Addres и Contact в заголовке. Другой клиент в сообщении REGISTER подставил правильные адреса (192.168.253.2), но после приема от Asterisk сообщения OPTIONS в ответном статусном сообщении подставил в поле Contact адрес WAN (192.168.101.247). Во всех случаях RTP трафик начинает идти на 192.168.101.247, т.е. улетает в сторону провайдера по маршруту по умолчанию. При подключении не из второго офиса, а через сотовую сеть проблема остается прежней - в заголовки подставляется IP адрес, назначенный оператором. Без использования VPN такой проблемы нет. Голос доходит от сервера к клиентам без проблем.

Первый клиент
ee0ccfe9089748deb5bdc3f6fe304186.PNG
Второй клиент
e976e9795c544f9cbd1c23d6f8e92f88.PNG

Можно ли каким нибудь образом "научить" pjsip игнорировать поле contact? Или научить SIP-клиенты подставлять правильные IP-адреса в заголовки?
  • Вопрос задан
  • 1236 просмотров
Решения вопроса 1
denisbondar
@denisbondar Автор вопроса
Python, PHP developer
Отвечу сам на свой вопрос.
Проблему с неверным заполнением SDP-заголовков мобильными SIP-клиентами можно решить двумя способами, а именно включив взаимодействие как-бы через NAT, даже если NAT по факту не существует:

1. Если клиент поддерживает опцию RPORT (RPORT for media), включите ее на клиенте - всё должно заработать.

2. Если клиент не поддерживает RPORT, тогда на Asterisk включаем следующие опции:
2.1. Если работаем через SIP, то в sip.conf в настройки клиента добавляем опцию nat = comedia
2.2. Если работаем через PJSIP, то в pjsip.conf в раздел endpoint добавляем опцию rtp_symmetric = yes

Таким образом Asterisk игнорирует указания SDP и шлет RTP поток туда, откуда пришел пакет.

За более детальной информацией можно обратиться к документу Migrating from chan_sip to res_pjsip (NAT), в котором можно найти настройки NAT как для SIP, так и для PJSIP
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы