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

 

Оно и сейчас валит машину, просто надо чуточку более постараться

 

В смысле в теории валит, в меру вашего понимания как оно наверное работает? Тут в треде я вижу полно такой аналитики. Вот не в теории:

 

Rate: 16647418842 bits/sec, 2580807 packets/sec; Avg 1 min: 16615483321 bps, 2573758 pps; 5 min: 14964148091 bps, 2317772 pps

 

На реальном трафике, при этом добавляет 10% к нагрузке.

 

- влейте в машину, на которой работает ipt_netflow килоппс 500 флуда (hping3 подойдет)

 

Да пару телнетов в баше в цикле запустить и завалится. Не то что ваша прога на замечательном PF_RING.

 

сильно рандомного и посмотрите, сколько ядер уйдет в полку и что произойдет с роутингом. Это - мина замедленного действия, если бы роутер стоял "без побрякушек" он бы провернул несколько миллионов пакетов/секунду играючи и пережил ЧНН.

 

Играючи переживает ЧНН. Открою секрет, там есть даже защита от DOS.

 

Не стоит думать, что мой негатив не имеет под собой оснований, он идеологический - я не согласен с используемым подходом.

 

Почему-то ваши идеологчиеские основания очень похожи на личную неприязнь, что немного удивляет ибо я вам ничего не сделал.

 

Но я все равно очень благодарен

Да я вижу, что ни тред с упоминанием так свои пять копеек вставляеете.

 

за тулкит, так как netflow генерируется качественный и согласно всем спецификациям. Я отлично протестировал им свой софт, пока писал парсеры. Вопрос лишь в том, что подходит он для довольно слабо нагруженных сетей и об этом стоит писать явно.

 

Если для вас 10 гигабит это слабо нагруженная сеть, тогда стоит писать об этом явно.

Share this post


Link to post
Share on other sites

Нет, валит не в теории, а вполне на практике.

 

По должностным обязанностям hping/trafgen/MoonGen у меня всегда под рукой. У меня довольно слабая машинка под тесты класса e5 2604 на 4 ядра, в принципе, она может легко роутить в районе десятка гигабит и пары mpps не уходя в 90% si. Флуды переживает плохо, но переживает не уходя в полку. А вот если загрузить ipt_netflow и вальнуть тем же флудом, то видно не приличные 30-40% idle, а 1-2% и адский пакетлосс. А флуд у меня смачный - полный рандом по всем параметрам. Дело было около месяца назад, не больше, на активной версии с GitHub.

 

Я упоминаю его в каждой теме, чтобы донести до людей, что не надо тащить сетевой ядреный софт в итак тормозной стек линукса. Это плохая рекомендация?

Share this post


Link to post
Share on other sites

Нет, валит не в теории, а вполне на практике.

 

Пример из реальной жизни я привёл - 16 гбит для вас "слабо нагруженная сеть", я правильно понял?

 

Настройки по-умолчанию заточены под небольшой трафик. Все это описано в документации, для тех кого это волнует. Я же не могу заставить читать документацию или настраивать модуль оптимально, особенно, если у кого-то предвзято негативное отношение.

 

По должностным обязанностям hping/trafgen/MoonGen у меня всегда под рукой. У меня довольно слабая машинка под тесты класса e5 2604 на 4 ядра, в принципе, она может легко роутить в районе десятка гигабит и пары mpps не уходя в 90% si.

 

А только лишь в 89%? Ок. 1. Слабая машинка. 2. Вы вешаете новое правило в iptables - то же самое с пустым правилом пробовали? 3. Оптимальных настроек не производили.

 

Флуды переживает плохо, но переживает не уходя в полку.

 

Почему вы 30-40% idle называете "плохо"? Или всё таки 89%? Если к 89% добавить 10%, вот и вышло 1-2% idle. То есть вы тестите в лабе машину на предельных для неё нагрузках, не оставляя ничего в запасе. А можно подумать на PF_RING, та же задача магически не создавала бы нагрузки?

 

А вот если загрузить ipt_netflow и вальнуть тем же флудом, то видно не приличные 30-40% idle, а 1-2% и адский пакетлосс. А флуд у меня смачный - полный рандом по всем параметрам.

 

