nickD Опубликовано 17 февраля, 2022 · Жалоба Ну 2к абонентов это примерно 2gbps, а вот кто 10gbps прогонял и какая загрузка cpu. Есть большие подозрения что ipt-ratelimit будет много производительней. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 19 февраля, 2022 (изменено) · Жалоба On 2/17/2022 at 7:40 PM, nickD said: а вот кто 10gbps ip_ratelimit не работает над 4gbps. Изменено 19 февраля, 2022 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nickD Опубликовано 20 февраля, 2022 · Жалоба 11 часов назад, h3ll1 сказал: ip_ratelimit не работает над 4gbps. вы имеете в виду выставить ограничение на одного пользователя в 4gbps? У меня через ratelimit проходит 16gbps и прописано около 10к пользователей с тарифами до 300 mbps все прекрасно работает. И у меня есть большие подозрения что nftables такое не потянет ибо писался не для brass в отличии от ratelimit. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 24 февраля, 2022 · Жалоба В 20.02.2022 в 18:00, nickD сказал: вы имеете в виду выставить ограничение на одного пользователя в 4gbps? У меня через ratelimit проходит 16gbps и прописано около 10к пользователей с тарифами до 300 mbps все прекрасно работает. И у меня есть большие подозрения что nftables такое не потянет ибо писался не для brass в отличии от ratelimit. 16 гигабит пока вряд ли сможем организовать, но сейчас в процессе внедрения на месте, где прогоняется 4-6 гигабит. Один нюанс уже вылез - добавлять через add chain и add rule тысячи правил и чейнов не самая удачная идея. Всё ОЧЕНЬ неторопливо. Потому надо рисовать сразу цельный файл рулесета с чейнами и содержимым vmap. Тогда компиляция и вливание байткода в ядро происходят за десятые доли секунды. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 1 марта, 2022 · Жалоба В 20.02.2022 в 18:00, nickD сказал: вы имеете в виду выставить ограничение на одного пользователя в 4gbps? У меня через ratelimit проходит 16gbps и прописано около 10к пользователей с тарифами до 300 mbps все прекрасно работает. И у меня есть большие подозрения что nftables такое не потянет ибо писался не для brass в отличии от ratelimit. Что можно сказать после некоторого времени использования. Таки при нагрузке на 4-5 гигабитах при ~20 тыс чейнов и ~40 тыс элементов в vmap разницы с модульным ratelimit не замечено. Но только в рамках полисинга. При этом решение на nftables оказалось в целом на порядок менее требовальным к ресурсам процессора, чем связка iptables + ipset + ipt_ratelimit. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
911 Опубликовано 1 марта, 2022 · Жалоба можете поделится конфигами? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 1 марта, 2022 · Жалоба Там всё достаточно просто: table inet mangle { map poly_u_4 { type ipv4_addr : verdict flags interval counter } map poly_d_4 { type ipv4_addr : verdict flags interval counter } map poly_u_6 { type ipv6_addr : verdict flags interval counter } map poly_d_6 { type ipv6_addr : verdict flags interval counter } chain POSTROUTING { type filter hook postrouting priority mangle; policy accept; ip saddr vmap @poly_u_4 ip6 saddr vmap @poly_u_6 ip daddr vmap @poly_d_4 ip6 daddr vmap @poly_d_6 } } таблицы набиваем элементами вида: table inet mangle { map poly_d_4 { type ipv4_addr : verdict flags interval counter elements = { 100.64.0.1/32 : goto policer_dl_51776, } } } Сама нарезка в соотвествующем чейне table inet mangle { chain policer_dl_51776 { limit rate over 12500 kbytes/second burst 2500 kbytes counter drop } } И как упомянул, массово заливать в ядро тысячи правил и элементов через nft add будет грусть-печаль, поэтому приходится для компиляции подготавливать полноценный структурированный конфиг, а не набор команд на исполнение. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 2 марта, 2022 (изменено) · Жалоба On 3/1/2022 at 9:24 PM, taf_321 said: полноценный структурированный конфиг Так точно - для самого table inet mangle а не для всего конфига. Также думаю, что если убрать counter (он же только дла дебага) будет еще лучше. Еще если там НАТ, ВПН итд, надо развести download -> postrouting hook и upload -> prerouting hook. Изменено 2 марта, 2022 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 3 марта, 2022 · Жалоба В 02.03.2022 в 21:43, h3ll1 сказал: Также думаю, что если убрать counter (он же только дла дебага) будет еще лучше. Да, надо убрать на боевом применении. Только убирать counter из чейна на мой взгляд не стоит. Все-таки регулярно бывает ситуация, когда надо знать - потери пакетов от того что они просто теряются, или это работа полисера. В 02.03.2022 в 21:43, h3ll1 сказал: Еще если там НАТ, ВПН итд, надо развести download -> postrouting hook и upload -> prerouting hook. Да. Запихал все в postrouting по старой привычке, когда настоящий шейпер работает исключительно для исходящего трафика. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Стич Опубликовано 3 марта, 2022 (изменено) · Жалоба @taf_321 @h3ll1 Может заведёте отдельную темку и не будете офтопить здесь. Изменено 3 марта, 2022 пользователем Стич Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 3 марта, 2022 (изменено) · Жалоба On 3/3/2022 at 10:29 AM, Стич said: офтоп Вижу что потеряли и стеряли все. ( github ). Изменено 3 марта, 2022 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jimbarello Опубликовано 10 марта, 2022 · Жалоба Доброго времени суток, пришлось обновить ядро с 5.10.0 до 5.16.13, так как столкнулся с проблемой ipt_NETFLOW, выполнил перезагрузку, но модуль xt_ratelimit не заработал modinfo xt_ratelimit: filename: /lib/modules/5.16.13/extra/xt_ratelimit.ko alias: ip6t_ratelimit alias: ipt_ratelimit version: 0.3.2 license: GPL description: iptables ratelimit policer mt module author: <abc@openwall.com> srcversion: 44676FAD926FD7D68D1EF1A depends: x_tables retpoline: Y name: xt_ratelimit vermagic: 5.10.0-11-amd64 SMP mod_unload modversions parm: hashsize:default size of hash table used to look up IPs (uint) dmesg: [ 50.940314] xt_ratelimit: disagrees about version of symbol module_layout modprobe xt_ratelimit modprobe: ERROR: could not insert 'xt_ratelimit': Exec format error Подскажите пожалуйста как фиксануть, заранее благодарен за ответы. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
passer Опубликовано 10 марта, 2022 · Жалоба модуль надо пересобирать после смены ядра Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jimbarello Опубликовано 10 марта, 2022 · Жалоба On 3/10/2022 at 11:49 AM, passer said: модуль надо пересобирать после смены ядра Повторяю установку заново, проблему не решает... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
passer Опубликовано 11 марта, 2022 · Жалоба Если модуль собран правильно, то вот такого быть не должно: filename: /lib/modules/5.16.13/extra/xt_ratelimit.ko vermagic: 5.10.0-11-amd64 SMP mod_unload modversions Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jimbarello Опубликовано 12 марта, 2022 · Жалоба On 3/11/2022 at 8:43 AM, passer said: Если модуль собран правильно, то вот такого быть не должно: filename: /lib/modules/5.16.13/extra/xt_ratelimit.ko vermagic: 5.10.0-11-amd64 SMP mod_unload modversions Я это понимаю, поэтому и спрашиваю как это исправить, выполняю все действия по установке: apt install module-assistant Reading package lists... Done Building dependency tree... Done Reading state information... Done module-assistant is already the newest version (0.11.10). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded m-a prepare Getting source for kernel version: 5.16.13 Kernel headers available in /lib/modules/5.16.13/build apt-get install build-essential Reading package lists... Done Building dependency tree... Done Reading state information... Done build-essential is already the newest version (12.9). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Done! make all install make: Nothing to be done for 'all'. make -C /lib/modules/5.16.13/build/ M=/root/install/ipt-ratelimit modules_install INSTALL_MOD_PATH= make[1]: Entering directory '/usr/src/linux-headers-5.16.13' arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support INSTALL /lib/modules/5.16.13/extra/xt_ratelimit.ko DEPMOD /lib/modules/5.16.13 Warning: modules_install: missing 'System.map' file. Skipping depmod. make[1]: Leaving directory '/usr/src/linux-headers-5.16.13' install -D libxt_ratelimit.so /usr/lib/x86_64-linux-gnu/xtables/libxt_ratelimit.so depmod Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pppoetest Опубликовано 12 марта, 2022 · Жалоба перенеси куда-нить файлик /lib/modules/5.16.13/extra/xt_ratelimit.ko и попробуй ещё раз make uninstall && make clean && make all install && depmod -a Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jimbarello Опубликовано 14 марта, 2022 · Жалоба On 3/12/2022 at 11:31 PM, pppoetest said: перенеси куда-нить файлик /lib/modules/5.16.13/extra/xt_ratelimit.ko и попробуй ещё раз make uninstall && make clean && make all install && depmod -a Огромное спасибо, это решило проблему! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
umike Опубликовано 15 сентября, 2022 · Жалоба если добавляешь несколько ip в одну строку: echo "+10.0.0.1,10.0.0.2,10.0.0.3 100500 > /proc/net/ipt_ratelimit/..." Может ли вывод cat /proc/net/ipt_ratelimit/... выдавать ip не в том порядке, в котором они были указаны при добавлении? Коллеги говорят что встречались с похожим, возможно было пару лет назад в предыдущих версиях? По исходникам сходу пока не смог разобраться :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vasya_petrovich Опубликовано 17 октября, 2022 (изменено) · Жалоба Интересно, а что будет, если сделать так: Цитата echo @+192.168.1.0/24 20000000 > /proc/net/ipt_ratelimit/test echo @+192.168.1.55/32 10000000 > /proc/net/ipt_ratelimit/test примет ли полисер эту конфигу? Если да, то как будет нарезаться скорость? Изменено 17 октября, 2022 пользователем vasya_petrovich Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 11 ноября, 2023 (изменено) · Жалоба Для тех кто ставит на kernel 6.1 с iptables v1.8.9 нужно патчить libxt_ratelimit.c. libxt_ratelimit.patch patch < libxt_ratelimit.patch https://github.com/aabc/ipt-ratelimit/issues/26 https://github.com/archlinux/aur/blob/a24ea0edbcdbb2ebe7256d5d3476a251457368ed/27.patch Изменено 11 ноября, 2023 пользователем 1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
r_cannibal Опубликовано 22 ноября, 2023 (изменено) · Жалоба Всем, привет! Тестирую модуль, нарезает скорость прекрасно! Решил сделать обвязку к билингу и нашел интересную багу (или фичу): Цитата root@n8:/tmp# echo +1.1.1.1,2.2.2.2,3.3.3.3 100000000 > /proc/net/ipt_ratelimit/rx0 root@n8:/tmp# cat /proc/net/ipt_ratelimit/rx0 |grep 1.1.1.1 1.1.1.1,2.2.2.2,3.3.3.3 cir 100000000 cbs 18750000 ebs 37500000; tc 0 te 0 last never; conf 0/0 0 bps, rej 0/0 root@n8:/tmp# echo -4.4.4.4,5.5.5.5,3.3.3.3 > /proc/net/ipt_ratelimit/rx0 root@n8:/tmp# cat /proc/net/ipt_ratelimit/rx0 |grep 1.1.1.1 root@n8:/tmp# Вопрос к разработчику, это нормально, когда добавляем и удаляем разные наборы ip? Изменено 22 ноября, 2023 пользователем r_cannibal Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sdy_moscow Опубликовано 22 ноября, 2023 · Жалоба 1 час назад, r_cannibal сказал: Всем, привет! Тестирую модуль, нарезает скорость прекрасно! Решил сделать обвязку к билингу и нашел интересную багу (или фичу): Вопрос к разработчику, это нормально, когда добавляем и удаляем разные наборы ip? Запомните, в linux ВСЁ И ВСЕГДА - НОРМАЛЬНО, а если для Вас что-то ненормально есть GPL и исходники. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dee Опубликовано 1 декабря, 2023 (изменено) · Жалоба собираю модуль на генту с ядром 6.1.28 и iptables 1.8.9 получаю : Скрытый текст make -C /lib/modules/6.1.28-gentoo/build/ M=/usr/src/ipt-ratelimit modules CC [M] /usr/src/ipt-ratelimit/xt_ratelimit.o /usr/src/ipt-ratelimit/xt_ratelimit.c: В функции «parse_rule»: /usr/src/ipt-ratelimit/xt_ratelimit.c:530:37: ошибка: этот оператор может провалиться [-Werror=implicit-fallthrough=] 530 | val = val / 8 + (val / 8 / 2); | ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:532:25: замечание: здесь 532 | case 1: | ^~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:534:37: ошибка: этот оператор может провалиться [-Werror=implicit-fallthrough=] 534 | val *= 2; | ~~~~^~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:536:25: замечание: здесь 536 | case 2: | ^~~~ cc1: все предупреждения считаются ошибками make[2]: *** [scripts/Makefile.build:250: /usr/src/ipt-ratelimit/xt_ratelimit.o] Ошибка 1 make[1]: *** [Makefile:2012: /usr/src/ipt-ratelimit] Ошибка 2 make: *** [Makefile:12: xt_ratelimit.ko] Ошибка 2 нашел выше патч (там одна строчка меняется (и патчил и ручками менял , без толку , получаю ): Скрытый текст make -C /lib/modules/6.1.28-gentoo/build/ M=/usr/src/ipt-ratelimit modules CC [M] /usr/src/ipt-ratelimit/xt_ratelimit.o /usr/src/ipt-ratelimit/xt_ratelimit.c: В функции «parse_rule»: /usr/src/ipt-ratelimit/xt_ratelimit.c:530:37: ошибка: этот оператор может провалиться [-Werror=implicit-fallthrough=] 530 | val = val / 8 + (val / 8 / 2); | ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:532:25: замечание: здесь 532 | case 1: | ^~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:534:37: ошибка: этот оператор может провалиться [-Werror=implicit-fallthrough=] 534 | val *= 2; | ~~~~^~~~ /usr/src/ipt-ratelimit/xt_ratelimit.c:536:25: замечание: здесь 536 | case 2: | ^~~~ cc1: все предупреждения считаются ошибками make[2]: *** [scripts/Makefile.build:250: /usr/src/ipt-ratelimit/xt_ratelimit.o] Ошибка 1 make[1]: *** [Makefile:2012: /usr/src/ipt-ratelimit] Ошибка 2 make: *** [Makefile:12: xt_ratelimit.ko] Ошибка 2 если игнорю ошибки , то сошка собирается , а вот кошка ни как ... не хочется ядро откатывать ... без этого блока собирается Скрытый текст //<----><------>switch (i) { //<----><------><------>case 0: //<----><------><------><------>ent->car.cir = val / (HZ * BITS_PER_BYTE); //<----><------><------><------>/* autoconfigure optimal parameters */ //<----><------><------><------>val = val / 8 + (val / 8 / 2); //<----><------><------><------>/* FALLTHROUGH */ //<----><------><------>case 1: //<----><------><------><------>ent->car.cbs = val; //<----><------><------><------>val *= 2; //<----><------><------><------>/* FALLTHROUGH */ //<----><------><------>case 2: //<----><------><------><------>ent->car.ebs = val; //<----><------>} но скорости без них даже не добавляются :) (точнее одни нули) да простят меня гуру С++ , но я вышел из положения так (заменил свитч простым иф) Скрытый текст if (i == 0){ ent->car.cir = val / (HZ * BITS_PER_BYTE); /* autoconfigure optimal parameters */ val = val / 8 + (val / 8 / 2); /* FALLTHROUGH */ } else if (i == 1){ ent->car.cbs = val; val *= 2; /* FALLTHROUGH */ } else if (i == 2){ ent->car.ebs = val; } Изменено 1 декабря, 2023 пользователем dee Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sdy_moscow Опубликовано 2 декабря, 2023 · Жалоба @dee Не могу сказать, что хотел, сделать исходный автор с помощью case - надо смотреть логику, но ваш вариант с if не эквивалентен, т.к. конструкции case являются точками входа, а не условиями, что-бы они стали эквивалентны вашему коду, в конце каждого блока case в исходниках должен был быть break; . Если исходный вариант верен, то ваш if должен выглядеть так: Скрытый текст if (i == 0){ ent->car.cir = val / (HZ * BITS_PER_BYTE); /* autoconfigure optimal parameters */ val = val / 8 + (val / 8 / 2); /* FALLTHROUGH */ } if (( i == 1) || (i == 0) ){ ent->car.cbs = val; val *= 2; /* FALLTHROUGH */ } if ((i == 2)||( i == 1) || (i == 0)){ ent->car.ebs = val; } а компилятор честно предупредил, что будет оптимизировать присвоения, это важно, если вы например работаете в многопоточном приложении, где кто-то может одновременно с вами читать значения. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...