Перейти к содержимому
Калькуляторы

Как реализован шейпер/полисер архитектурно?

Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции CONFIG_NET_SCHED. Можно ее выключить (кстати, Интел в каком-то своем документе по оптимизации так и советовал) и ipt_ISG все равно будет работать. Полисер реализован в соответствии с RFC 2697, реализация очень дешевая и примтивная (так полисят аппаратные решения), но надежная для целей mass-policing. Более того, любая более менее сложная дисциплина (qdisc, например HTB), висящая на интерфейсе ломает performance у TX multiqueue (из-за глобальных блокировок Qdisc), то есть теряется возможность передавать пакеты одновременно с нескольких очередей, хотя с виду все ОК (счетчики на очередях тикают корректно). На скоростях меньше 1 Гбит/с это не так страшно, а вот если счет идет на гигабиты это становится проблемой в плане производительности. См. vger.kernel.org/~davem/davem_nyc09.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поддержку v6 планируете?

А какие могут быть проблемы? Не вижу здесь сложностей. Аппаратные решения уже поддерживают IPv6oE? :) Кто-нибудь юзает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как реализован шейпер/полисер архитектурно?
Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции CONFIG_NET_SCHED. Можно ее выключить (кстати, Интел в каком-то своем документе по оптимизации так и советовал) и ipt_ISG все равно будет работать. Полисер реализован в соответствии с RFC 2697, реализация очень дешевая и примтивная (так полисят аппаратные решения), но надежная для целей mass-policing. Более того, любая более менее сложная дисциплина (qdisc, например HTB), висящая на интерфейсе ломает performance у TX multiqueue (из-за глобальных блокировок Qdisc), то есть теряется возможность передавать пакеты одновременно с нескольких очередей, хотя с виду все ОК (счетчики на очередях тикают корректно). На скоростях меньше 1 Гбит/с это не так страшно, а вот если счет идет на гигабиты это становится проблемой в плане производительности. См. vger.kernel.org/~davem/davem_nyc09.pdf

Полисер двунаправленный? возможно задавать Rx-Tx? в интернет-1мб из инета 2мб? (пример)

Что-то не ответили про DHCP?

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

zoro, сейчас реализован только инициатор по unclassified source IP-address. Про DHCP lISG ничего не знает.

 

 

Полисер двунаправленный? возможно задавать Rx-Tx? в интернет-1мб из инета 2мб? (пример)
Можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ipt_ISG: Unknown symbol xt_register_target
ipt_ISG: Unknown symbol xt_unregister_target

2.6.32, i686.

Странно, но у меня в /lib/modules/`uname -r`/kernel оказалось почему-то вообще пусто О_О. Не убил ли make install?

 

Да, посмотрел - так и есть. Нихарашо! Хорошо, что заметил. А так бы ребутнул машину и ушла б в нирвану :).

Изменено пользователем Abram

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Переустановил ядро, пересобрал, установил вручную - покатило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Abram, make install в сущности делает ядровый make modules_install. У меня тоже была как-то ситуация, когда простой modules_install сломал мне /lib/modules. Так и не разобрался, почему.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что я делаю не так.

Пытаюсь сменить Class для User-Name 10.100.0.2

 

echo "User-Name=10.100.0.2,Class=200/200" | radclient 127.0.0.1:3799 coa apple

 

Received response ID 41, code 45, length = 26

Error-Cause = NAS-Identification-Mismatch

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

andrew_G, по стандарту в CoA-Request обязательно должен быть какой-нибудь атрибут, который позволяет однозначно идентифицировать NAS (NAS-IP-Address или NAS-Identifier).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Умник,

А как можно разорвать с NAS-а существующую сессию? Привязываю к биллингу, один раз получил от радиуса Accept и больше ISGd в радиус не стучится.

Пардон, пропустил два сообщения. На всякий случай:

 

echo NAS-IP-Address=айпи_наса,User-Name=айпи_юзверя | radclient -x 127.0.0.1:3799 40 пароль

Изменено пользователем Abram

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

один раз получил от радиуса Accept и больше ISGd в радиус не стучится.
А должен? Сделать можно. Просто не сталкивался с такими реализациями. Всего представлял себе стандартную схему работы с RADIUS-сервером как