Какая разница сколько там рандомных параметров, будет просто по потоку на каждый пакет, все это предусмотрено и настраивается. Все задачи из реальной жизни, которые мне ставили - модуль выполняет успешно. Поставят новую планку производительности - подумаем как решить.

 

Я упоминаю его в каждой теме, чтобы донести до людей, что не надо тащить сетевой ядреный софт в итак тормозной стек линукса. Это плохая рекомендация?

 

Если надо заменить линукс на не линукс, то почему модуль для iptables оказывается крайним?

Share this post


Link to post
Share on other sites

Я вовсе не рекомендую заменять Линукс на не Линукс. Я рекомендую решать задачу генерации флоу в user space, где ей место. В ядре достаточно проблем и без этого, ну право.

 

По крайне мере в Linux. Там она будет работать как часы и в самом крайнем случае брякнется лишь софтинка в юзерспейсе, а не вся система. Без тюнинга, без оглядки на число правил правила и что-либо еще.

 

Btw, не вижу смысла продолжать спор, я не смерюсь, что тащить все подряд в ядро хорошая идея, Вы не откажетесь от этой идеи. В чем смысл?

Share this post


Link to post
Share on other sites

Я вовсе не рекомендую заменять Линукс на не Линукс. Я рекомендую решать задачу генерации флоу в user space, где ей место. В ядре достаточно проблем и без этого, ну право.

 

У любого подхода есть свои плюсы и минусы. Это можно обсуждать спокойно и без предвзятости.

 

По крайне мере в Linux. Там она будет работать как часы и в самом крайнем случае брякнется лишь софтинка в юзерспейсе, а не вся система.

 

Чтоб не брякалась review'ится и отлаживается код (функция от t). В ядре с его миллионами строк кода чего только нет, каких только драйверов и подсистем - и не брякается. Значит, не так страшен ядерный код, как его малюют? С другой стороны, свежий/редкий код как раз может брякнуться, но стоит ли устраивать драму в стиле "я никогда в жизни больше не буду юзать линукс", "выкинье этот линукс", годами.

 

Без тюнинга, без оглядки на число правил правила и что-либо еще.

Уже и тюнинг плохо, в общем сплошные идеологические недостатки.

 

Btw, не вижу смысла продолжать спор, я не смерюсь, что тащить все подряд в ядро хорошая идея, Вы не откажетесь от этой идеи. В чем смысл?

 

Смысл в том, чтоб вы, по возможности, перестали распространять, например, такое "подходит он для довольно слабо нагруженных сетей и об этом стоит писать явно" или "завалить тот же ipt_netflow легким флудом из hping - домашнее упражнение для первоклассников".

Share this post


Link to post
Share on other sites

Cramac,

0) Берем последний master. Пересобираем ядро, модуль iptables и прочее. Важно - в kernel нужно заново делать ./configure, иначе не установится один модуль. Изменения внесены пару дней назад.

1) Создаем файл etc/tc.conf, достаточно одной строки:

ALL_OTHER	0.0.0.0/0

2) В etc/config.pl:

### Новый параметр
$cfg{unauth_session_max_duration} = 60;

### Для всех неавторизованных сессий добавляем сервис REDIR
$cfg{unauth_service_name_list} = [ "AREDIR" ];

### Собственно, описание сервиса
$cfg{srv}{REDIR}{type} = "tagger";
$cfg{srv}{REDIR}{traffic_classes} = [ "ALL_OTHER" ];

 

Теперь весь неавторизованный трафик будет считаться авторизованным и помечен сервисом REDIR.

А что может быть если на неавторизованные сессии не навешивается сервис? Где покопать?

 

[root@nas etc]# /opt/ISG/bin/ISG.pl
User IP-address NAT IP-address  Port number   Uniq. Identifier Durat.  Octets-in  Octets-out Rate-in    Rate-out   Service name     Flags
192.168.2.99    0.0.0.0         Virtual1      D473B06D77B335C4 1331    37871      88732      20000000   20000000   Main session     A
192.168.2.98    0.0.0.0         Virtual2      D835297C6FFE7E80 41      2201       2212       0          0          Main session     AZ

 

[root@nas etc]# /opt/ISG/bin/ISG.pl show_services Virtual2

User IP-address NAT IP-address Port number Uniq. Identifier Durat. Octets-in Octets-out Rate-in Rate-out Service name Flags

 

 

