Axen Posted December 24, 2018 (edited) · Report post Добрый день! Есть задача соединить между собой два сервера 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. использование в диалплане логин:пароль не приемлю. Edited December 24, 2018 by Axen Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted December 24, 2018 · Report post Для PJSIP можно завести 2 разных транспорта и ним развесить эндпоинты. Должно помочь. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Axen Posted December 24, 2018 · Report post 2 часа назад, TheUser сказал: Для PJSIP можно завести 2 разных транспорта и ним развесить эндпоинты. Должно помочь. Пробовал, не помогает. Похоже что надо инициировать соединение с разных портов, но со стороны srv2, sip пока :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted December 24, 2018 · Report post 16 минут назад, Axen сказал: Пробовал, не помогает. Похоже что надо инициировать соединение с разных портов, но со стороны srv2, sip пока :( А, стоп. Разнесите транспорты по разным портам. Скорей дело не в PJSIP, а в SIP, который может сбоить при работе двух пиров с одной пары IP/PORT. Разнесение транспортов решит проблему, если дело в этом. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Axen Posted December 24, 2018 · Report post 50 минут назад, TheUser сказал: А, стоп. Разнесите транспорты по разным портам. Скорей дело не в PJSIP, а в SIP, который может сбоить при работе двух пиров с одной пары IP/PORT. Разнесение транспортов решит проблему, если дело в этом. Я создавал два транспорта, с разными портами, не помогало) Проблема в PJSIP, он не понимает видимо, когда он устанавливает соединение на IP/PORT, а с этой же пары потом пытаются установить соединение с ним. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted December 24, 2018 · Report post 47 минут назад, Axen сказал: Я создавал два транспорта, с разными портами, не помогало) Ваша правда. Запутался сам и ввел Вас в заблуждение. Это у нас такой кейс был, хотели даже модифицировать Asterisk для обхода проблемы. Согласно этой схеме Endpoint привязан к Transport, но по сути Asterisk при поиске Endpoint для сопоставление пакета с ним Transport не учитывает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Axen Posted December 24, 2018 · Report post 58 минут назад, TheUser сказал: Endpoint привязан к Transport, но по сути Asterisk при поиске Endpoint для сопоставление пакета с ним Transport не учитывает. И это "боль" :( Сейчас сделал схему что srv1 связывается с srv2 по PJSIP, а принимает соединение от srv2 на SIP на другой порт отличный от PJSIP. В итоге когда звонок с srv2 у нас SIP->PJSIP, а когда звонок с srv1, то SIP-SIP. Но и тут сейчас возникла проблема, пытаюсь решить. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...