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