ИЧСХ после установки системы все навешивалось само нормально, но потом как-то резко перестало.

При этом если прислать AREDIR через радиус к авторизованной сессии то переадресация работает как по инструкции, значит сам сервис правильный.

Если закомментировать:

$cfg{unauth_service_name_list} = [ "AREDIR" ];

То lISG вообще трафик не пропускает(статус сессии X).

 

 

Как у него дебаг работает?

Share this post


Link to post
Share on other sites

Понаставил семафоров, ориентировочно затык вылез.

 

Для встроенного в UTM5 радиус проблема решается правкой одной строчки в ISGd.pl:

 

- if ($rp->vsattributes($rad_dict->vendor_num("Cisco"))) {
+ if ($rp->vsattr($rad_dict->vendor_num("Cisco"), "Cisco-Account-Info")) {

Share this post


Link to post
Share on other sites

не ставится isg

/lib/modules/3.8.0-29-generic/build/include/linux/stddef.h:11:2: ошибка: expected identifier before numeric constant
..
/lib/modules/3.8.0-29-generic/build/include/linux/linkage.h:5:25: фатальная ошибка: asm/linkage.h: Нет такого файла или каталога
компиляция прервана.

 

Тоже самое было!

Пока не откатился до ядра 3.2!

 

 

diff -ura sysoleg-lisg-1d05e525c870/kernel/isg_nehash.c sysoleg-lisg-1d05e525c870_new/kernel/isg_nehash.c
--- sysoleg-lisg-1d05e525c870/kernel/isg_nehash.c       2014-03-23 16:18:29.000000000 +0400
+++ sysoleg-lisg-1d05e525c870_new/kernel/isg_nehash.c   2015-05-25 14:22:40.209757569 +0300
@@ -97,7 +97,7 @@
   }

   if (last_ne) {
-       hlist_add_after(&last_ne->list, &ne->list);
+       hlist_add_behind(&ne->list, &last_ne->list);
   } else {
       hlist_add_before(&ne->list, &cne->list);
   }
diff -ura sysoleg-lisg-1d05e525c870/kernel/Makefile sysoleg-lisg-1d05e525c870_new/kernel/Makefile
--- sysoleg-lisg-1d05e525c870/kernel/Makefile   2015-05-25 14:44:17.233783658 +0300
+++ sysoleg-lisg-1d05e525c870_new/kernel/Makefile       2015-05-25 14:30:51.521767451 +0300
@@ -13,9 +13,9 @@
 echo "" > build.h
 printf "/* Compilation date.\n * Written by Makefile (userspace) */\n#define _BUILD_DATE \"%s %s\"\n" `date +'%F %T'` > build.h
 $(MAKE) -C $(KDIR) M=$(CURDIR) modules
- gcc -O2 -Wall -Wunused -I$(KDIR)/include -I$(IPTSRC)/include -DIPTABLES_VERSION=\"$(IPTABLES_VERSION)\" -fPIC -o libipt_ISG_sh.o -c libipt_ISG.c
+ gcc -O2 -Wall -Wunused -I$(IPTSRC)/include -DIPTABLES_VERSION=\"$(IPTABLES_VERSION)\" -fPIC -o libipt_ISG_sh.o -c libipt_ISG.c
 gcc -shared -o libipt_ISG.so libipt_ISG_sh.o
- gcc -O2 -Wall -Wunused -I$(KDIR)/include -I$(IPTSRC)/include -DIPTABLES_VERSION=\"$(IPTABLES_VERSION)\" -fPIC -o libipt_isg_sh.o -c libipt_isg.c
+ gcc -O2 -Wall -Wunused -I$(IPTSRC)/include -DIPTABLES_VERSION=\"$(IPTABLES_VERSION)\" -fPIC -o libipt_isg_sh.o -c libipt_isg.c
 gcc -shared -o libipt_isg.so libipt_isg_sh.o
kinstall:
 $(MAKE) -C $(KDIR) M=$(CURDIR) modules_install

Share this post


Link to post
Share on other sites

Аккуратней, в hlist_add_behind порядок аргументов другой, нельзя тупо переименовать after в behind

Share this post


Link to post
Share on other sites

нужно просто удалить -I и -D и все соберется

Share this post


Link to post
Share on other sites

Аккуратней, в hlist_add_behind порядок аргументов другой, нельзя тупо переименовать after в behind

Ага, аргументы ещё надо бы местами поменять. Я пока откатился на более древнее ядро для тестов, так что пропустил этот момент. Спасибо.

Share this post


Link to post
Share on other sites

Теперь весь неавторизованный трафик будет считаться авторизованным и помечен сервисом REDIR.

3) Iptables.

