Перейти к содержимому
Калькуляторы

Соединение двух Asterisk: 16.0.1 PJSIP с 13.23.1 SIP

Добрый день!

 

Есть задача соединить между собой два сервера Asterisk, тема избитая и обсосанная со всех сторон. Но возникла одна проблема, передача CID источника звонка.

 

Имеем Asterisk 16.0.1(srv1) +PJSIP + телефон GRANDSTREAM с одной стороны, и Asterisk 13.23.1(srv2) + CHAN_SIP + телефон DLINK. Решил делать соединение на SIP.

Srv2 выступает в качестве сервера, srv1 в качестве клиента. Соединение поднялось, звонки проходят, при звонке с dlink на grandstream (srv2->srv1), CID отображается, но при звонке с grandtream на dlink (srv1->srv2), отображается что звонит srv01. Это логично и понятно, и решил подправить это просто передачей параметра P-Asserted Identity, и подменой на srv02 в заголовке sip сообщения CID. Вроде решилась проблема, но не нет. Grandstream, при вставке русских букв, просто отказывается звонить, глюк железки.

 

Не долго думая, решил, а что мешает мне поднять два SIP соединения, как делают все остальные. Прописал все в pjsip.conf(srv1) и sip.conf(srv2). Соединение srv1(client)->srv2(server), поднялось. А вот при попытке соединения srv2(client)->srv1(server), мы получаем отлуп PJSIP'ом, мол AOR не найден для ENDPOINT. Но при этом ENDPOINT в ошибке пишется не тот, который должен использоваться для принятия соединения от srv2, а тот, который используется для инициализации соединения srv1->srv2. Приплыли, PJSIP похоже видит, что с данным хостом уже используется точка подключения, и начинает её использовать, с вытекающими от сюда всеми ошибками. 

 

Пробовал использовать другой порт для принятия подключения с srv2, но все равно ошибка, видимо нужно инициализировать подключения srv2 с другого порта, что не вариант. Есть ещё один вариант, включить параллельно PJSIP обычный SIP на другом порту, и с помощью него принимать подключение, но это какой то изврат.

 

Может есть какая то bestpractic, подскажите пожалуйста?

 

P.S. использование в диалплане логин:пароль не приемлю.

Изменено пользователем Axen

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для PJSIP можно завести 2 разных транспорта и ним развесить эндпоинты. Должно помочь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 часа назад, TheUser сказал:

Для PJSIP можно завести 2 разных транспорта и ним развесить эндпоинты. Должно помочь.

Пробовал, не помогает. Похоже что надо инициировать соединение с разных портов, но со стороны srv2, sip пока :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

16 минут назад, Axen сказал:

Пробовал, не помогает. Похоже что надо инициировать соединение с разных портов, но со стороны srv2, sip пока :(

А, стоп. Разнесите транспорты по разным портам. Скорей дело не в PJSIP, а в SIP, который может сбоить при работе двух пиров с одной пары IP/PORT. Разнесение транспортов решит проблему, если дело в этом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

50 минут назад, TheUser сказал:

А, стоп. Разнесите транспорты по разным портам. Скорей дело не в PJSIP, а в SIP, который может сбоить при работе двух пиров с одной пары IP/PORT. Разнесение транспортов решит проблему, если дело в этом.

 

Я создавал два транспорта, с разными портами, не помогало)

Проблема в PJSIP, он не понимает видимо, когда он устанавливает соединение на IP/PORT, а с этой же пары потом пытаются установить соединение с ним.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

47 минут назад, Axen сказал:

Я создавал два транспорта, с разными портами, не помогало)

Ваша правда. Запутался сам и ввел Вас в заблуждение.

 

Это у нас такой кейс был, хотели даже модифицировать Asterisk для обхода проблемы.

Согласно этой схеме Endpoint привязан к Transport, но по сути Asterisk при поиске Endpoint для сопоставление пакета с ним Transport не учитывает.

res_sip_configrelationships.png?version=

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

58 минут назад, TheUser сказал:

Endpoint привязан к Transport, но по сути Asterisk при поиске Endpoint для сопоставление пакета с ним Transport не учитывает.

И это "боль" :(

Сейчас сделал схему что srv1 связывается с srv2 по PJSIP, а принимает соединение от srv2 на SIP на другой порт отличный от PJSIP.  В итоге когда звонок с srv2 у нас SIP->PJSIP, а когда звонок с srv1, то SIP-SIP. Но и тут сейчас возникла проблема, пытаюсь решить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.