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

pppoe+freeradius+abills проблема с трафиком больше 4х гигабайт

Доброго времени суток всем!

Поднял связку fedora10X64+pppoe+freeradius+abills все заработало и вроде норм.Но встала проблема что если клиент качает файл больше 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/index.php?t46225.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

 

Sat Jun 5 01:06:50 2010

Acct-Session-Id = "4C095CB715DA00"

User-Name = "testuser"

Acct-Status-Type = Stop

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

Acct-Session-Time = 35

Acct-Output-Octets = 33

Acct-Input-Octets = 1822

Acct-Output-Gigawords = 0

Acct-Input-Gigawords = 0

Acct-Output-Packets = 2

Acct-Input-Packets = 22

NAS-Port-Type = Virtual

Acct-Terminate-Cause = User-Request

Framed-IP-Address = 172.0.0.107

NAS-IP-Address = 127.0.0.1

NAS-Port = 0

Acct-Delay-Time = 0

Timestamp = 1275682010

Request-Authenticator = Verified

 

Перерыл весь гугл и форум абиллса(на нем кстати зарегился два раза с интервалом в два дня но активацию так и неприсылает)информации по моей проблеме очень мало и все неясно,поэтому пишу сюда.Кто сталкивался с таким подскажите в какую сторону капать чтоб абиллс считал любое колличество траффика скаченного клиентом.Пробывал в сервере доступа вписать и Other Nas server и PPPD+Radius plugin(Linux).Может нужно в RADIUS Параметры (,) чтонибудь прописать?

Edited by sonkilla

Share this post


Link to post
Share on other sites

Наиболее правильный вариант будет вынести NAS на Mikrotik или Freebsd (mpd). Под ними такой проблемы - нет.

 

Неоднократно эта проблема обсуждалась здесь

Share this post


Link to post
Share on other sites

Насчет Mikrotikа и FreeBSD c mpd я в курсе но хотелось бы решить проблему с помощью линукса и ppp.Форум абиллса как я уже писал выше весь перерыл нашол темы с подобной проблемой но увы решения ненашол.Сегодня благодаря техподдержки абиллса мою учетку активировали и я задал там тот же вопрос но пока тишина.Если у когонибудь есть какие нибудь советы или соображения куда капать буду очень благодарен.

Edited by sonkilla

Share this post


Link to post
Share on other sites

проблема-то, насколько я понимаю, в том, что у pppd (а точнее, даже в самом ядре) счетчики октетов - 32битные.

поэтому в самом pppd, когда он обновляет счетчики в своих внутренних структурах, надо вести учет того, что произошло переполнение разрядности и как только это происходит - увеличивать на 1 счетчики Gigawords. а потом еще надо "научить" плагин radius заполнять атрибуты Acct-Input-Gigawords и Acct-Output-Gigawords

 

Все это моё imho.

Share this post


Link to post
Share on other sites
проблема-то, насколько я понимаю, в том, что у pppd (а точнее, даже в самом ядре) счетчики октетов - 32битные.

поэтому в самом pppd, когда он обновляет счетчики в своих внутренних структурах, надо вести учет того, что произошло переполнение разрядности и как только это происходит - увеличивать на 1 счетчики Gigawords. а потом еще надо "научить" плагин radius заполнять атрибуты Acct-Input-Gigawords и Acct-Output-Gigawords

 

Все это моё imho.

неподскажите поточней как научить ? ведь я прописал в словарях радиусклиента и радиуса

ATTRIBUTE Acct-Input-Gigawords 52 integer

ATTRIBUTE Acct-Output-Gigawords 53 integer

 

Вчера просидев всю ночь собрал еще один сервак на базе Fedora Core 11 i386.Подключил его NAS сервером.Скачал и поставил отсюда http://koji.fedoraproject.org/koji/buil ... dID=172812 готовый пакет с пропатченным ppp gigawords.Первым пунктом тут написано

* Mon May 10 2010 - Jiri Skala <jskala@redhat.com> 2.4.4-13

- removed ppp-2.4.3 from sources

- fixes #521167 - RFE: Gigawords support in ppp

