Page 1 of 2

NAS-Port и NAS-Port-Id

Posted: 25 Mar 2015, 10:59
by boco
Дмитрий,

скажите, я правильно понимаю, что для PPP на этапе отправки Access Request параметры NAS-Port и NAS-Port-Id не определены? Судя по коду, для заполнения unit_idx вызывается функция connect_ppp_channel(), которая, в свою очередь, вызывается из ppp_auth_succeeded().

Проблема в том, что модуль Dialup BGBilling'а ожидает совпадающий NAS-Port в Access и Account запросах, иначе не стартует сессию. =(

Пример:
[2015-03-25 14:13:31]: info: : send [RADIUS(1) Access-Request id=1 <User-Name "5"> <NAS-Identifier "accel-ppp"> <NAS
-IP-Address 81.30.199.200> <NAS-Port 4294967295> <NAS-Port-Id ""> <NAS-Port-Type Virtual> <Service-Type Framed-User>
<Framed-Protocol PPP> <Calling-Station-Id "e8:40:f2:b2:18:b7"> <Called-Station-Id "eth1.807:00:07:e9:02:09:aa"> <CHAP
-Challenge > <CHAP-Password >]
...
[2015-03-25 14:13:32]: info: ppp0: send [RADIUS(1) Accounting-Request id=1 <User-Name "5"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 81.30.199.200> <NAS-Port 0> <NAS-Port-Id "ppp0"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "e8:40:f2:b2:18:b7"> <Called-Station-Id "eth1.807:00:07:e9:02:09:aa"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "026f217fdb05277c"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 81.30.199.245>]

Re: NAS-Port и NAS-Port-Id

Posted: 25 Mar 2015, 13:37
by Dmitry
а если вообще нет этого атрибута ?

Re: NAS-Port и NAS-Port-Id

Posted: 25 Mar 2015, 17:08
by boco
разработчик (цитирую по памяти): "NAS-Port является ключевым полем при поиске сессии"

Собственно вопрос простой - это я криворук или так by design? А если второе, то по какому атрибуту bgb может связать auth и acct? Из общего я вижу только User-Name и Calling-Station-Id, однако в нашем случае это не уникальные ключи, и даже их комбинация не уникальна =(

Re: NAS-Port и NAS-Port-Id

Posted: 25 Mar 2015, 21:03
by Абрамчук Вадим
1) Auth и Acct и не должны быть связаны. Это by design у протокола RADIUS.
2) Если сильно хочется - accel-ppp умеет назначать и передавать Acct-Session-Id во время Auth. Да, это нарушение протокола. Но это удобный костыль для некоторых биллингов.

Re: NAS-Port и NAS-Port-Id

Posted: 26 Mar 2015, 02:16
by boco
Абрамчук Вадим wrote:Если сильно хочется - accel-ppp умеет назначать и передавать Acct-Session-Id во время Auth.
Как?

Re: NAS-Port и NAS-Port-Id

Posted: 26 Mar 2015, 07:12
by Dmitry
[radius]
sid_in_auth=1

хм, в документации забыл его описать...

Re: NAS-Port и NAS-Port-Id

Posted: 26 Mar 2015, 09:27
by boco
Спасибо! Осталось реализовать нужный функционал в биллинге =)

Re: NAS-Port и NAS-Port-Id

Posted: 26 Mar 2015, 13:37
by dendalf
Абрамчук Вадим wrote:1) Auth и Acct и не должны быть связаны. Это by design у протокола RADIUS.
2) Если сильно хочется - accel-ppp умеет назначать и передавать Acct-Session-Id во время Auth. Да, это нарушение протокола. Но это удобный костыль для некоторых биллингов.
Почему нарушение протокола ?
https://tools.ietf.org/html/rfc2866#section-5.5
This attribute is a unique Accounting ID to make it easy to match
start and stop records in a log file. The start and stop records
for a given session MUST have the same Acct-Session-Id. An
Accounting-Request packet MUST have an Acct-Session-Id. An
Access-Request packet MAY have an Acct-Session-Id; if it does,
then the NAS MUST use the same Acct-Session-Id in the Accounting-
Request packets for that session.
Протокол не исключает этого варианта.

Тут кстати идет речь о старом модуле BGBilling, который не поддерживает Acct-Session-Id. Новый поддерживает и связка Auth и Acct там необязательна(хотя ее отсутствие в общем случае может привести к проблемам в некоторых случаях).

Re: NAS-Port и NAS-Port-Id

Posted: 26 Mar 2015, 16:38
by Абрамчук Вадим
Может быть. Значит, я ошибся.

Re: NAS-Port и NAS-Port-Id

Posted: 07 Apr 2015, 16:32
by brodayga
на днях поставил последнюю версии accel и обнаружил что

Code: Select all

info: : send [RADIUS(1) Access-Request id=1
.....
<NAS-Port 4294967295> <NAS-Port-Id ""> 
.....
]
вместо привычных (не очень старая версия accel-ppp version faf40d498c6f519ea24e4063c2e64b8e9581cbbb)

Code: Select all

 info: ppp0: send [RADIUS(1) Access-Request id=1
.....
 <NAS-Port 0> <NAS-Port-Id "ppp0">
.....
Билинг Access и accounting запросы связывает по NAS-Port. В итоге не считает сессию поднявшейся, т.к. в авторизации NAS-Port 4294967295 ,а в старт пакете приходит уже NAS-Port 0