Помогите понять технологию скрещивания asterisk+openser(kamailio)

Kamailio/OpenSIPS и другие производные от SER.

Модераторы: Admins, Модераторы

Ответить
vrurg
Сообщения: 37
Зарегистрирован: 26 янв 2009, 14:41

Помогите понять технологию скрещивания asterisk+openser(kamailio)

Сообщение vrurg » 07 апр 2009, 18:59

У меня уже просто рвет крышу, рытье по докам и сети помогает мало. Прошу помощи здесь.

Исходные данные такие:

Есть готовая работающая система на CallManager 4.1, к которой хочу добавить SIP-клиентов на kamailio/asterisk. Есть выход на PSTN через Cisco 5300. В рамках системы клиенты разграничены по правам, т.е. не все всем могут звонить.

Клиентов за NAT'ом не будет, все подключаются по VPN.

Планирю следующее:

kamailio принимает регистрации и работает load balancer'ом. Звонки должны проключаться, с учетом прав, заложенных в CallManager (тут я прекрасно понимаю, как это должно быть, так что фокусироваться на этом сильно не надо), на все возможные направления. Т.е. как внутри SIP-сети, так и на CallManager, и в PSTN. Кроме того, asterisk должен заведовать транскодингом, конференциями и, возможно, в будущем - голосовой почтой.

Разводка звонков на asterisk без балансировки уже обкатана и тут проблем как-бы нет. Транки с CallManager, с 5300, скрипт, который вытаскивает необходимые сведения с CallManager и либо разрешает проключать звонок на клиента, либо нет - работает.

А вот с балансировкой уже не могу понять, как это все увязать в единое целое. kamailio худо-бедно подкрутил в первом приближении, регистрации он принимает. И, если не отдавать звонки на asterisk, клиентов между собой соединяет. Но при отдаче звонка на asterisk (при этом хочу оставить kamailio на пути звонка, т.е. record_route()+t_relay()) я даже не вижу со стороны последнего попыток обработки; дело, похоже, даже до dialplan'а не доходит.

С техническими деталями как-нибудь разберусь. Прошу просветить по общему дизайну конкретными советами или подходящими ссылками. В частности, должен ли asterisk каким-то образом учитывать регистрацию от kamailio, или клиенты должны на нем регистрироваться? Если второе - то каким образом asterisk узнает, на какой IP отправлять INVITE?

В общем, даже толком не могу разобраться, какие вопросы задавать... :(

ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

Сообщение ZloMurz » 08 апр 2009, 02:38


vrurg
Сообщения: 37
Зарегистрирован: 26 янв 2009, 14:41

Сообщение vrurg » 08 апр 2009, 07:19

Конечно читал. Но именно о связке с *, тем более в условиях балансировки, там не сказать, чтобы очень уж много.

ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

Сообщение ZloMurz » 08 апр 2009, 11:24

А эту тему?http://asteriskforum.ru/viewtopic.php?t=2741
есть вообще-то сайт проекта, с очень подробной документацией, или с английским проблемы?
Есть онлайн переводчик http://translate.google.com/
Вот в частности есть ссылка: http://kamailio.org/dokuwiki/doku.php/a ... ing-and-ha

vrurg
Сообщения: 37
Зарегистрирован: 26 янв 2009, 14:41

Сообщение vrurg » 08 апр 2009, 11:30

Шуршал и по теме (конфиг слил - по мере возможнстей сверяюсь). kamailio тоже изучен подробно. Проблема в том, что везде - технические детали, подробности. Негде получить общую картину, в т.ч. - со стороны *.

ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

Сообщение ZloMurz » 08 апр 2009, 12:17

Негде получить общую картину, в т.ч. - со стороны *.
Не могу я этого понять. Значит SIP протокол темный лес для тебя. Читай книжки. Рано или поздно придет просветление.

vrurg
Сообщения: 37
Зарегистрирован: 26 янв 2009, 14:41

Сообщение vrurg » 07 май 2009, 17:51

ZloMurz писал(а):Рано или поздно придет просветление.
Не скажу, чтобы оно пришло, но полегче стало. Все-равно борьба больше напоминает поход слепого по минному полю... ;)