Все завелось авторизация проходит и все работает,но картина отсталась таже,выкачеваю свои 6.4 гига но фрирадиус в стоп пакете получает в парах гигавордса понулям в итоге биллинг ничего непосчитал.

Стоп пакет

Wed Jun 9 04:47:45 2010

Acct-Session-Id = "4C0ED3360FA200"

User-Name = "tester5"

Acct-Status-Type = Stop

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

Acct-Session-Time = 803

Acct-Output-Octets = 3521443950

Acct-Output-Gigawords = 0

Acct-Input-Octets = 55787909

Acct-Input-Gigawords = 0

Acct-Output-Packets = 2402237

Acct-Input-Packets = 1357477

NAS-Port-Type = Virtual

Acct-Terminate-Cause = User-Request

Framed-IP-Address = 172.16.0.123

NAS-IP-Address = 127.0.0.1

NAS-Port = 0

Acct-Delay-Time = 0

Timestamp = 1276040865

Request-Authenticator = Verified

 

В /usr/abills/libexec/config.pl

$conf{MAX_SESSION_TRAFFIC} = 0;(пробывал разное прописывать тут что нужно вообще чтоб стояло?)

может еще чтонибудь сюда надо?

 

в словарях попрежнему радиусклиента и фрирадиуса

ATTRIBUTE Acct-Input-Gigawords 52 integer

ATTRIBUTE Acct-Output-Gigawords 53 integer

сверху параметры обрез скорости каторые кстати работают.

Есть советы?

Share this post


Link to post
Share on other sites
Есть советы?
Acct-Interim-Interval есть? попробовать 30 или 60 (второе если у юзера скорость ниже 500 Мбит)

 

 

Share this post


Link to post
Share on other sites

Смотреть radacct detail, приходят ли Gigawords в Interim-Update.

Лично у меня - приходят =). Дальше пробовать в Acct.pm в обработку Alive-пакетов всунуть логирование (очень удобно - Data::Dumper). Нужная переменная - $RAD (если что - я не виноват, пишу по памяти :)).

 

 

Да, ещё - патчей на Gigawords мелькало несколько. У меня заработал только один.

Share this post


Link to post
Share on other sites
Есть советы?
Acct-Interim-Interval есть? попробовать 30 или 60 (второе если у юзера скорость ниже 500 Мбит)

щас стоит ATTRIBUTE Acct-Interim-Interval 85 integer

меняю на ATTRIBUTE Acct-Interim-Interval 30 integer

а также на ATTRIBUTE Acct-Interim-Interval 60 integer

при запуске радиуса с параметром -X вываливаеться вот такая ошибка

 

тут инклюдит модули и т.д я это опущу а дальше

including configuration file /usr/local/radiusd//etc/raddb/sites-enabled/inner-tunnel

main {

allow_core_dumps = no

}

including dictionary file /usr/local/radiusd//etc/raddb/dictionary

Errors reading dictionary: dict_init: /usr/local/radiusd//etc/raddb/dictionary[50]: dict_addattr: Duplicate attribute name Acct-Interim-Interval

хатя какой нафиг дубликат если параметр Acct-Interim-Interval только один там.Как только меняю назад как было на с 30 или 60 на 85

ATTRIBUTE Acct-Interim-Interval 85 integer все сразу жжужит и пашет как невчем небывало и про дубликат забывает.

Да кстати фрирадиус версия 2.1.9

 

 

Смотреть radacct detail, приходят ли Gigawords в Interim-Update.

вот что в радакте

(тут скаченно было 6.4)

 

Fri Jun 11 00:45:59 2010

Acct-Session-Id = "4C1140AA087E00"

User-Name = "test3"

Acct-Status-Type = Start

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

NAS-Port-Type = Virtual

Framed-IP-Address = 172.16.1.188

NAS-IP-Address = 127.0.0.1

NAS-Port = 0

Acct-Delay-Time = 0

Timestamp = 1276199159

Request-Authenticator = Verified

 

Fri Jun 11 01:09:00 2010

Acct-Session-Id = "4C1140AA087E00"

User-Name = "test3"

Acct-Status-Type = Stop

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

Acct-Session-Time = 1381

Acct-Output-Octets = 2745633208

Acct-Output-Gigawords = 0

Acct-Input-Octets = 107733477

