Skip to content

Opensips blog

Заметки voip инженера

  • Talant Blogs about VOIP
  • Готовые сервисы
    • PUSH NOTIFICATIONS API
  • Kamailio
  • Opensips
  • О себе и реквизиты

uac_auth cseq increase Решение solve

2014-09-10 yooxyman

Авторизация при помощи uac_auth имеет недостаток.
Она не генерирует новый CSEQ. в результате чего некоторые девайсы орут мол закольцовка . Loop Detected.

Решение было найдено из документации и выглядит оно мягко говоря не очень, особенно если нарисовать схему:

А -> Proxy1 -> b2b -> Proxy1 -> sbc.megafon.ru.

Почему нужно посылать звонок обратно в прокси, а не сразу в мегафон?
Да можно сразу в Мегафон, вот только инфу о таком звонке вы потеряете. Более того, вы не сможете сделать фейловер для Мегафона.

После того как я посмотрел на это решение, меня охватило уныние ибо не красиво. Взялся за третий способ и вот он-то и привел к желаемому результату. Хотя для этого используется стороннее ПО: SEMS все же этот SEMS очень хороший инструмент для opensips.

1. Способ описанный в письме Богданом: http://opensips.org/pipermail/users/2010-January/010215.html

> I’m trying to authenticate a UAC phone with a third party SIP to
> PSTN gateway, while having OpenSIPS in between. The gateway rejects
> repeated INVITEs with the same cseq number. The situation is quite
> typical, so I’m sure that OpenSIPS provides a way to solve this
> problem, no?
>
OpenSIPS itself no (as said, it cannot change elements that are defining
the dialog). But you may try a trick – when you receive the auth request
from the GW, ask the caller again for auth (from opensips), so that the
caller will generate a new proper INVITE you can use for auth. Shortly,
instead of the generating the second INVITE on opensips, force the
client (in whatever way) to generate it (to have proper cseq) and you
simply attach the credentials to the new INVITE when sending it to
GW…..just an idea, never tried it 🙂

В этом способе говорится о том, точбы заставить UAC отправить новый invite и пофиг каким способом это вы сделаете. Я этого способа не нашел, наверняка он очень простой.

2. Способ использовать b2b_uac. Но здесь возникает вопрос, а сможет ли вообще b2b Это сделать. Будем проверять….
способ оказался рабочий, но остается проблема с медиа_прокси.

Пока разбирался как работают сценарии, оказалось, что необходимый нам сценарий крайне прост. Прям вот вообще, выглядит так:

<scenario id=”b2b_test” name=”MS start and end” param=”1″ type=”script”>
<init>
<bridge>
<server>
<id>server1</id>
</server>

<client>
<id>client1</id>
<type>message</type>
<destination>
<value type=”param”>1</value>
</destination>
</client>

</bridge>
<state>1</state>
</init>

</scenario>

приведу выедржку из конфига:

loadmodule “b2b_entities.so”
loadmodule “b2b_logic.so”

modparam(“b2b_entities”, “db_mode”, 0)
modparam(“b2b_entities”, “script_req_route”, “b2b_request”) #request recieved
modparam(“b2b_entities”, “script_reply_route”, “b2b_reply”) #reply recieved
modparam(“b2b_logic”, “db_mode”, 0)
modparam(“b2b_logic”, “script_scenario”, “/usr/sipcolor/etc/opensips/b2b_test.xml”)

3. Работа с SEMS я решил скачать исходники 1.5 и скомпилировать только то что мне нужно, а именно CORE и SBC приложение.

Работа по компиляции уперлась в недостающие библиотеки, которые в принципе были легко установленны. На одной из систем возникла ошибка при компиляции исполняемого файла: pthread_cancel.

лечится добавлением ключа -pthread к компилятору. в Makefile.defs.

Всегда устанавливаю приложения в свои папки типа /usr/isp через префикс “make prefix=/usr/isp”. Так очень удобно искать файлы самого приложения.

 

UDP: в коде SEMS плагине uac_auth есть проверка на метод шифрования проверяется на MD5 и если вам прровайдер пришлет в нижнем регистре буквы md5 то хрен вам а не авторизация. патчится легко в файлике модуля.

Итак установили. Ниже приведу выдержки из трех файлов sems.conf, sbc.conf, auth_b2b.sbcprofiles.conf

 

sems.conf: Здесь главное указать какое приложение запускать я указал sbc.

