urm Posted September 7, 2010 Posted September 7, 2010 Всем привет, кто сможет подскажите. Вообщем проблема такая! крутится у меня 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 Вставить ник Quote
2c2i Posted September 7, 2010 Posted September 7, 2010 (edited) 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 September 7, 2010 by 2c2i Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.