nftables: Как получить поведение BROUTING, как у ebtables legacy?

nftables: Как получить поведение BROUTING, как у ebtables legacy?

В 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)

Связанный контент