Трафик теперь считается авторизованным, но помечен сервисом. Нужно его вручную зарубить, кроме 80 порта. Перед -j ISG:

-A FORWARD -p tcp -m tcp --dport 80 -m isg --service-name REDIR -j ACCEPT
-A FORWARD -m isg --service-name REDIR -j DROP

Собственно, сам редирект, перед -j stat_nat_src_skeleton (если он есть):

-t nat -A PREROUTING -p tcp -m tcp --dport 80 -m isg --service-name REDIR -j REDIRECT --to-ports 8000

 

Вроде бы все.

 

Теперь неавторизованная сессия выглядит вот так (флаг Z значит, что не ведется аккаунтинг):

./ISG.pl |grep 0\\.0\\.0\\.0
10.x.x.x     0.0.0.0         Virtual153    FBE7DC2782A17915 60      0          0          0          0          Main session     AZ   

И, что интересно, вот так:

./ISG.pl show_services Virtual153
User IP-address NAT IP-address  Port number   Uniq. Identifier Durat.  Octets-in  Octets-out Rate-in    Rate-out   Service name     Flags
10.x.x.x     0.0.0.0         Virtual153    FBE7DC2782A17915 0       0          0          0          0          REDIR            SOZT 

 

А как можно сделать по хитрому так, чтобы модуль видел трафик со всех айпишников, пробовал их авторизовывать и при неудаче не дропал трафик?

А просто показывал их как неавторизованные.

Share this post


Link to post
Share on other sites

Теперь весь неавторизованный трафик будет считаться авторизованным и помечен сервисом REDIR.

3) Iptables.

Трафик теперь считается авторизованным, но помечен сервисом. Нужно его вручную зарубить, кроме 80 порта. Перед -j ISG:

-A FORWARD -p tcp -m tcp --dport 80 -m isg --service-name REDIR -j ACCEPT
-A FORWARD -m isg --service-name REDIR -j DROP

Собственно, сам редирект, перед -j stat_nat_src_skeleton (если он есть):

-t nat -A PREROUTING -p tcp -m tcp --dport 80 -m isg --service-name REDIR -j REDIRECT --to-ports 8000

 

Вроде бы все.

 

Теперь неавторизованная сессия выглядит вот так (флаг Z значит, что не ведется аккаунтинг):

./ISG.pl |grep 0\\.0\\.0\\.0
10.x.x.x     0.0.0.0         Virtual153    FBE7DC2782A17915 60      0          0          0          0          Main session     AZ   

И, что интересно, вот так:

./ISG.pl show_services Virtual153
User IP-address NAT IP-address  Port number   Uniq. Identifier Durat.  Octets-in  Octets-out Rate-in    Rate-out   Service name     Flags
10.x.x.x     0.0.0.0         Virtual153    FBE7DC2782A17915 0       0          0          0          0          REDIR            SOZT 

 

А как можно сделать по хитрому так, чтобы модуль видел трафик со всех айпишников, пробовал их авторизовывать и при неудаче не дропал трафик?

А просто показывал их как неавторизованные.

 

ну так и собирай все через iptables, а что есть в радиусе, то и авторизует...

Share this post


Link to post
Share on other sites

Коллега, не могли бы вы выразить свою мысль чуть более развернуто?

Не очень пониманию о чем речь.

Share this post


Link to post
Share on other sites

принимай весь трафик с интерфеса и отрежь служебный

iptables -I FORWARD -i eth0 ! -s 10.0.0.0/24 -j ISG --session-init

Share this post


Link to post
Share on other sites

Аааа, теперь понял.

Да дело в том что я не знаю точно все-ли айпишники клиентской сети 10.2.0.0/24 есть в радиусе.

 

И хочу выяснить каких айпишников там нет путем установки lISG за роутером который будет ловить трафик и пытаться его авторизовать в радиусе.

