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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Как реализован шейпер/полисер архитектурно?
Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции 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?

 

 

 

 

Share this post


Link to post
Share on other sites

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

 

 

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

Share this post


Link to post
Share on other sites

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?

 

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

Edited by Abram

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

Пытаюсь сменить 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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Умник,

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

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

 

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

Edited by Abram

Share this post


Link to post
Share on other sites

один раз получил от радиуса 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) - сессию в любой момент можно завершить при помощи него.

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

Edited by andrew_G

Share this post


Link to post
Share on other sites

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

 

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

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

 

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

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

Edited by andrew_G

Share this post


Link to post
Share on other sites

Может, разрывать все сессии перед выходом?
В случае завершения 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.

Share this post


Link to post
Share on other sites

Как реализован шейпер/полисер архитектурно?
Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции 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 Мбит/с не мог выдавить.

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

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

 

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

Edited by andrew_G

Share this post


Link to post
Share on other sites

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

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

Сколько пробовал больше 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

Edited by Abram

Share this post


Link to post
Share on other sites

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

 

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

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

 

 

Share this post


Link to post
Share on other sites

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

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

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

 

Вопрос:

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

Share this post


Link to post
Share on other sites

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 для этой сессии не создавать.
Не уловил мысль. :(

Share this post


Link to post
Share on other sites

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

*Если.

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

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.