Acct-Input-Gigawords = 0

Acct-Output-Packets = 4757548

Acct-Input-Packets = 2612079

NAS-Port-Type = Virtual

Acct-Terminate-Cause = User-Request

Framed-IP-Address = 172.16.1.188

NAS-IP-Address = 127.0.0.1

NAS-Port = 0

Acct-Delay-Time = 0

Timestamp = 1276200540

Request-Authenticator = Verified

 

несовсем понял что это за параметр и откуда он береться что то нужно в словарь прописать?

 

Лично у меня - приходят =). Дальше пробовать в Acct.pm в обработку Alive-пакетов всунуть логирование (очень удобно - Data::Dumper). Нужная переменная - $RAD (если что - я не виноват, пишу по памяти :)).

тут пожалуйста поподробней если можно.

 

Да, ещё - патчей на Gigawords мелькало несколько. У меня заработал только один.

 

какой именно если несложно выложите?попробывал все что нашол как писал выше а сейчас на готовой рпмке с офф сайта уже пропатченной.

Share this post


Link to post
Share on other sites
щас стоит ATTRIBUTE Acct-Interim-Interval 85 integer

меняю...

Зачем? О_о
вот что в радакте

(тут скаченно было 6.4)

...

У вас Alive не ходят (они же - Interim-Update). Насколько я понимаю, пересчет Gigawords происходит как раз во время отправки Alive.

Лезем в свойства сервера доступа в abills, пишем в RADIUS параметры:

Acct-Interim-Interval=60

Остальное пока не трогаем. Передергиваем соединение, смотрим, появятся ли Alive. Выглядят примерно так:

...
        Acct-Status-Type = Interim-Update
...

Насчет патчей не подскажу - у меня это уже крутится в mpd5, остальное безвозвратно проепотеряно.

Share this post


Link to post
Share on other sites

Спасибо за совет.Сделал как вы написали и запахало.Думал помогло да не тут то было.почемуто перестала появляться статистика.Тоесть в в мониторинге я вижу что юзер сидит,и в радакт логе тоже есть,и в радиусе вижу как заходит, а в журнале последние входы и использованно ничего нет.Слил все конфиги в бекап и перевесил все с нуля и ось в том числе.Решил с бекапов конфиги невостанавливать а заного по офф документации и форуму поставить.Все поставил вроде пашет но вышла странная проблема что если я меняю $conf{MAX_SESSION_TRAFFIC} = 2047; на любое число выше или вообще каменчу то при коннекте все проходит авторизацию и пускает в сеть но через секунду выкидывает и винда пишет Неудаёться связаться с Test(это имя подключения) Ожидаеться повторное подключение .Ни ошибки ни фига больше непишет.В логах все тишина.вот вывод radiusd -X

 

Listening on authentication address * port 1812

Listening on accounting address * port 1813

Listening on command file /usr/local/radiusd//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 45523, id=229, length=94

Service-Type = Framed-User

Framed-Protocol = PPP

User-Name = "tester3"

CHAP-Challenge = 0x29d13e87db34ced250264c36f87643c2a5ea6458

CHAP-Password = 0x0a4498cf47ac8b010b4b2aab46e0e5ae4d

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

Exec-Program output: Acct-Interim-Interval = 60, Session-Timeout = 1627513, PPPD-Upstream-Speed-Limit = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.156, Session-Octets-Limit = 2148532224, Framed-IP-Netmask = 255.255.255.255, PPPD-Downstream-Speed-Limit = 0,

Exec-Program-Wait: value-pairs: Acct-Interim-Interval = 60, Session-Timeout = 1627513, PPPD-Upstream-Speed-Limit = 0, Octets-Direction = 0, Framed-IP-Address = 172.16.0.156, Session-Octets-Limit = 2148532224, Framed-IP-Netmask = 255.255.255.255, PPPD-Downstream-Speed-Limit = 0,

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 229 to 127.0.0.1 port 45523

Acct-Interim-Interval = 60

Session-Timeout = 1627513

PPPD-Upstream-Speed-Limit = Bridge-No

Octets-Direction = Route-IP-No

Framed-IP-Address = 172.16.0.156

Session-Octets-Limit = 2148532224