Access-Request - Access-Accept;
Accounting-Request (Start) - Accounting-Response
Accounting-Request (Update/Alive) - Accounting-Response
last message repeated N times
Accounting-Request (Stop) - Accounting-Response

Вместе с Accounting-Request каждый раз должен еще приходить Access-Request?

 

Впрочем реализован PoD (Packet of Disconnect) - сессию в любой момент можно завершить при помощи него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

один раз получил от радиуса Accept и больше ISGd в радиус не стучится.
А должен?
Нет, но для отладки надо :).

Может, разрывать все сессии перед выходом? Звучит разумно :).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

andrew_G, по стандарту в CoA-Request обязательно должен быть какой-нибудь атрибут, который позволяет однозначно идентифицировать NAS (NAS-IP-Address или NAS-Identifier).

Так работает

 

echo NAS-Identifier="lISG",User-Name="10.100.0.2",Class="50/50" | radclient -x 127.0.0.1:3799 coa apple

 

Sending CoA-Request of id 157 to 127.0.0.1 port 3799

NAS-Identifier = "lISG"

User-Name = "10.100.0.2"

Class = 0x35302f3530

rad_recv: CoA-ACK packet from host 127.0.0.1 port 3799, id=157, length=20

 

 

а так все равно нет

 

 

echo NAS-IP-Address="127.0.0.1",User-Name="10.100.0.2",Class="50/50" | radclient -x 127.0.0.1:3799 coa apple

 

Sending CoA-Request of id 137 to 127.0.0.1 port 3799

NAS-IP-Address = 127.0.0.1

User-Name = "10.100.0.2"

Class = 0x35302f3530

rad_recv: CoA-NAK packet from host 127.0.0.1 port 3799, id=137, length=26

Error-Cause = NAS-Identification-Mismatch

Изменено пользователем andrew_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, разрывать все сессии перед выходом?
В случае завершения ISGd.pl сессии продолжают работать, то есть жизнь не умирает. :) Просто невозможна аутентификация новых сессий, аккаунтинг не уходит на RADIUS. После запуска ISGd.pl все нормализуется. Безусловно завершать сессии в момент умирания ISGd.pl не всегда требуется (при изменении конфига требуется рестарт ISGd.pl, но сессиям умирать вовсе не обязательно).

 

andrew_G, видимо lISG считает, что у NAS-а какой-то другой адрес. Посмотрите в логах строчку:

Initialization done for NAS 'XX.XX.XX.XX', entering main loop

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

andrew_G, видимо lISG считает, что у NAS-а какой-то другой адрес. Посмотрите в логах строчку:

Initialization done for NAS 'XX.XX.XX.XX', entering main loop

 

Cпасибо, так и есть.

Еще хотелось бы все таки Iddle-Timeout и Session-Timeout увидеть в радиусе.

А так, в принципе, пока вопросов нет.

Все работает так, как должно. Буду начинать пробовать на живых абонентах.)

Изменено пользователем andrew_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, разрывать все сессии перед выходом?
В случае завершения ISGd.pl сессии продолжают работать, то есть жизнь не умирает. :) Просто невозможна аутентификация новых сессий, аккаунтинг не уходит на RADIUS. После запуска ISGd.pl все нормализуется. Безусловно завершать сессии в момент умирания ISGd.pl не всегда требуется (при изменении конфига требуется рестарт ISGd.pl, но сессиям умирать вовсе не обязательно).

 

andrew_G, видимо lISG считает, что у NAS-а какой-то другой адрес. Посмотрите в логах строчку:

Initialization done for NAS 'XX.XX.XX.XX', entering main loop

