Умник Posted April 25, 2010 Как реализован шейпер/полисер архитектурно? Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции CONFIG_NET_SCHED. Можно ее выключить (кстати, Интел в каком-то своем документе по оптимизации так и советовал) и ipt_ISG все равно будет работать. Полисер реализован в соответствии с RFC 2697, реализация очень дешевая и примтивная (так полисят аппаратные решения), но надежная для целей mass-policing. Более того, любая более менее сложная дисциплина (qdisc, например HTB), висящая на интерфейсе ломает performance у TX multiqueue (из-за глобальных блокировок Qdisc), то есть теряется возможность передавать пакеты одновременно с нескольких очередей, хотя с виду все ОК (счетчики на очередях тикают корректно). На скоростях меньше 1 Гбит/с это не так страшно, а вот если счет идет на гигабиты это становится проблемой в плане производительности. См. vger.kernel.org/~davem/davem_nyc09.pdf Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 25, 2010 Поддержку v6 планируете? А какие могут быть проблемы? Не вижу здесь сложностей. Аппаратные решения уже поддерживают IPv6oE? :) Кто-нибудь юзает? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zoro Posted April 25, 2010 Как реализован шейпер/полисер архитектурно?Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции 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? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 25, 2010 zoro, сейчас реализован только инициатор по unclassified source IP-address. Про DHCP lISG ничего не знает. Полисер двунаправленный? возможно задавать Rx-Tx? в интернет-1мб из инета 2мб? (пример)Можно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 26, 2010 (edited) 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 April 26, 2010 by Abram Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 26, 2010 Переустановил ядро, пересобрал, установил вручную - покатило. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 26, 2010 Abram, make install в сущности делает ядровый make modules_install. У меня тоже была как-то ситуация, когда простой modules_install сломал мне /lib/modules. Так и не разобрался, почему. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_G Posted April 26, 2010 Что я делаю не так. Пытаюсь сменить 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 26, 2010 andrew_G, по стандарту в CoA-Request обязательно должен быть какой-нибудь атрибут, который позволяет однозначно идентифицировать NAS (NAS-IP-Address или NAS-Identifier). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 26, 2010 (edited) Умник, А как можно разорвать с NAS-а существующую сессию? Привязываю к биллингу, один раз получил от радиуса Accept и больше ISGd в радиус не стучится. Пардон, пропустил два сообщения. На всякий случай: echo NAS-IP-Address=айпи_наса,User-Name=айпи_юзверя | radclient -x 127.0.0.1:3799 40 пароль Edited April 26, 2010 by Abram Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 26, 2010 один раз получил от радиуса 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) - сессию в любой момент можно завершить при помощи него. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 26, 2010 один раз получил от радиуса Accept и больше ISGd в радиус не стучится.А должен? Нет, но для отладки надо :).Может, разрывать все сессии перед выходом? Звучит разумно :). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_G Posted April 26, 2010 (edited) 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 April 26, 2010 by andrew_G Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 26, 2010 Может, разрывать все сессии перед выходом?В случае завершения ISGd.pl сессии продолжают работать, то есть жизнь не умирает. :) Просто невозможна аутентификация новых сессий, аккаунтинг не уходит на RADIUS. После запуска ISGd.pl все нормализуется. Безусловно завершать сессии в момент умирания ISGd.pl не всегда требуется (при изменении конфига требуется рестарт ISGd.pl, но сессиям умирать вовсе не обязательно). andrew_G, видимо lISG считает, что у NAS-а какой-то другой адрес. Посмотрите в логах строчку: Initialization done for NAS 'XX.XX.XX.XX', entering main loop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_G Posted April 26, 2010 (edited) andrew_G, видимо lISG считает, что у NAS-а какой-то другой адрес. Посмотрите в логах строчку: Initialization done for NAS 'XX.XX.XX.XX', entering main loop Cпасибо, так и есть. Еще хотелось бы все таки Iddle-Timeout и Session-Timeout увидеть в радиусе. А так, в принципе, пока вопросов нет. Все работает так, как должно. Буду начинать пробовать на живых абонентах.) Edited April 26, 2010 by andrew_G Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 26, 2010 Может, разрывать все сессии перед выходом?В случае завершения 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. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
andrew_G Posted April 27, 2010 (edited) Как реализован шейпер/полисер архитектурно?Фишка в том, что вообще не используется инфраструктура ядра, включаемая по опции 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 April 27, 2010 by andrew_G Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 27, 2010 (edited) Вопрос не по теме.На каком железе можно получить такие скорости? Сколько пробовал больше 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 April 27, 2010 by Abram Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
~pavel~ Posted April 27, 2010 У нас НАТы тянут сейчас по 1,5 гига, 60% нагрузка в час пик, если отключить раскраску P2P трафика, то нагрузка еще снизится стоят по 2 процессора 4ядерных: model name : Intel® Xeon® CPU X5355 @ 2.66GHz Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted April 29, 2010 Чего хочется: 1) Поддержку idle-Timeout и Session-Timeout 2) Добавить какой-то атрибут для создания iptables правила что бы можно было трафик с User-IP завернуть определенный IP (Портал, ЛК) Вопрос: По какому принципу живет сессия? Если нет пакетов со стороны approved абонента время жизни сессии? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted April 29, 2010 А ну еще для тупых Radius есть Framed-IP = User-Name и при этом $cfg{static_nat} = 1; то NAT для этой сессии не создавать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 29, 2010 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 для этой сессии не создавать.Не уловил мысль. :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 29, 2010 [есть Framed-IP = User-Name и при этом $cfg{static_nat} = 1; то NAT для этой сессии не создавать.Не уловил мысль. :( *Если.Пришёл, юзверь, скажем, с 10.9.8.7. Это его User-Name. Если Framed-IP-Address пришёл такой же - значит, NAT-ить не нужно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted April 29, 2010 Abram, хорошо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted April 29, 2010 shicoy, Умник, http://files.abram.org.ua/lISG_snat_fix.patch Так? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...