Страница 1 из 2

PPPD IPv4 zone counters

Добавлено: Ср июн 14, 2006 9:10 am
Stas
Патч для зонального підрахунку трафіку для ядра та pppd

Кого небудь цікавить сабж? А-ля exppp. Майже закінчив. Є такі атрибути:
PPPD-Output-Packets-Zones-0
PPPD-Input-Packets-Zones-0 = 32
PPPD-Output-Octets-Zones-0 = 0
PPPD-Input-Octets-Zones-0 = 2688
PPPD-Output-Packets-Zones-1 = 0x00000000
PPPD-Input-Packets-Zones-1 = 0x00000000
PPPD-Output-Octets-Zones-1 = 0x00000000
PPPD-Input-Octets-Zones-1 = 0x00000000
PPPD-Output-Packets-Zones-2 = 0
PPPD-Input-Packets-Zones-2 = 0
PPPD-Output-Octets-Zones-2 = 0
PPPD-Input-Octets-Zones-2 = 0
PPPD-Output-Packets-Zones-3 = 0
PPPD-Input-Packets-Zones-3 = 0
PPPD-Output-Octets-Zones-3 = 0
PPPD-Input-Octets-Zones-3 = 0

Тобто є 4 зони (задається під час компіляції), Zones-0 - зона за замовчуванням, тобто все, що не потрапило більше нікуди, потрапляє сюди.
Залишилося 3 речі:
  1. Конфігуратор (буду писати якщо комусь ще потрібно та буде час).
  2. Помилка знаходження IP при компрессїї - iph == NULL :( - шукаю зараз як обійти.
  3. Інтеграція у abills. Буду дуже вдячний, якщо хтось, бажано Asmodeus :), зробить.

Добавлено: Ср июн 14, 2006 10:12 am
axl
Дуже цікавить.. Він сумісний з патчами mppe-mppc.?
Які версії ядра та pppd?
Можна буде по окремому тарифу підраховувати трафік до локальних серверів?

Добавлено: Ср июн 14, 2006 11:17 am
axl
От якби ж ще в pppd був інтегрований шейпер...
з різними обмеженнями швидкості для різних зон...
:roll:

Добавлено: Ср июн 14, 2006 11:37 am
Stas
axl писал(а):Дуже цікавить.. Він сумісний з патчами mppe-mppc.?
Які версії ядра та pppd?
Можна буде по окремому тарифу підраховувати трафік до локальних серверів?
Це - окремий патч. Я його зараз дописую, але часу обмаль. Він хоч і невеликий, але всеж... Зони зараз прошити у коді - це перший пункт мого TODO :)
Патч рахує трафік по зонах - 0 - все, що не попало в інші, 1, 2, 3, ... - ті, що назначили. Тариф зоні призначає білінг, тобто потрібно попросити Asmodeus'а, щоб він зробив.

Добавлено: Ср июн 14, 2006 11:41 am
Stas
axl писал(а):От якби ж ще в pppd був інтегрований шейпер...
з різними обмеженнями швидкості для різних зон...
:roll:
В Linux є shaper і досить непоганий (див. QoS, Linux Advanced Routing & Traffic Control) а pppd по запуску та завершенню виконує if-up та if-down скрипти.
Я хочу покопати в бік tun/tap, але це буде нескоро :(

Добавлено: Ср июн 14, 2006 1:31 pm
axl
можна використовувати і зовнішній шейпер, але щоб радіус передавав атрибути швидкості NASу. А pppd запускав би зовнішній скрипт, якому б передавалися ці атрибути і виставлялися потрібні швидкості.
Таким чином можна емулювати справжній апаратний NAS. Які переваги:
його простіше інтегрувати в біллінг
його можна безпроблемно розташовувати на іншому хості.
він менше навантажує сервер, бо не робить додаткових SQL запитів під час виконання процедури обмеження швидкості

Я можу багато ще чого нафантазувати, але шкода, що не можу цього реалізувати - не програміст я :)

Добавлено: Ср июн 14, 2006 4:43 pm
Stas
axl писал(а):можна використовувати і зовнішній шейпер, але щоб радіус передавав атрибути швидкості NASу. А pppd запускав би зовнішній скрипт, якому б передавалися ці атрибути і виставлялися потрібні швидкості.
Таким чином можна емулювати справжній апаратний NAS. Які переваги:
його простіше інтегрувати в біллінг
його можна безпроблемно розташовувати на іншому хості.
він менше навантажує сервер, бо не робить додаткових SQL запитів під час виконання процедури обмеження швидкості

Я можу багато ще чого нафантазувати, але шкода, що не можу цього реалізувати - не програміст я :)
/usr/share/freeradius/dictionary.roaringpenguin
VENDOR Roaring-Penguin 10055

BEGIN-VENDOR Roaring-Penguin

ATTRIBUTE RP-Upstream-Speed-Limit 1 integer
ATTRIBUTE RP-Downstream-Speed-Limit 2 integer

END-VENDOR Roaring-Penguin

Все. Працює.

Добавлено: Ср июн 14, 2006 8:06 pm
Stas
Тепер в моєму TODO 2 пункти лишилося - 1 та 3. Patch для pppd-2.4.2 (інтегрував у ebuild) та linux-2.6.16 (неінтегрований).
Приклад виводу radiusd -X

Код: Выделить всё

