forum.bitel.ru http://forum.bitel.ru/ |
|
SIP RADIUS attributes (OpenSER) http://forum.bitel.ru/viewtopic.php?f=6&t=1262 |
Страница 1 из 2 |
Автор: | iONE [ 29 июн 2008, 16:06 ] |
Заголовок сообщения: | SIP RADIUS attributes (OpenSER) |
Цитата: Модуль VoicеIP предназначен для подсчета стоимости звонков через IP телефонию. В настоящее время он поддерживает оборудование которое шлет запросы RADIUS в стандарте CISCO а также поддержано оборудование QUINTUM.
Нужно сделать AAA SIP c использованием SIP RADIUS аттрибутов. Можно ли доработать VoIP Radius server для поддержки SIP аттрибутов? |
Автор: | Администратор [ 30 июн 2008, 09:43 ] |
Заголовок сообщения: | |
Проверка пароля, шифрованного по алгоритму MD5 для SIP у нас реализована. С мерой все работает. На каком месте остановились? |
Автор: | iONE [ 30 июн 2008, 10:46 ] |
Заголовок сообщения: | |
Сейчас работает aaa на FreeRadius. У Вас в документации указанно что требуются h323 атрибуты, а у нас только SIP, по этому не понятно будет ли их воспринимать биллинг, могу выложить пример start - stop пакетов для аккаунтинга корторые шлёт OpenSER. Digest авторизация, я думаю проблем не составит, а вот аккаунтинг под вопросом. |
Автор: | iONE [ 01 июл 2008, 01:17 ] |
Заголовок сообщения: | |
Пример start - stop запросов посылаемых SIP сервером. Sun Mar 12 17:29:21 2006 Acct-Status-Type = Start Service-Type = Sip-Session Sip-Response-Code = 200 Sip-Method = INVITE User-Name = "101@openser.org" Calling-Station-Id = "sip:101@openser.org" Called-Station-Id = "sip:102@openser.org" Sip-Translated-Request-URI = "sip:102@192.168.0.12:5066" Acct-Session-Id = "1dbe198c82543fa2@192.168.0.11" Sip-To-Tag = "00D0E90101B8_T9513" Sip-From-Tag = "111aa0fda452c726" Sip-Cseq = "4435" Sip-Src-IP = "192.168.0.11" Sip-Src-Port = "5068" NAS-IP-Address = 127.0.0.1 NAS-Port = 5060 Acct-Delay-Time = 0 Client-IP-Address = 10.10.10.10 Acct-Unique-Session-Id = "37fb00358437ff4d" Timestamp = 1142177361 Sun Mar 12 17:29:28 2006 Acct-Status-Type = Stop Service-Type = Sip-Session Sip-Response-Code = 200 Sip-Method = BYE User-Name = "102@openser.org" Calling-Station-Id = "sip:102@openser.org" Called-Station-Id = "sip:101@openser.org" Sip-Translated-Request-URI = "sip:101@192.168.0.11:5068" Acct-Session-Id = "1dbe198c82543fa2@192.168.0.11" Sip-To-Tag = "111aa0fda452c726" Sip-From-Tag = "00D0E90101B8_T9513" Sip-Cseq = "3305" Sip-Src-IP = "192.168.0.12" Sip-Src-Port = "5066" NAS-IP-Address = 127.0.0.1 NAS-Port = 5060 Acct-Delay-Time = 0 Client-IP-Address = 10.10.10.10 Acct-Unique-Session-Id = "597f048f3aa62ca0" Timestamp = 1142177368 |
Автор: | iONE [ 01 июл 2008, 22:43 ] |
Заголовок сообщения: | |
Вопрос ещё актуален, как поведёт себя биллинг если ему придут эти аттрибуты? |
Автор: | iONE [ 03 июл 2008, 14:16 ] |
Заголовок сообщения: | |
Цитата: Кроме того необходимо настроить какие звонки считать исходящими, а какие - входящими для пользователя. Для определения направления используются атрибуты h323-call-type и h323-call-origin из RADIUS запроса. Значения этих атрибутов, соответсующие каждому типу звонка необходимо указать через дробь.
h323-call-type h323-call-origin Эти аттрибуты обязательно должны присутствовать в запросах для определения напрвления или может быть есть другой механизм для определения направленя? |
Автор: | Администратор [ 03 июл 2008, 16:18 ] |
Заголовок сообщения: | |
Как я понял, вам нужно считать только аккаунтинг. В данном случае протокол авторизации SIP не важен. Для определения направления звонка можно использовать скрипт, см. пример: http://wiki.bgbilling.ru/index.php/%D0% ... D0%B0_Voip Какова логика определения типа? |
Автор: | iONE [ 03 июл 2008, 17:04 ] |
Заголовок сообщения: | |
Администратор писал(а): Как я понял, вам нужно считать только аккаунтинг. В данном случае протокол авторизации SIP не важен.
Какова логика определения типа? Аторизация Digest, с ней не должно быть проблем. Логика определения направления может быть такой? Если Calling-Station-Id == ALIAS то это исходящий, иначе входящий. |
Автор: | Администратор [ 03 июл 2008, 19:00 ] |
Заголовок сообщения: | |
Приведенный RADIUS лог - это один звонок? Вообще входящие фиксировать нужно? |
Автор: | iONE [ 03 июл 2008, 23:26 ] |
Заголовок сообщения: | |
Да один звонок, старт и стоп запросы. В данный момент можно обойтись учётом исходящих, но в будущем может понадобится. |
Автор: | Администратор [ 04 июл 2008, 12:49 ] |
Заголовок сообщения: | |
Не понятно, почему от старта к стопу меняются местами номера? Реально с какого и на какой номер был звонок? Цитата: User-Name = "101@openser.org" Calling-Station-Id = "sip:101@openser.org" Called-Station-Id = "sip:102@openser.org" Цитата: User-Name = "102@openser.org"
Calling-Station-Id = "sip:102@openser.org" Called-Station-Id = "sip:101@openser.org" |
Автор: | iONE [ 04 июл 2008, 15:27 ] |
Заголовок сообщения: | |
Администратор писал(а): Не понятно, почему от старта к стопу меняются местами номера? Реально с какого и на какой номер был звонок?
Цитата: User-Name = "101@openser.org" Calling-Station-Id = "sip:101@openser.org" Called-Station-Id = "sip:102@openser.org" Цитата: User-Name = "102@openser.org" Calling-Station-Id = "sip:102@openser.org" Called-Station-Id = "sip:101@openser.org" В том то и дело - это SIP. Аттрибуты Calling-Station-Id и Called-Station-Id я формирую самостоятельно, просто подставлю в них значения FROM и TO из SIP заголовка, которые являются просто адресом отправителя и получателя сообщения. т.к. START формируется из SIP: INVITE сообщения, а STOP при получении SIP: BYE сообщения, то отсюда и результат. Можно включить в заголовок какой нить AVP (например RPID) при авторизации в биллинге и передовать его radius серверу при последующих обращениях, по которому производить поиск пользователя. http://www.tools.ietf.org/html/rfc3261 сдесь можно посмотреть описание полей FROM и TO. |
Автор: | iONE [ 04 июл 2008, 17:57 ] |
Заголовок сообщения: | |
В общем сделал так: SIP INVITE (Radius Start) Calling-Station-Id=FROM; Called-Station-Id=TO SIP BYE (Radius Stop) Calling-Station-Id=To; Called-Station-Id=FROM Таким образом в start и stop запросах будут одинаковые Calling-Station-Id и Called-Station-Id. Что ещё нужно добавить в запрос для того чтобы BG-VoIP-Radius делал обсчёт? |
Автор: | Администратор [ 08 июл 2008, 13:05 ] |
Заголовок сообщения: | |
1) Достаточно Stop пакета 2) В конфиге NASа пропишите Код: acct.out=all/all
auth.out=all/all 3) Создайте тип логина с режимом поиска Calling-Station-Id=ALIAS при Aссt Out, Auth Out 4) Создайте логин с этим типом. 5) Попробуйте позвонить. Должен лечь звонок хотя бы нулевой цены. |
Автор: | iONE [ 13 авг 2008, 19:49 ] |
Заголовок сообщения: | |
Продолжаем боротся с биллингом. Не проходит авторизация. лог радиуса: 13 16:08:56 Type=AUTHENTICATION_REQUEST Attributes: User-Name=3136228@lentel.ru Digest-Attributes= 3136228 Digest-Attributes=\u1\u11lentel.ru Digest-Attributes=\u2*48a2d004b4ace42e31ed79348367ed02d3c06c36 Digest-Attributes=\u4\u19sip:92.255.64.121 Digest-Attributes= REGISTER Digest-Response=48a2e5263eab99c0961d40d892bf9fac NAS-IP-Address=92.255.64.121 NAS-Port=5060 Service-Type=15 Sip-Uri-User=3136228 13 16:08:56 Type=AUTHENTICATION_REJECT Process time:86 Attributes: h323-return-code=16 при этом в мониторинге пишет ошибку: Call not tariff |
Автор: | stark [ 15 авг 2008, 18:48 ] |
Заголовок сообщения: | |
iONE писал(а): при этом в мониторинге пишет ошибку: Call not tariff исходящие не тарифицированы |
Автор: | iONE [ 20 авг 2008, 10:36 ] |
Заголовок сообщения: | |
А причём тут исходящие, это всего лишь запрос на авторизацию, проверка логина пароля, почему radius отвечает reject-ом? |
Автор: | Администратор [ 05 сен 2008, 12:45 ] |
Заголовок сообщения: | |
Потому что у нас есть сложный механизм поиска аккаунта по разным данным пакета и он предполагает что до самой авторизации нужно знать это авторизация исходящего вызова или входящего. Если у вас только исходящий, поставьте в конфиге: Код: auth.out=all/all
|
Автор: | iONE [ 08 сен 2008, 16:35 ] |
Заголовок сообщения: | |
Администратор писал(а): Потому что у нас есть сложный механизм поиска аккаунта по разным данным пакета и он предполагает что до самой авторизации нужно знать это авторизация исходящего вызова или входящего. Если у вас только исходящий, поставьте в конфиге: Код: auth.out=all/all Это и стоит в онфиге NASa: Код: service=24
auth.out=all/all acct.out=all/all |
Автор: | iONE [ 09 сен 2008, 15:22 ] |
Заголовок сообщения: | |
Может ещё какие настройки покрутить? |
Автор: | Администратор [ 10 сен 2008, 12:02 ] |
Заголовок сообщения: | |
У вас в тип логина на исходящих звонках стоит "Не тарифицировать". |
Автор: | iONE [ 10 сен 2008, 12:35 ] |
Заголовок сообщения: | |
Администратор писал(а): У вас в тип логина на исходящих звонках стоит "Не тарифицировать".
Да, вот скриншот типа логина ![]() |
Автор: | iONE [ 10 сен 2008, 13:58 ] |
Заголовок сообщения: | |
Сначала абонент пытается зарегистрироватся на Proxy сервере, передаёт ему логин пароль. Proxy обращается по radius протоколу к биллингу для авторизации логина. Если билинг отвечает ACCEPT, то Proxy регистрирует абонента, иначе даёт отлуп. После регистрации пользователь может совершать или принимать звонки при этом происходит accounting через radius. |
Автор: | Администратор [ 10 сен 2008, 17:13 ] |
Заголовок сообщения: | |
Попробуйте в тарификацию исходящих поставить "По исходящему номеру". Радиус перегрузить не забудьте. |
Автор: | pashtet [ 23 окт 2008, 10:13 ] |
Заголовок сообщения: | |
с авторизацией регистрации вроде всё нормально, а авторизация инвайтов судя по всему не работает? вот такой пакет: Код: Type=AUTHENTICATION_REQUEST
Attributes: User-Name=123@xxx.ru Digest-Attributes= 123 Digest-Attributes= xxx.ru Digest-Attributes=248ff3626000000026d85a72c6a86016bbec2595db18b8843 Digest-Attributes=sip:666@192.168.11.100:6060 Digest-Attributes=INVITE Digest-Response=0c896653f3eca10dbb0b357c9311b371 NAS-IP-Address=192.168.11.100 NAS-Port=5060 Service-Type=15 SIP-URI-User=123 набранный номер в дайджест атрибуте, биллинг судя по всему его не видит, т.к. в любом случае приходит Access-Accept, даже если направления нету в тарифе... каким-то образом вобще можно из этого атрибута вытащить called id ? |
Автор: | pashtet [ 23 окт 2008, 13:39 ] |
Заголовок сообщения: | |
с последним вопросом вроде разобрался, поставил последнюю версию OpenSER (Kamailio), там радиус-клиент может дополнительные атрибуты отправлять, но возникла другая проблема: Код: 23 18:37:42
Type=AUTHENTICATION_REQUEST Attributes: User-Name=123@xxxx.ru Digest-Attributes= 123 Digest-Attributes=\u1\u13xxxx.ru Digest-Attributes=\u2249001bbb00000010829b076ab42b1bb8b3d6e105a8870137 Digest-Attributes=\u4\u29sip:111@192.168.11.100:6060 Digest-Attributes=\u3\u8INVITE Digest-Response=191f02258aa130f0c1a2e8f677ba896b NAS-IP-Address=192.168.11.100 NAS-Port=5060 Service-Type=15 SIP-URI-User=123 Called-Station-Id=111 cisco-avpair=call-id\u61MWU3MjcwN2RmYzNmYWU4YTliNWZjNDk3MzFhZGE2NDI. 23 18:37:42 Type=AUTHENTICATION_REJECT Process time:14 Attributes: h323-credit-amount=0.0 h323-credit-time=600 h323-return-code=12 соответсвенно авторизация не проходит, хотя направление и цена в тарифе есть, в мониторе ошибка "Ошибка сохранения соединения", из-за чего может быть? |
Автор: | pashtet [ 29 окт 2008, 18:13 ] |
Заголовок сообщения: | |
И всё-таки, в чём может быть проблема, почему не проходит авторизация? connections.log Код: DEBUG 29.10.2008 23:13:58 [ pashtet; ; 38897 ] VoiceIpSessionRealtime checkRest time => 23:13:58; phone => 56666; serviceID => 2; callType => 1; maxTime => 1800 DEBUG 29.10.2008 23:13:58 [ pashtet; ; 38897 ] destCode => 2; minuteCost => 5.0 DEBUG 29.10.2008 23:13:58 [ pashtet; ; 38897 ] balance => 300.0 DEBUG 29.10.2008 23:13:58 [ pashtet; ; 38897 ] time => 1800; summa => 150.0 DEBUG 29.10.2008 23:13:58 [ pashtet; ; 38897 ] errorCode => 0 processor.log: Код: DEBUG 29.10.2008 23:13:58 Process outgoing auth Type=AUTHENTICATION_REQUEST Attributes: User-Name=123123@xxx.ru Digest-Attributes= 123123 xxx.ruest-Attributes= Digest-Attributes=2490853530000000d8707efbe6a8860e4d0eccaec1a450ec6 Digest-Attributes=sip:56666@192.168.11.100:6060 Digest-AttributesINVITE Digest-Response=493085477a7b37a4912353efebca881f NAS-IP-Address=192.168.11.100 NAS-Port=5060 Service-Type=15 SIP-URI-User=123123 Calling-Station-Id=123123 Called-Station-Id=56666 cisco-avpair=call-id=ZWE1Y2I2Mzc1MjBkOWVkOWQ3ZDVjYTA5YTE5NTFiNzU. DEBUG 29.10.2008 23:13:58 Finding login.. DEBUG 29.10.2008 23:13:58 Found login type 1 DEBUG 29.10.2008 23:13:58 Login found. DEBUG 29.10.2008 23:13:58 Checking access allow.. DEBUG 29.10.2008 23:13:58 Checking contract status DEBUG 29.10.2008 23:13:58 Checking password.. DEBUG 29.10.2008 23:13:58 Checking tariff.. DEBUG 29.10.2008 23:13:58 Checking balance.. DEBUG 29.10.2008 23:13:58 Checking services.. DEBUG 29.10.2008 23:13:58 Process outgoing auth radius.log Код: INFO 29.10.2008 23:13:58 AUTH:
Type=AUTHENTICATION_REQUEST Attributes: User-Name=123123@xxx.ru Digest-Attributes= 123123 xxx.ruest-Attributes= Digest-Attributes=2490853530000000d8707efbe6a8860e4d0eccaec1a450ec6 Digest-Attributes=sip:56666@192.168.11.100:6060 Digest-AttributesINVITE Digest-Response=493085477a7b37a4912353efebca881f NAS-IP-Address=192.168.11.100 NAS-Port=5060 Service-Type=15 SIP-URI-User=123123 Calling-Station-Id=123123 Called-Station-Id=56666 cisco-avpair=call-id=ZWE1Y2I2Mzc1MjBkOWVkOWQ3ZDVjYTA5YTE5NTFiNzU. INFO 29.10.2008 23:13:58 RESPONSE: Type=AUTHENTICATION_REJECT Process time:280 Attributes: h323-credit-amount=0.0 h323-credit-time=1800 h323-return-code=12 |
Автор: | iONE [ 30 окт 2008, 19:18 ] |
Заголовок сообщения: | |
pashtet писал(а): с авторизацией регистрации вроде всё нормально, а авторизация инвайтов судя по всему не работает?
Да авторизация работает, вот что в документации нашёл про INVITE == RADIUS START Модулем обратываются запросы аккаунтинга только типа Stop. Атрибут Acct-Status-Type для них равен 2. В моём случае Acct Start и Stop выглядят следующим образом: Код: INFO 30.10.2008 16:35:58 ACCOUNT: Type=ACCOUNTING_REQUEST Attributes: Sip-Response-Code=200 Sip-Method=1 User-Name=aaaaaaa@zzzzzz.ru NAS-IP-Address=x.x.x.x NAS-Port=5060 Service-Type=15 Acct-Status-Type=1 Acct-Delay-Time=0 Sip-Translated-Request-URI=sip:aaaaaaa@10.49.64.64:5060;user=phone;transport=udp Sip-To-Tag=0 Acct-Session-Id=DA9E7D97-A5BE11DD-9E7BCB72-937C88DD@y.y.y.y Sip-From-Tag=0 Event-Timestamp=1225373911 Calling-Station-Id=aaaaaaa Called-Station-Id=bbbbbbb INFO 30.10.2008 16:35:58 RESPONSE: Type=ACCOUNTING_RESPONSE Attributes: INFO 30.10.2008 16:36:35 ACCOUNT: Type=ACCOUNTING_REQUEST Attributes: Sip-Response-Code=200 User-Name=aaaaaaa@zzzzzz.ru Sip-Method=8 NAS-IP-Address=x.x.x.x NAS-Port=5060 Service-Type=15 Acct-Status-Type=2 Acct-Delay-Time=0 Sip-Translated-Request-URI=sip:aaaaaaa@10.49.64.64:5060;user=phone;transport=udp Sip-To-Tag=0 Acct-Session-Id=DA9E7D97-A5BE11DD-9E7BCB72-937C88DD@y.y.y.y Sip-From-Tag=0 Event-Timestamp=1225373948 Calling-Station-Id=aaaaaaa Called-Station-Id=bbbbbbb INFO 30.10.2008 16:36:35 RESPONSE: Type=ACCOUNTING_RESPONSE Attributes: Соответственно в мониторинге эти звонки не видно. processor.log Код: DEBUG 30.10.2008 23:17:32 Process accounting, flag=1 Type=ACCOUNTING_REQUEST Attributes: Sip-Response-Code=200 User-Name=aaaaaaa@zzzzzz.ru Sip-Method=8 NAS-IP-Address=x.x.x.x NAS-Port=5060 Service-Type=15 Acct-Status-Type=2 Acct-Delay-Time=0 Sip-Translated-Request-URI=sip:aaaaaaa@89.223.25.100:25978 Sip-To-Tag=0 Acct-Session-Id=ZmJkMjdmYWNkNWVjMjg0NzVmMDNjYjliNzk4ZTRiYzY. Sip-From-Tag=0 Event-Timestamp=1225398006 Calling-Station-Id=bbbbbbb Called-Station-Id=aaaaaaa DEBUG 30.10.2008 23:17:32 Saved connection not found DEBUG 30.10.2008 23:17:32 Found login type 1 DEBUG 30.10.2008 23:17:32 Login found. radius.out Код: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'h323_id' cannot be null
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1160) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:685) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1400) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1314) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1299) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:233) at bitel.billing.server.processor.voiceip.VoiceIpSessionRealtime.createSession(VoiceIpSessionRealtime.java:59) at bitel.billing.server.processor.voiceip.VoiceIpNASConnection.stopConnection(VoiceIpNASConnection.java:97) at bitel.billing.server.processor.voiceip.VoiceIpProcessor.accountingProcess(VoiceIpProcessor.java:197) at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:147) at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Я так понимаю требуется ещё Radius аттрибут h323-gw-id. Какое ему дать значение? IP или имя НАСа, что от этого аттрибута зависит? |
Автор: | iONE [ 31 окт 2008, 12:58 ] |
Заголовок сообщения: | |
Нашёл на форуме решение предыдущего вопроса путём добавления в скрипт предобработки радиус запроса: import bitel.billing.server.radius.*; request.setVendorStringAttribute(24, "AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD" ); Двигаемся дальше, звонок лёг в мониторинг с 0 продолжительностью. Как этот вопрос решать без start пакета? |
Автор: | Администратор [ 10 ноя 2008, 13:01 ] |
Заголовок сообщения: | |
А попробуйте такой скрипт предобработки: Код: import bitel.billing.server.radius.*;
sessionId = request.getStringAttribute( 44 ); if( sessionId != null ) { request.setVendorStringAttribute(24, sessionId ); } Это копирование Acct-Session-Id в h323-conf-id. |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |