Jump to content
Калькуляторы

Freeradius - проблема с Accounting-Request stop Freedraius

Всем привет, кто сможет подскажите. Вообщем проблема такая! крутится у меня Freradius + mysql, есть много сетевого оборудования разного и ни где не проблем с аккаунтиком кроме huawei ne16 Ну это короче магистральный маршрутизатор.

Ну так вот при разъединения сессии телнет железка посылает радиусу Acct-Status-Type = Stop и в базу она прописывается новой строкой а не обновляет ту что уже была при старте сессии и в результате в таблице аккаунтинка две записи.

Одна нормальная и одна сессия остается открытой пока ручками с базы не удалишь

 

ID HotSpot Username IP Address Start Time Stop Time Total Time Upload (Bytes) Download (Bytes)

 

197 c_rinat 10.1.0.123 2010-09-07 10:13:59 0 seconds 0

198 c_rinat 10.1.0.123 2010-09-07 10:14:00 2010-09-07 10:14:16 16 seconds 0 B 0 B User-Request

 

И как добиться что бы не зависали эти сессии я уже устал себе голову ломать, получается так что радиус первый раз обновляет (в дебаге выделено жырным) и потом еще раз почемуто вставляет аккаунтинк данные вот и поевляеться вторая запись и почему так происходит я не пойму.

К примеру если смотреть дебаг на дргой железке то UPDATE radacct SET и все ок, а тут же нет

 

Вот дебаг

 

rad_recv: Accounting-Request packet from host 10.50.1.1 port 1812, id=49, length=295

User-Name = "c_rinat"

NAS-Port = 0

Framed-IP-Address = 10.1.0.123

Filter-Id = "65535@255"

NAS-Identifier = "NE16_AUP"

Acct-Status-Type = Stop

Acct-Delay-Time = 0

Acct-Input-Octets = 0

Acct-Output-Octets = 0

Acct-Session-Id = "NE16

Acct-Authentic = RADIUS

Acct-Session-Time = 16

Acct-Input-Packets = 0

Acct-Output-Packets = 0

Acct-Terminate-Cause = User-Request

Acct-Input-Gigawords = 0

Acct-Output-Gigawords = 0

Event-Timestamp = "Sep 7 2010 16:15:50 YEKST"

NAS-Port-Type = Virtual

NAS-Port-Id = "slot=0;subslot=0;port=0;vlanid=0"

Huawei-IPHost-Addr = "10.1.0.123 ff:ff:ff:ff:ff:ff"

Huawei-Attr-1 = 0x00000000

Huawei-Input-Average-Rate = 0

Huawei-Attr-4 = 0x00000000

Huawei-Output-Average-Rate = 0

Huawei-Priority = 255

Huawei-Connect-ID = 6000

NAS-IP-Address = 10.50.1.1

+- entering group preacct

++[preprocess] returns ok

rlm_acct_unique: Hashing 'Framed-IP-Address = 10.1.0.123,NAS-Port = 0,Client-IP-Address = 10.50.1.1,NAS-IP-Address = 10.50.1.1,Acct-Session-Id = "NE16_A2010090710153400011ce0aae07c7b06000",User-Name = "c_rinat"'

rlm_acct_unique: Acct-Unique-Session-ID = "924de87a6d2db155".

++[acct_unique] returns ok

rlm_realm: No '@' in User-Name = "c_rinat", looking up realm NULL

rlm_realm: No such realm "NULL"

++[suffix] returns noop

++[files] returns noop

+- entering group accounting

++[unix] returns ok

expand: /var/log/freeradius/radutmp -> /var/log/freeradius/radutmp

expand: %{User-Name} -> c_rinat

++[radutmp] returns ok

expand: %{User-Name} -> c_rinat

rlm_sql (sql): sql_set_user escaped user --> 'c_rinat'

expand: %{Acct-Input-Gigawords} -> 0

expand: %{Acct-Input-Octets} -> 0

expand: %{Acct-Output-Gigawords} -> 0

expand: %{Acct-Output-Octets} -> 0

expand: %{Acct-Delay-Time} -> 0

expand: UPDATE radacct SET acctstoptime = '%S', acctsessiontime = '%{Acct-Session-Time}', acctinputoctets = '%{%{Acct-Input-Gigawords}:-0}' << 32 | '%{%{Acct-Input-Octets}:-0}', acctoutputoctets = '%{%{Acct-Output-Gigawords}:-0}' << 32 | '%{%{Acct-Output-Octets}:-0}', acctterminatecause = '%{Acct-Terminate-Cause}', acctstopdelay = '%{%{Acct-Delay-Time}:-0}', connectinfo_stop = '%{Connect-Info}' WHERE acctsessionid = '%{Acct-Session-Id}' AND username = '%{SQL-User-Name}' AND nasipaddress = '%{NAS-IP-Address}' -> UPDATE radacct SET acctstoptime = '2010-09-07 10:14:16', acctsessiontime = '16', acctinputoctets = '0' << 32 | '0', acctoutputoctets = '0' << 32 | '0', acctterminatecause = 'User-Request', acctstopdelay = '0', connectinfo_stop = '' WHERE acctsessionid = 'NE16_A2010090710153400011ce0aae07c7b06000' AND username = 'c_rinat' AND nasipaddress = '10.50.1.1'

rlm_sql (sql): Reserving sql socket id: 3

expand: %{Acct-Session-Time} -> 16

expand: %{Acct-Delay-Time} -> 0

expand: %{Acct-Input-Gigawords} -> 0

expand: %{Acct-Input-Octets} -> 0

expand: %{Acct-Output-Gigawords} -> 0

expand: %{Acct-Output-Octets} -> 0

expand: %{Acct-Delay-Time} -> 0

expand: INSERT INTO radacct (acctsessionid, acctuniqueid, username, realm, nasipaddress, nasportid, nasporttype, acctstarttime, acctstoptime, acctsessiontime, acctauthentic, connectinfo_start, connectinfo_stop, acctinputoctets, acctoutputoctets, calledstationid, callingstationid, acctterminatecause, servicetype, framedprotocol, framedipaddress, acctstartdelay, acctstopdelay) VALUES ('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port}', '%{NAS-Port-Type}', DATE_SUB('%S', INTERVAL (%{%{Acct-Session-Time}:-0} + %{%{Acct-Delay-Time}:-0}) SECOND), '%S', '%{Acct-Session-Time}', '%{Acct-Authentic}', '', '%{Connect-Info}', '%{%{Acct-Input-Gigawords}:-0}' << 32 | '%{%{Acct-Input-Octets}:-0}', '%{%{Acct-Output-Gigawords}:-0}' << 32 | '%{%{Acct-Output-Octets}:-0}', '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Acct-Terminate-Cause}', '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', '0', '%{%{Acct-Delay-Time}:-0}') -> INSERT INTO radacct (acctsessionid, acctuniqueid, username, realm, nasipaddress, nasportid, nasporttype, acctstarttime, acctstoptime, acctsessiontime, acctauthentic, connectinfo_start, connectinfo_stop, acctinputoctets, acctoutputoctets, calledstationid, callingstationid, acctterminatecause, servicetype, framedprotocol, framedipaddress, acctstartdelay, acctstopdelay) VALUES ('NE16_A2010090710153400011ce0aae07c7b06000', '924de87a6d2db155', 'c_rinat', '', '10.50.1.1', '0', 'Virtual', DATE_SUB('2010-09-07 10:14:16', INTERVAL (16 + 0) SECOND), '2010-09-07 10:14:16', '16', 'RADIUS', '', '', '0' << 32 | '0', '0' << 32 | '0', '', '', 'User-Request', '', '', '10.1.0.123', '0', '0')

rlm_sql (sql): Released sql socket id: 3

++

 returns ok

 

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

sql/postgresql/dialup.conf

# accounting_stop_query         - query for Accounting stop packets
# accounting_stop_query_alt     - query for Accounting start packets
#                               (alternate in case first query doesn't
#                                affect any existing rows in the table)
accounting_stop_query = "UPDATE tablename SET...
accounting_stop_query_alt="INSERT ...

у вас наверное что то похожее, проверяйте acctsessionid, может ваша железка не считает его уникальным в рамках сесиии.

Edited by 2c2i

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this