rad_recv: Accounting-Request packet from host 192.168.254.2:2048, id=188, length=316
        Acct-Session-Id = "4490620615B3"
        User-Name = "stas"
        Acct-Status-Type = Interim-Update
        Service-Type = Framed-User
        Framed-Protocol = PPP
        Acct-Authentic = RADIUS
        Acct-Session-Time = 2165
        Acct-Output-Octets = 222
        Acct-Input-Octets = 894
        Acct-Output-Packets = 5
        Acct-Input-Packets = 13
        PPPD-Output-Packets-Zones-0 = 0
        PPPD-Input-Packets-Zones-0 = 4
        PPPD-Output-Octets-Zones-0 = 0
        PPPD-Input-Octets-Zones-0 = 328
        PPPD-Output-Packets-Zones-1 = 0x00000002
        PPPD-Input-Packets-Zones-1 = 0x00000006
        PPPD-Output-Octets-Zones-1 = 0x000000a8
        PPPD-Input-Octets-Zones-1 = 0x000001ec
        PPPD-Output-Packets-Zones-2 = 0
        PPPD-Input-Packets-Zones-2 = 0
        PPPD-Output-Octets-Zones-2 = 0
        PPPD-Input-Octets-Zones-2 = 0
        PPPD-Output-Packets-Zones-3 = 0
        PPPD-Input-Packets-Zones-3 = 0
        PPPD-Output-Octets-Zones-3 = 0
        PPPD-Input-Octets-Zones-3 = 0
        NAS-Port-Type = Async
        Framed-IP-Address = 192.168.253.1
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Acct-Delay-Time = 0

Код: Выделить всё

rad_recv: Accounting-Request packet from host 192.168.254.2:2048, id=190, length=316
        Acct-Session-Id = "4490620615B3"
        User-Name = "stas"
        Acct-Status-Type = Stop
        Service-Type = Framed-User
        Framed-Protocol = PPP
        Acct-Authentic = RADIUS
        Acct-Session-Time = 2263
        Acct-Output-Octets = 222
        Acct-Input-Octets = 894
        Acct-Output-Packets = 5
        Acct-Input-Packets = 13
        PPPD-Output-Packets-Zones-0 = 0
        PPPD-Input-Packets-Zones-0 = 4
        PPPD-Output-Octets-Zones-0 = 0
        PPPD-Input-Octets-Zones-0 = 328
        PPPD-Output-Packets-Zones-1 = 0x00000002
        PPPD-Input-Packets-Zones-1 = 0x00000006
        PPPD-Output-Octets-Zones-1 = 0x000000a8
        PPPD-Input-Octets-Zones-1 = 0x000001ec
        PPPD-Output-Packets-Zones-2 = 0
        PPPD-Input-Packets-Zones-2 = 0
        PPPD-Output-Octets-Zones-2 = 0
        PPPD-Input-Octets-Zones-2 = 0
        PPPD-Output-Packets-Zones-3 = 0
        PPPD-Input-Packets-Zones-3 = 0
        PPPD-Output-Octets-Zones-3 = 0
        PPPD-Input-Octets-Zones-3 = 0
        NAS-Port-Type = Async
        Framed-IP-Address = 192.168.253.1
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Acct-Delay-Time = 0
Відмінність у виводі між зонами через те, що для тесту у першій зоні у dictionary поставив octets тип і не повернув назад. Зараз верну на integer. Хоча якщо тут є апологети RADIUS, може пыдкажете який тип більш правильно використовувати?

Добавлено: Чт июн 15, 2006 7:42 am
axl
Я не апологет, але мабуть такий тип, як і в Acct-Input-Octets / Acct-Output-Octets

Під ядро 2.4.xx не планується? Чи може воно і так підійде?

Добавлено: Чт июн 15, 2006 9:39 am
Stas
axl писал(а):Під ядро 2.4.xx не планується? Чи може воно і так підійде?
Повинно підійти. У будь-якому випадку я буду використовувати з 2.4.31, так що як не підійде зроблю, щоб підходило :) Там різна конфігурація тільки, все інше повинно стати без проблем.
~AsmodeuS~ дав сторінку на wiki під патч http://abills.asmodeus.com.ua/wiki/doku ... x:epppd:ru

Добавлено: Пт июн 16, 2006 10:51 am
Stas
Зробив патч під 2.4.32.
Також тепер файли доступні для завантаження, дякуємо ~AsmodeuS~.
http://sourceforge.net/project/showfile ... _id=194366

Нова версія

Добавлено: Вт июн 27, 2006 3:08 pm
Stas
Зробив нову версію патчу. Тепер є конфігуратор, йде окремим файлом.
Патч зменшився, тепер використовується Red-Black tree з ядра.
Можна брати тут:
http://sourceforge.net/project/showfile ... _id=194366

Добавлено: Вт июн 27, 2006 3:54 pm
axl
А как дела с интеграцией в abills?

Добавлено: Вт июн 27, 2006 5:03 pm
Stas
axl писал(а):А как дела с интеграцией в abills?
(2006-06-26 17:33:57) Stas: Поддержка в abills будет?
(2006-06-26 17:34:34) ~AsmodeuS~: да конечно
Ждём-с... Я в perl'е не спец, у ~AsmodeuS~ судя по всему тоже со временем напряг...

Добавлено: Пт июн 30, 2006 5:02 pm
axl
Я тут углубился в документацию по pppd и нашел очень простой и идеологически правильный способ ограничивать скорость ..

man pppd-radattr

Может это всем известно, но для меня это открытие :)
Смысл в том, что при помощи стандартного плагина можно получать от радиуса любые атрибуты и складывать их в файл /var/run/radattr.pppN, а потом этот файл обрабатывать в скрипте ip-up.local

Теперь надо просить ~Asmodeus~'а передавать соответствующие атрибуты скорости для NAS pppd..