А вообще, не хочется заводить новую тему по этому вопросу - подниму пока эту. Какой модуль может при входящем звонке проверить регистрацию звонящего? Хочется, при необходимости (вдруг накладки какие случились, как с часовым поясом в соседней моей теме) провести принудительную авторизацию.

ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

Сообщение ZloMurz » 08 май 2009, 04:33

Надо проверять при звонке зареган ли пир?
Тогда так

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

if (method=="INVITE") {

      if (!proxy_authorize("","subscriber")) {
       # Если получено сообщение INVITE, то мы должны отправить клиенту информацию,
       # необходимую для дайджест авторизации. Если отправитель сообщения не может
       # представить правильные данные дайджест авторизации, тогда сервер SER
       # ответит сообщением с кодом ошибки 403.
       #
       # Обратите внимание: Этот пример требует того, чтобы вызывающий и вызываемый клиент
       # были зарегистрированы на SIP маршрутизаторе. В будущих примерах мы подробнее
       # остановимся на этом моменте, и покажем, как добавить "проверенные" SIP устройства,
       # такие, как шлюзы в публичную телефонную сеть

        proxy_challenge("","0");
        return;
      } else if (!check_from()) {
        sl_send_reply("403", "Use From=ID");
        return;
      };

      consume_credentials();
взято http://www.voip.rus.net/tiki-index.php?page=SER+and+NAT

vrurg
Сообщения: 37
Зарегистрирован: 26 янв 2009, 14:41

Сообщение vrurg » 08 май 2009, 09:30

Это очевидный путь. В моем случае накладываются два момента. Первый я проверил почти случайно из-за разных часовых поясов на двух серверах. Клиент не зарегистрирован, прокси-авторизацию проходит - но в location-то он после этого не появляется. А по save("location") при каждом звонке в базу ложится новая запись о регистрации, что не есть хорошо.

Второй момент - asterisk, который тоже отправляет 407-й код - и тогда заваривается жуткая каша с обработкой нескольких последовательных INVITE.

Пока поглядываю в сторону reg_fetch_contacts из registrar. Вроде бы с ней можно сделать проверку на наличие регистрации и при необходимости завернуть на ветку www_auth/www_challenge.

tma
Сообщения: 361
Зарегистрирован: 11 июл 2005, 17:52
Контактная информация:

Сообщение tma » 08 май 2009, 11:23

ZloMurz писал(а):Надо проверять при звонке зареган ли пир?
Тогда так
Этот вариант не подходит! У меня часть звонков отбивалась!
Дело все в том, что INVITE приходит не один раз, а всякие re-INVITE сюда также попадают, вот на них иногда аудентификация и не проходит, а как результат -- разрыв соединения, причем со стороны телефона А. Телефон Б слушает тишину...

Added after 3 minutes:

Кстати, немного не в тему, но буду премного благодарен за способ авторизации звонка (не аудентификации UA, а именно авторизации самого вызова по номеру телефона).
Вариант -- делать это дальше, вместе с аккаунтингом, но только чем? У меня Quintum CallRelay ведет аккаунтинг, но вот авторизацию не смог прикрутить, что-то с radius'ом для этого не подружить.
Maksim Timofejev

ZloMurz
Сообщения: 303
Зарегистрирован: 31 янв 2008, 15:19

Сообщение ZloMurz » 05 фев 2010, 16:55

2 tma, не нашел какого-либо способа для авторизации вызова? Тоже проблема встала осуществления подобного.

indeec
Сообщения: 87
Зарегистрирован: 17 май 2009, 11:46
Откуда: Киев

Сообщение indeec » 05 фев 2010, 17:09

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

if (method=="INVITE") {
                        if (!proxy_authorize("domain","subscriber")) {
                                proxy_challenge("domain","0");
                                exit;
                        };
                        consume_credentials();
                };
Использую вот такую конструкцию у себя, всё работает.
Не совсем понял чем плох вариант с proxy_authorize?

tma
Сообщения: 361
Зарегистрирован: 11 июл 2005, 17:52
Контактная информация:

Сообщение tma » 05 фев 2010, 18:25

ZloMurz писал(а):не нашел какого-либо способа для авторизации вызова?
Здесь на формуе буквально недавно писали как.
Для меня это сейчас не актуально, но вскоре вновь понадобится -- вот тогда и буду разбираться.
Maksim Timofejev

Ответить