nftables_notes update

This commit is contained in:
bol-van 2024-02-22 10:56:16 +03:00
parent b751c4daa4
commit 6d35d6f045

View File

@ -3,9 +3,9 @@ nftables - это технология, пришедшая на замену ipt
Весь код из разрозненных, но похожих компонент, собрали в одно целое с единым синтаксисом.
Добавили различные конструкции языка, позволяющие писать правила более лаконично, не повторяя одни и те же команды с небольшими различиями.
На nftables можно сделать почти все, что можно было сделать на iptables. Есть то, что можно сделать на nftables, но нельзя на iptables.
Удобно, красиво.
Есть и наоборот.
К сожалению, не обошлось и без боли. 10 лет развития nftables казалось бы должны были вылизать все. Но не тут то было.
К сожалению, не обошлось и без боли.
Главная боль N1. Очень серьезная, актуальная для openwrt, и решения не видно.
@ -29,13 +29,7 @@ Swap позволяет немного сгладить проблему, но
Если памяти становится 200 Mb, то swap уже не спасет. Все равно вызывается OOM killer, заодно убивая и другие процессы, кроме nft,
а это уже совсем плохо. Может быть убито что-то важное.
Боль N2, но не такая смертельная.
10 лет вылизывания кода, но при загоне больших листов в set-ы то и дело при вызовах nft list происходят seg faults.
Например, падать может nft -t list ruleset, но nft -t list table inet zapret может не падать.
Вроде это не влияет на функционал, но все равно создается неудобство.
Боль N3, не смертельная, но тоже не айс.
Боль N2, не смертельная, но тоже не айс.
Какие-то нерациональные алгоритмы разбора таблиц в nft.
Например, есть 1 большой set на 100000 элементов и 1 маленький на 2 элемента.
@ -43,13 +37,13 @@ Swap позволяет немного сгладить проблему, но
Что он делает за это время ? Тащит из ядра огромный блоб, в котором все в куче, и разбирает его, чтобы выделить искомую мелочь ?
В какой-то мере удается это сгладить, обьединяя несколько команд в единый скрипт.
Боль N4
Боль N3
Все версии nft вплоть до 1.0.1 имеют баг, который не разрешает названия интерфейсов в кавычках в
определении flowtable. Без кавычек нельзя вставить интерфейсы , имя которых начинается с цифры.
OpenWRT решает эту проблему отдельным патчем в snapshot версии, но на традиционных системах и в openwrt 21.x- его нет.
Почему бы не наплевать на интерфейсы, начинающиеся с цифры ? Потому что для openwrt 6to4-6to4, 6in4-he-net - обычное явление.
На текущий момент этой проблемы в openwrt уже нет, если использовать актуальную версию.
Плюс N1, главный
@ -91,9 +85,6 @@ zapret может работать в другой таблице и не тро
Выводы
Честно говоря, лучше бы openwrt оставался на iptables.
Пусть они и старые, c недостатками, но как говорится ложка дегтя портит цистерну меда.
nftables - именно тот случай. Все хорошо, но все плохо из-за досадной особенности.
Без больших листов все почти прекрасно. Но большие ip листы убивают все. Не для домашних это роутеров.
А ipset-ы к nftables не прикрутить.
Делать нечего. Openwrt отошел от iptables. С этим придется как-то жить.
@ -102,3 +93,6 @@ iptables можно задействовать на любой openwrt верс
Если используется fw3, применяется старый механизм интеграции в fw3.
Если он не используется, то правилами iptables управляем как в традиционных linux системах - то есть с возможностью
запуска и остановки, а скрипт запуска вносит в том числе и правила iptables.
На новых openwrt возможно снести nftables и firewall4 и установить firewall3 и iptables.
Если вам никак без больших ip листов на слабой системе, это может быть единственным спасением.