…
# example for announcement with only g711 and ilbc codecs
# load_plugins=wav;ilbc;announcement
load_plugins=wav;isac;l16;gsm;ilbc;uac_auth;sbc
…
# examples:
# application = conference
# application = $(mapping)
# application = $(ruri.user)
# application = $(ruri.param)
# application = $(apphdr)
application = sbc
…

sbc.conf: необходимо указать профайлы для приложения sbc.

# profiles – comma-separated list of call profiles to load
#
# .sbcprofile.conf is loaded from module config
# path (the path where this file resides)
profiles=auth_b2b

# active call profile – comma separated list, first non-empty is used
#
# o active_profile=<profile_name> always use <profile_name> #
# o active_profile=$(ruri.user) use user part of INVITE Request URI
#
# o active_profile=$(paramhdr) use “profile” option in P-App-Param header
#
# o any replacement pattern
#
active_profile=auth_b2b
…

auth_b2b.sbcprofiles.conf: настройка самого модуля авторизации, кстати этот модуль на данный момент имеет ограничение: в него нельзя передать прокси сервер, если вам нужно иметь разные домен и прокси куда посылать запрос. next_hop можно указать только один. в связи с этим для авторизации на двух провайдеров придется пока запустить две копии SEMS.

UDP: посылается звонок на разных провайдеров очень просто, active_profile указывается $M($rU=>ruri_map),refuse , где ruri_map файлик соответствий номера с диалпланом, также можно сделать файлик соответствий IP входящего звонка и т.д. очень, очень гибко усе.

…
RURI=sip:$rU@todomain.ru
#From=””$P(u)” <sip:$P(u)@$P(d)>”
#To=””$rU” <sip:$rU@$P(d)>”

From=”<sip:name@fromdomain.ru>”
To=”<sip:$rU@todomain.ru>”

## routing
# outbound proxy:
#outbound_proxy=sip:79.170.27.75:5067
# force outbound proxy (in-dialog requests)?
#force_outbound_proxy=yes
# destination IP[:port] for outgoing requests
next_hop=proxy.forauth.ru

enable_auth=yes
auth_user=”02345234524″
auth_pwd=”1PвапрвапрвапрlX”
…

Запуск SEMS командой: /usr/isp/sbin/sems -f /usr/isp/etc/sems/sems.conf

и смотрим syslog для анализа того что происходит во время вызова, кстати, лог у SEMS просто отличный!

Posted in Без рубрики

Post navigation

Load Balancing SIP
Mysql. With recursive. Суммировать результаты запроса. Having.

Leave a Reply Cancel reply

You must be logged in to post a comment.

My Profile

Eremin Pavel

Voip developer

P: 79227502213

E: eremina.net@gmail.com

Hire me on Freelancer.com

Управление

  • Register
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Облако

AMI (4) asterisk (19) centos (6) centos 7 (5) certbot (2) certificate (2) debian (3) dispatcher (2) duplicate (2) elastix (3) error (4) events (2) fail (3) freepbx (8) g729 (2) google (2) how to (2) install (2) ios (2) issabel (4) issue (2) json (2) Kamailio (12) libmicrohttpd (2) limit (2) Load (3) local (2) manual (2) Mysql (8) nat (2) opensips (18) opensips-cli (3) PAMI (2) performance (2) pjsip (2) rtpengine (5) rtpproxy (2) SBC (3) ssh (3) timeout (3) tls (5) transcoding (2) voip (4) webrtc2sip (3) windows (3)

Recent Posts

  • Auth SIP manual
  • Update opensips 3.2.2 -> 3.2.6 centos 7
  • TLS
  • Opensips. MI. Json. Zabbix.
  • Opensips-cli. Json. jq.

Archives

  • June 2022
  • May 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • May 2021
  • April 2021
  • March 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • September 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • December 2017
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • February 2016
  • December 2015
  • August 2015
  • June 2015
  • April 2015
  • February 2015
  • November 2014
  • September 2014
  • July 2014
  • June 2014
  • May 2014
  • August 2013
  • July 2013
  • April 2013
  • September 2012

Categories

  • ansible
  • Asterisk
  • ChannelRedirect
  • freepbx_tips
  • freeswitch
  • kamailio
  • opensips
  • rtpengine
  • SQL запросы
  • ssl\tls
  • Unix вопросы
  • vmware
  • Без рубрики
  • Безопасность
  • Городские номера
  • Готовые решения
  • Общее
  • переадресация
  • Проблемы в коде
  • Проблемы при настройке
  • Эксперт

Meta

  • Register
  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

© 2022 Opensips blog

Proudly powered by WordPress | Theme: x-blog by wpthemespace.com