
Вики nftables естьпример, но мне кажется это не помогает.
На странице сказано, что это должно работать с ядра 5.3, но когда я пробую выполнить точные команды со страницы, появляется сообщение «ошибка протокола»:
# nft add table bridge filter
# nft add chain bridge filter forward '{type filter hook forward priority 0; }'
# nft add rule bridge filter forward ct state established,related accept
Error: Could not process rule: Protocol error
add rule bridge filter forward ct state established,related accept
^^^^^^^^
- Аппаратное обеспечение: Raspberry Pi 4
- Ядро: 5.10.92-v8+
nft --version
:v0.9.8 (E.D.S.)
Я также попробовал после сборки последней версии nftables и ее библиотек:
- nftables 1.0.1
- libnftnl 1.2.1
- libmnl-1.0.4
Я подтвердил ldd nft
, что действительно использовались новые версии библиотек, но сообщение об ошибке все равно то же самое.
решение1
Эта функция доступна начиная с ядра 5.3, но Raspberry решила не компилировать ее в поставляемые ядра.
Поскольку мне не удалось найти файл конфигурации ядра (обычно присутствует как /boot/config-xxx
или из ядра), я извлек установочный образ, чтобы проверить это напрямую. Вот сравнение доступных модулей в ядре Raspbian (изzip-изображениескачано с официального сайта):
$ ls -1 lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nft_reject_bridge.ko
противпохожее ядро Debianдля той же архитектуры:
$ ls -1 lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_conntrack_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_meta_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_reject_bridge.ko
Как можно увидеть, необходимая поддержка Netfilter, предоставляемая nf_conntrack_bridge
дляconntrackчасть и nft_meta_bridge
дляnftablesчасть недоступна (и нет, она также не встроена: grep bridge lib/modules/5.10.92-v8+/modules.builtin
не имеет результата) в ядре по умолчанию ОС RaspberryPi. Ядро с этими функциями также должно быть собрано:
Вполне возможно, что отсутствуют и другие редкие функции. Например, модулиnft_synproxy
иnft_xfrm
(для фильтрации IPSec) также отсутствуют.
Между тем, можно по-прежнему использовать устаревший метод (который предполагается удалить после достижения паритета характеристик), что также влияетnftablesк лучшему или к худшему:br_netfilter
модуль ядра. Но роднойnftablesне хватает конкретной поддержки для этого метода, так как он разработан для использования нового метода ядра 5.3. В частности, у него нет эквивалента дляiptables'-m physdev --physdev-is-bridged
.