Наверное, стоит разрывать, если отключен daemonize (или как там параметр называется?) либо включен debug.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как реализован шейпер/полисер архитектурно?
Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции CONFIG_NET_SCHED. Можно ее выключить (кстати, Интел в каком-то своем документе по оптимизации так и советовал) и ipt_ISG все равно будет работать. Полисер реализован в соответствии с RFC 2697, реализация очень дешевая и примтивная (так полисят аппаратные решения), но надежная для целей mass-policing. Более того, любая более менее сложная дисциплина (qdisc, например HTB), висящая на интерфейсе ломает performance у TX multiqueue (из-за глобальных блокировок Qdisc), то есть теряется возможность передавать пакеты одновременно с нескольких очередей, хотя с виду все ОК (счетчики на очередях тикают корректно). На скоростях меньше 1 Гбит/с это не так страшно, а вот если счет идет на гигабиты это становится проблемой в плане производительности. См. vger.kernel.org/~davem/davem_nyc09.pdf

Вопрос не по теме.

На каком железе можно получить такие скорости?

Сколько пробовал больше 500-600 Мбит/с не мог выдавить.

Притом что сервер занимался только натом и ничем больше.

А тут разговор идеи про гиги, притом с полисингом.

 

Есть ли у кого рабочий пример комплектации или модели сервера?

Изменено пользователем andrew_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос не по теме.

На каком железе можно получить такие скорости?

Сколько пробовал больше 500-600 Мбит/с не мог выдавить.

Притом что сервер занимался только натом и ничем больше.

А тут разговор идеи про гиги, притом с полисингом.

Выше сказано - NAT stateless 1-to-1 (грубо говоря: привязка одного внешнего адреса к одному внутреннему), полисинг - тупой.

 

Вопрос по теме.

Через сколько времени должна отвалиться сессия? Уже 15 минут как отключил тестового клиента, до сих пор висит.

 

Ага, нашёл.

 

> sudo modinfo ipt_ISG
filename:       /lib/modules/2.6.33-ARCH/kernel/net/ipv4/netfilter/ipt_ISG.ko
description:    Xtables: Linux ISG Access Control
author:         Oleg A. Arkhangelsky <sysoleg@yandex.ru>
license:        GPL
depends:        x_tables
vermagic:       2.6.33-ARCH SMP preempt mod_unload 686 
parm:           approve_retry_interval:Session approve retry interval (in seconds) (int)
parm:           session_max_duration:Session maximum duration (virtual reconnect after this time) (in seconds) (int)
parm:           session_timeout:Session inactivity timeout (disconnect session after this time) (in seconds) (int)
parm:           nr_buckets:Number of buckets to store current sessions list (int)
parm:           tg_action:uint
parm:           pass_outgoing:bool

Изменено пользователем Abram

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У нас НАТы тянут сейчас по 1,5 гига, 60% нагрузка в час пик, если отключить раскраску P2P трафика, то нагрузка еще снизится

 

стоят по 2 процессора 4ядерных:

model name : Intel® Xeon® CPU X5355 @ 2.66GHz

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чего хочется:

1) Поддержку idle-Timeout и Session-Timeout

2) Добавить какой-то атрибут для создания iptables правила что бы можно было трафик с User-IP завернуть определенный IP (Портал, ЛК)

 

Вопрос:

По какому принципу живет сессия? Если нет пакетов со стороны approved абонента время жизни сессии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А ну еще для тупых Radius

есть Framed-IP = User-Name и при этом $cfg{static_nat} = 1; то NAT для этой сессии не создавать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1) Поддержку idle-Timeout и Session-Timeout
Будет вместе с Acct-Interim-Interval.

 

2) Добавить какой-то атрибут для создания iptables правила что бы можно было трафик с User-IP завернуть определенный IP (Портал, ЛК)
Будет реализовано по другому. Ведь правил редиректа может быть много, поэтому в цепочку их складывать не очень эффективно.

 

По какому принципу живет сессия?
За это отвечает параметр session_timeout модуля ядра. Если нет пакетов больше чем session_timeout секунд, сессия закрывается.

 

есть Framed-IP = User-Name и при этом $cfg{static_nat} = 1; то NAT для этой сессии не создавать.
Не уловил мысль. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

[
есть Framed-IP = User-Name и при этом $cfg{static_nat} = 1; то NAT для этой сессии не создавать.
Не уловил мысль. :(

*Если.

Пришёл, юзверь, скажем, с 10.9.8.7. Это его User-Name.

Если Framed-IP-Address пришёл такой же - значит, NAT-ить не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.