В ebtables BROUTING
цепочка в broute
таблице имеет специальные поведения для ACCEPT
и DROP
действия: ACCEPT
означает мост/путь вперед и DROP
означает маршрутизацию/входной путь. Например, чтобы заставить все пакеты, не относящиеся к IPv6, проходить через NAT, с правильными настройками iptables, в то время как пакеты IPv6 напрямую мостятся, можно сделать:
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
Как добиться такого поведения в nftables?
Несколько постов и старыйстраницы руководства nftablesпредположил, что это не реализовано. Также естьтема в списке рассылки nftablesна который в конечном итоге не было получено по-настоящему внятного ответа.
Это все еще не реализовано? Если да, есть ли обходной путь или мне придется использовать ebtables-legacy? Спасибо.
решение1
Он все еще не реализован?
Да, но все еще только в течение нескольких недель (ядро Linux 6.4 должно быть выпущено в конце 2023-06 или в начале 2023-07). Принятое предложение (после нескольких итераций) для использованияброутсnftablesв netfilter-devel из2023-02-24.
ОБНОВЛЯТЬ: теперь это официально реализовано для nft
(nftables) >= 1.0.8 и даже ebtables-nft
>= 1.8.10, см. обновление в конце этого ответа.
Это былодобавлено в еще не выпущенноеЯдро Linux 6.426.04.2023:
Сетевой фильтр:
- Добавить поддержку 'brouting' nf_tables, чтобы принудительно маршрутизировать пакет вместо мостового соединения
и находится в стадии подготовки к еще не выпущенному следующемуnftablesверсия, вероятно 1.0.8:
мета: введение поддержки мета-броута
Может использоваться в хуке предварительной маршрутизации моста для перенаправления пакета в стек IP для маршрутизации.
Это замена
ebtables -t broute
функциональности.
Нет никакихebtablesособенность использования accept/drop со специальнымброуттип. Используется путем установкиброутфлаг в правиле вмосттип семьифильтрипредварительная маршрутизациякрюк:
meta broute set 1
Поэтому вместо (использования ebtables-legacy
, поскольку ebtables-nft
отсутствует поддержкаброутдо не давнего времени):
ebtables-legacy -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
вместо этого можно сделать что-то вроде:
table bridge b {
chain prerouting {
type filter hook prerouting priority -250; policy accept;
ether type != ip6 iifname wan meta broute set 1 accept
}
}
Кроме того, ebtables-nft
(отправлено через iptables
источники дляnftablesбэкэнд-вариант), также получилэквивалентный патч для еще не выпущенной следующей версии:
ebtables-nft: добавить эмуляцию таблицы broute
Используйте new
meta broute set 1
для эмуляции-t broute
. Если-t broute
задано, автоматически переводить-j DROP
воmeta broute set 1 accept
внутренний.
что позволит использовать ebtables-nft
вместо ebtables-legacy
(все еще с ядром >= 6.4) принимать как есть:
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
ОБНОВЛЯТЬ
как написано выше, ядро6.4 выпущен около 25.06.2023получил функцию
как написано выше,nftables1.0.8 выпущен примерно 14 июля 2023 г.теперь поддерживает broute:
поддержка broute для замыкания логики моста с помощью перехвата предварительной маршрутизации моста и передачи пакетов в локальный IP-стек.
... meta broute set 1
iptables: 1.8.10 выпущен около 2023-10-10(также предоставляя двоичныйebtables) теперь поддерживает broute с
ebtables-nft
:- Поддержка таблиц Броута в ebtables-nft
Начиная с этой версии, следующая команда будет выполнена успешно:
ebtables-nft -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
Написанное выше
DROP
на самом деле соответствуетbroute set 1 accept
отображению ниже (отображение обычно допустимо, изменение обычно недопустимо):# nft list ruleset table bridge broute { chain BROUTING { type filter hook prerouting priority -2147483648; policy accept; iifname "wan" ether type != ip6 counter packets 0 bytes 0 meta broute set 1 accept } }
(приоритет -2147483648 может показаться странным, но это то же самоеприоритет хука, используемый
ebtables-legacy
:NF_BR_PRI_FIRST
)