Framed-IP-Netmask = 255.255.255.255

PPPD-Downstream-Speed-Limit = Send-Auth-None

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 45067, id=230, length=99

Acct-Session-Id = "4C12BEB70FBC00"

User-Name = "tester3"

Acct-Status-Type = Start

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

NAS-Port-Type = Virtual

Framed-IP-Address = 172.16.0.156

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

+- entering group accounting {...}

[detail] expand: /usr/local/radiusd//var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/radiusd//var/log/radius/radacct/127.0.0.1/detail-20100612

[detail] /usr/local/radiusd//var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/radiusd//var/log/radius/radacct/127.0.0.1/detail-20100612

[detail] expand: %t -> Sat Jun 12 03:54:47 2010

++[detail] returns ok

++[unix] returns ok

[radutmp] expand: /usr/local/radiusd//var/log/radius/radutmp -> /usr/local/radiusd//var/log/radius/radutmp

[radutmp] expand: %{User-Name} -> tester3

++[radutmp] returns ok

[attr_filter.accounting_response] expand: %{User-Name} -> tester3

attr_filter: Matched entry DEFAULT at line 12

++[attr_filter.accounting_response] returns updated

Sending Accounting-Response of id 230 to 127.0.0.1 port 45067

Finished request 1.

Cleaning up request 1 ID 230 with timestamp +4

Going to the next request

Waking up in 4.8 seconds.

rad_recv: Accounting-Request packet from host 127.0.0.1 port 56603, id=231, length=147

Acct-Session-Id = "4C12BEB70FBC00"

User-Name = "tester3"

Acct-Status-Type = Stop

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

Acct-Session-Time = 1

Acct-Output-Octets = 0

Acct-Output-Gigawords = 0

Acct-Input-Octets = 529

Acct-Input-Gigawords = 0

Acct-Output-Packets = 0

Acct-Input-Packets = 3

NAS-Port-Type = Virtual

Acct-Terminate-Cause = NAS-Request

Framed-IP-Address = 172.16.0.156

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

+- entering group accounting {...}

[detail] expand: /usr/local/radiusd//var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /usr/local/radiusd//var/log/radius/radacct/127.0.0.1/detail-20100612

[detail] /usr/local/radiusd//var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /usr/local/radiusd//var/log/radius/radacct/127.0.0.1/detail-20100612

[detail] expand: %t -> Sat Jun 12 03:54:48 2010

++[detail] returns ok

++[unix] returns ok

[radutmp] expand: /usr/local/radiusd//var/log/radius/radutmp -> /usr/local/radiusd//var/log/radius/radutmp

[radutmp] expand: %{User-Name} -> tester3

++[radutmp] returns ok

[attr_filter.accounting_response] expand: %{User-Name} -> tester3

attr_filter: Matched entry DEFAULT at line 12

++[attr_filter.accounting_response] returns updated

Sending Accounting-Response of id 231 to 127.0.0.1 port 56603

Finished request 2.

Cleaning up request 2 ID 231 with timestamp +5

Going to the next request

Waking up in 3.7 seconds.

Cleaning up request 0 ID 229 with timestamp +4

Ready to process requests.

 

где я опять накасячил?

Share this post


Link to post
Share on other sites

Наиболее правильный вариант будет вынести NAS на Mikrotik или Freebsd (mpd). Под ними такой проблемы - нет.

... и поставить этот биллинг

Share this post


Link to post
Share on other sites
Наиболее правильный вариант будет вынести NAS на Mikrotik или Freebsd (mpd). Под ними такой проблемы - нет.
... и поставить этот биллинг

Спасибо за советы.Микротик неочеь понравился,поставил оттестил все завелось но непонятно до конца как все работает,команды урезаны,а через винбокс тыкать галачками и получить результата непоняв как это все работает как то нехочеться.mpd думаю более верное решение тут будет.Насчет ссылки что вы дали покручу посмотрю.

Share this post


Link to post
Share on other sites
Наиболее правильный вариант будет вынести NAS на Mikrotik или Freebsd (mpd). Под ними такой проблемы - нет.
... и поставить <a href="http://stasoft.net/" target="_blank">этот</a> биллинг

 

а потом потом опять вернуться на abills )

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