Есть большой шанс что после установки lISG обнаружится куча интересных айпишников, о которых я не знаю.

Не хотелось бы дропать с них трафик, т.к. мало ли что там важного работает, но хотелось бы таких ребят вычислять как-то, пусть даже в логе lISG.

 

Т.е. по сути речь о вариации с bypass режимом на старте.

 

P.S. подумал может пойти по другому пути?

Есть вариант как проще всего собрать список айпишников определенной подсети, исходящий трафик от которых прошел через роутер?

Share this post


Link to post
Share on other sites

Есть вариант как проще всего собрать список айпишников определенной подсети, исходящий трафик от которых прошел через роутер?

iptables -A FORWARD -s x.x.x.x/x -j LOG --log-prefix "SRC DETECT: " глупое решение

и читаем message, а там можно и распарсить

 

или через tcpdump... но тут уже не подскажу

Edited by kamae1ka

Share this post


Link to post
Share on other sites

Есть вариант как проще всего собрать список айпишников определенной подсети, исходящий трафик от которых прошел через роутер?

iptables -A FORWARD -s x.x.x.x/x -j LOG --log-prefix "SRC DETECT: " глупое решение

и читаем message, а там можно и распарсить

 

или через tcpdump... но тут уже не подскажу

можно сделать в радиусе авторизацию всех IP но тех, кого нет - отправлять специальный IPPOOL а-ля 192.168.99.0/24

потом считаешь и смотришь

/ISG.pl | grep 192.168.99.

Share this post


Link to post
Share on other sites

А почему бы просто не добавлять в ipset SRC адреса всех проходящих от клиента пакетов?

 

iptables -j SET --add-set IPSET_LIST src

 

одна строчка в iptables - быстро и без дополнительных прибамбасов..

Share this post


Link to post
Share on other sites

Оказывается все проще:

 

modprobe ipt_ISG tg_deny_action=1

 

И модуль не дропает трафик, делая попытки авторизации в радиусе. Именно то, чего и хотелось.

Всем спасибо за участие!

Share this post


Link to post
Share on other sites

Может кому будет интересно, https://bitbucket.org/sysoleg/lisg/pull-requests/2/master/diff добрый человек поправил модуль, что бы он собирался на ядрах выше 3.17.

 

Протестировал у себя в тестовой лабе, на свежем 4.0.5-gentoo ядре - пока работает без нареканий.

Edited by tokra

Share this post


Link to post
Share on other sites

Если тема еще жива, может кто подскажет.

 

На разных серверах с разными процессорами и 10G сетевыми картами одно и то же.

Когда нагрузка доходит до 6-7G процессоры лавинообразно съедаются lisg.

То есть практически при увеличении с 6 до 7 на 50%.

На старых серверах 2 xeon 4-х ядерные, на новых 2 xeon 8 ядерные.

Результат тот же.

ubuntu 12.04 lts и ubuntu 14.04 lts

Edited by andrew_G

Share this post


Link to post
Share on other sites

Если тема еще жива, может кто подскажет.

 

На разных серверах с разными процессорами и 10G сетевыми картами одно и то же.

Когда нагрузка доходит до 6-7G процессоры лавинообразно съедаются lisg.

То есть практически при увеличении с 6 до 7 на 50%.

На старых серверах 2 xeon 4-х ядерные, на новых 2 xeon 8 ядерные.

Результат тот же.

ubuntu 12.04 lts и ubuntu 14.04 lts

Беда архитектуры модуля, предположительно что-то с куском старта/таймаута сессии.

Честно пытались отловить, но в итоге получился ipt_ratelimit :)

Share this post


Link to post
Share on other sites

в итоге получился ipt_ratelimit :)

Без радиуса?

По-моему вся прелесть lISG именно в нём.

Share this post


Link to post
Share on other sites

А как сделать динамическое изменение скорости через CoA для сервиса? Например, доступ в локалку на 100Мбит, и скорость в интернет, которая ночью не ограничивается?

Пробовали Cisco-Account-Info = QU;cir;normal burst;D;cir;normal burst, но для локалки завели сервис для контроля доступа и из-за этого скорость на основной сессии ни на что не влияет, согласно докам. Как вы с этим боролись?

Edited by Lupin

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now