pppoe+freeradius+abills проблема с трафиком больше 4х гигов
Добавлено: Пн июн 07, 2010 10:33 am
Доброго времени суток всем!
Поднял связку fedora10X64+pppoe+freeradius+abills 0.50b все заработало и вроде норм.Но встала проблема что если клиент качает файл больше 2х гигов его автоматом скидывает абиллс.Поправил это дело так, в /usr/abills/libexec/config.pl закоментировал $conf{MAX_SESSION_TRAFFIC} = 2047;(в дальнеишем пробывал ставить значение 0 и на 8мь гигов) и скидывать пересталло но встала другая проблема абиллс перестал щитать траффик после 2х гигов.Стал гуглить нашол что pppd нужно патчить чтоб он обнулял счетчики и мог передавать параметры gigawords для нормального счета.скачал два патча первый официальный http://bugs.gentoo.org/attachment.cgi?id=102981 и второй взятый отсюда http://forum.nag.ru/forum/lofiversion/i ... 46225.html , пробывал патчить 5ть версий pppd с официального сайта самбы это ppp-2.4.3.tar.gz,ppp-2.4.4.tar.gz,ppp-2.4.4b1.tar.gz,ppp-2.4.5.tar.gz.С первыми 2вумя еще правил main.c чтоб он вообще заработал а остальные просто патчил и ставил.Опытным путем было выяснено что если качать в один паток то до 4х гигов вроде все норм,но если качать в два потока файлы размером 3.2гига то абилс паказывает что скачано 2.65 гига,когда по факту 6.4 гига.Также нашол вот эту тему http://forum.bgbilling.ru/viewtopic.php?f=5&t=2803 тут человек написал даже что то вроде мини хауту но всеравно по ней непрошло.Также в словарях и радиус клиента прописал /etc/radiusclient/dictionary
ATTRIBUTE Acct-Input-Gigawords 52 integer
ATTRIBUTE Acct-Output-Gigawords 53 integer
и в радиусе
/usr/local/radiusd/etc/raddb/dictionary
ATTRIBUTE Acct-Input-Gigawords 52 integer
ATTRIBUTE Acct-Output-Gigawords 53 integer
тамже прописаны отрибуты по скорости и они работают.
вот логи радиуса
/usr/local/var/log/radius/radacct/127.0.0.1/detail-20100605
Mon Jun 7 15:44:50 2010
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Stop
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
Acct-Session-Time = 2
Acct-Output-Octets = 0
Acct-Input-Octets = 569
Acct-Output-Gigawords = 0
Acct-Input-Gigawords = 0
Acct-Output-Packets = 0
Acct-Input-Packets = 4
NAS-Port-Type = Virtual
Acct-Terminate-Cause = User-Request
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
Timestamp = 1275907490
Request-Authenticator = Verified
вот лог с radiusd -X
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /usr/local/var/run/radiusd/radiusd.sock
Listening on proxy address * port 1814
Ready to process requests.
rad_recv: Access-Request packet from host 127.0.0.1 port 36594, id=124, length=95
Service-Type = Framed-User
Framed-Protocol = PPP
User-Name = "tester1"
CHAP-Challenge = 0x561cab69eb7820e2c80838fc15b3c1aa5d5f24ad8a
CHAP-Password = 0x3659026e7d71241f4e16b8dcb64c661a57
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
+- entering group authorize {...}
++[preprocess] returns ok
Exec-Program output: Auth-Type := Accept
Exec-Program-Wait: value-pairs: Auth-Type := Accept
Exec-Program: returned: 0
++[abills_preauth] returns ok
++[mschap] returns noop
[files] users: Matched entry DEFAULT at line 1
++[files] returns ok
Use of uninitialized value $in_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $in_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $in_prices{"0"} in numeric eq (==) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $out_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Exec-Program output: Session-Timeout = 2016912, Filter-Id = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.254, Session-Octets-Limit = 8589934592, Framed-IP-Netmask = 255.255.255.255,
Exec-Program-Wait: value-pairs: Session-Timeout = 2016912, Filter-Id = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.254, Session-Octets-Limit = 8589934592, Framed-IP-Netmask = 255.255.255.255,
Exec-Program: returned: 0
++[abills_auth] returns ok
Found Auth-Type = Accept
Auth-Type = Accept, accepting the user
WARNING: Empty post-auth section. Using default return values.
Sending Access-Accept of id 124 to 127.0.0.1 port 36594
Session-Timeout = 2016912
Filter-Id = "0"
Octets-Direction = Route-IP-No
Framed-IP-Address = 172.16.0.254
Session-Octets-Limit = 0
Framed-IP-Netmask = 255.255.255.255
Finished request 0.
Going to the next request
Waking up in 4.9 seconds.
rad_recv: Accounting-Request packet from host 127.0.0.1 port 46175, id=125, length=99
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Start
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
NAS-Port-Type = Virtual
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
+- entering group preacct {...}
++[preprocess] returns ok
Exec-Program output:
Exec-Program: returned: 0
++[abills_acc] returns ok
[suffix] No '@' in User-Name = "tester1", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
++[files] returns noop
+- entering group accounting {...}
[detail] expand: /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] expand: %t -> Mon Jun 7 15:44:48 2010
++[detail] returns ok
++[unix] returns ok
[radutmp] expand: /usr/local/var/log/radius/radutmp -> /usr/local/var/log/radius/radutmp
[radutmp] expand: %{User-Name} -> tester1
++[radutmp] returns ok
[attr_filter.accounting_response] expand: %{User-Name} -> tester1
attr_filter: Matched entry DEFAULT at line 12
++[attr_filter.accounting_response] returns updated
Sending Accounting-Response of id 125 to 127.0.0.1 port 46175
Finished request 1.
Cleaning up request 1 ID 125 with timestamp +13
Going to the next request
Waking up in 4.8 seconds.
rad_recv: Accounting-Request packet from host 127.0.0.1 port 56423, id=126, length=147
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Stop
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
Acct-Session-Time = 2
Acct-Output-Octets = 0
Acct-Input-Octets = 569
Acct-Output-Gigawords = 0
Acct-Input-Gigawords = 0
Acct-Output-Packets = 0
Acct-Input-Packets = 4
NAS-Port-Type = Virtual
Acct-Terminate-Cause = User-Request
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
+- entering group preacct {...}
++[preprocess] returns ok
Exec-Program output:
Exec-Program: returned: 0
++[abills_acc] returns ok
[suffix] No '@' in User-Name = "tester1", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
++[files] returns noop
+- entering group accounting {...}
[detail] expand: /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] expand: %t -> Mon Jun 7 15:44:50 2010
++[detail] returns ok
++[unix] returns ok
[radutmp] expand: /usr/local/var/log/radius/radutmp -> /usr/local/var/log/radius/radutmp
[radutmp] expand: %{User-Name} -> tester1
++[radutmp] returns ok
[attr_filter.accounting_response] expand: %{User-Name} -> tester1
attr_filter: Matched entry DEFAULT at line 12
++[attr_filter.accounting_response] returns updated
Sending Accounting-Response of id 126 to 127.0.0.1 port 56423
Finished request 2.
Cleaning up request 2 ID 126 with timestamp +15
Going to the next request
Waking up in 2.3 seconds.
Cleaning up request 0 ID 124 with timestamp +13
Ready to process requests.
Перерыл весь гугл и форум абиллса информации по моей проблеме очень мало и все неясно,поэтому пишу сюда.Кто сталкивался с таким подскажите в какую сторону капать чтоб абиллс считал любое колличество траффика скаченного клиентом.
Поднял связку fedora10X64+pppoe+freeradius+abills 0.50b все заработало и вроде норм.Но встала проблема что если клиент качает файл больше 2х гигов его автоматом скидывает абиллс.Поправил это дело так, в /usr/abills/libexec/config.pl закоментировал $conf{MAX_SESSION_TRAFFIC} = 2047;(в дальнеишем пробывал ставить значение 0 и на 8мь гигов) и скидывать пересталло но встала другая проблема абиллс перестал щитать траффик после 2х гигов.Стал гуглить нашол что pppd нужно патчить чтоб он обнулял счетчики и мог передавать параметры gigawords для нормального счета.скачал два патча первый официальный http://bugs.gentoo.org/attachment.cgi?id=102981 и второй взятый отсюда http://forum.nag.ru/forum/lofiversion/i ... 46225.html , пробывал патчить 5ть версий pppd с официального сайта самбы это ppp-2.4.3.tar.gz,ppp-2.4.4.tar.gz,ppp-2.4.4b1.tar.gz,ppp-2.4.5.tar.gz.С первыми 2вумя еще правил main.c чтоб он вообще заработал а остальные просто патчил и ставил.Опытным путем было выяснено что если качать в один паток то до 4х гигов вроде все норм,но если качать в два потока файлы размером 3.2гига то абилс паказывает что скачано 2.65 гига,когда по факту 6.4 гига.Также нашол вот эту тему http://forum.bgbilling.ru/viewtopic.php?f=5&t=2803 тут человек написал даже что то вроде мини хауту но всеравно по ней непрошло.Также в словарях и радиус клиента прописал /etc/radiusclient/dictionary
ATTRIBUTE Acct-Input-Gigawords 52 integer
ATTRIBUTE Acct-Output-Gigawords 53 integer
и в радиусе
/usr/local/radiusd/etc/raddb/dictionary
ATTRIBUTE Acct-Input-Gigawords 52 integer
ATTRIBUTE Acct-Output-Gigawords 53 integer
тамже прописаны отрибуты по скорости и они работают.
вот логи радиуса
/usr/local/var/log/radius/radacct/127.0.0.1/detail-20100605
Mon Jun 7 15:44:50 2010
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Stop
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
Acct-Session-Time = 2
Acct-Output-Octets = 0
Acct-Input-Octets = 569
Acct-Output-Gigawords = 0
Acct-Input-Gigawords = 0
Acct-Output-Packets = 0
Acct-Input-Packets = 4
NAS-Port-Type = Virtual
Acct-Terminate-Cause = User-Request
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
Timestamp = 1275907490
Request-Authenticator = Verified
вот лог с radiusd -X
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /usr/local/var/run/radiusd/radiusd.sock
Listening on proxy address * port 1814
Ready to process requests.
rad_recv: Access-Request packet from host 127.0.0.1 port 36594, id=124, length=95
Service-Type = Framed-User
Framed-Protocol = PPP
User-Name = "tester1"
CHAP-Challenge = 0x561cab69eb7820e2c80838fc15b3c1aa5d5f24ad8a
CHAP-Password = 0x3659026e7d71241f4e16b8dcb64c661a57
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
+- entering group authorize {...}
++[preprocess] returns ok
Exec-Program output: Auth-Type := Accept
Exec-Program-Wait: value-pairs: Auth-Type := Accept
Exec-Program: returned: 0
++[abills_preauth] returns ok
++[mschap] returns noop
[files] users: Matched entry DEFAULT at line 1
++[files] returns ok
Use of uninitialized value $in_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $in_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $in_prices{"0"} in numeric eq (==) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Use of uninitialized value $out_prices{"0"} in numeric gt (>) at /usr/abills/libexec/../Abills/mysql/Auth.pm line 1326.
Exec-Program output: Session-Timeout = 2016912, Filter-Id = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.254, Session-Octets-Limit = 8589934592, Framed-IP-Netmask = 255.255.255.255,
Exec-Program-Wait: value-pairs: Session-Timeout = 2016912, Filter-Id = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.254, Session-Octets-Limit = 8589934592, Framed-IP-Netmask = 255.255.255.255,
Exec-Program: returned: 0
++[abills_auth] returns ok
Found Auth-Type = Accept
Auth-Type = Accept, accepting the user
WARNING: Empty post-auth section. Using default return values.
Sending Access-Accept of id 124 to 127.0.0.1 port 36594
Session-Timeout = 2016912
Filter-Id = "0"
Octets-Direction = Route-IP-No
Framed-IP-Address = 172.16.0.254
Session-Octets-Limit = 0
Framed-IP-Netmask = 255.255.255.255
Finished request 0.
Going to the next request
Waking up in 4.9 seconds.
rad_recv: Accounting-Request packet from host 127.0.0.1 port 46175, id=125, length=99
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Start
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
NAS-Port-Type = Virtual
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
+- entering group preacct {...}
++[preprocess] returns ok
Exec-Program output:
Exec-Program: returned: 0
++[abills_acc] returns ok
[suffix] No '@' in User-Name = "tester1", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
++[files] returns noop
+- entering group accounting {...}
[detail] expand: /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] expand: %t -> Mon Jun 7 15:44:48 2010
++[detail] returns ok
++[unix] returns ok
[radutmp] expand: /usr/local/var/log/radius/radutmp -> /usr/local/var/log/radius/radutmp
[radutmp] expand: %{User-Name} -> tester1
++[radutmp] returns ok
[attr_filter.accounting_response] expand: %{User-Name} -> tester1
attr_filter: Matched entry DEFAULT at line 12
++[attr_filter.accounting_response] returns updated
Sending Accounting-Response of id 125 to 127.0.0.1 port 46175
Finished request 1.
Cleaning up request 1 ID 125 with timestamp +13
Going to the next request
Waking up in 4.8 seconds.
rad_recv: Accounting-Request packet from host 127.0.0.1 port 56423, id=126, length=147
Acct-Session-Id = "4C0CCDA00C7800"
User-Name = "tester1"
Acct-Status-Type = Stop
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
Acct-Session-Time = 2
Acct-Output-Octets = 0
Acct-Input-Octets = 569
Acct-Output-Gigawords = 0
Acct-Input-Gigawords = 0
Acct-Output-Packets = 0
Acct-Input-Packets = 4
NAS-Port-Type = Virtual
Acct-Terminate-Cause = User-Request
Framed-IP-Address = 172.16.0.254
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Acct-Delay-Time = 0
+- entering group preacct {...}
++[preprocess] returns ok
Exec-Program output:
Exec-Program: returned: 0
++[abills_acc] returns ok
[suffix] No '@' in User-Name = "tester1", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
++[files] returns noop
+- entering group accounting {...}
[detail] expand: /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] /usr/local/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/var/log/radius/radacct/127.0.0.1/detail-20100607
[detail] expand: %t -> Mon Jun 7 15:44:50 2010
++[detail] returns ok
++[unix] returns ok
[radutmp] expand: /usr/local/var/log/radius/radutmp -> /usr/local/var/log/radius/radutmp
[radutmp] expand: %{User-Name} -> tester1
++[radutmp] returns ok
[attr_filter.accounting_response] expand: %{User-Name} -> tester1
attr_filter: Matched entry DEFAULT at line 12
++[attr_filter.accounting_response] returns updated
Sending Accounting-Response of id 126 to 127.0.0.1 port 56423
Finished request 2.
Cleaning up request 2 ID 126 with timestamp +15
Going to the next request
Waking up in 2.3 seconds.
Cleaning up request 0 ID 124 with timestamp +13
Ready to process requests.
Перерыл весь гугл и форум абиллса информации по моей проблеме очень мало и все неясно,поэтому пишу сюда.Кто сталкивался с таким подскажите в какую сторону капать чтоб абиллс считал любое колличество траффика скаченного клиентом.