nftables: Wie erhält man ein BROUTING-Verhalten wie beim alten ebtables?

nftables: Wie erhält man ein BROUTING-Verhalten wie beim alten ebtables?

In ebtables hat BROUTINGdie Kette in brouteder Tabelle spezielle Verhaltensweisen ACCEPTund DROPAktionen: ACCEPTbedeutet Überbrückung/Weiterleitungspfad und DROPbedeutet Routing/Eingabepfad. Um beispielsweise alle Nicht-IPv6-Pakete zu zwingen, durch NAT zu gehen, könnte man mit den richtigen iptables-Einstellungen Folgendes tun:

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

Wie kann ich dieses Verhalten in Nftables erhalten?

Mehrere Beiträge und die altennftables-Manpagesvorgeschlagen, dass dies nicht implementiert ist. Außerdem gibt es eineThread in der nftables-Mailinglistewas letztlich keine wirklich gültige Antwort erhielt.

Ist es noch nicht implementiert? Wenn ja, gibt es eine Problemumgehung oder muss ich ebtables-legacy verwenden? Danke.

Antwort1

Ist es noch nicht implementiert?

Ja, aber immer noch nur für ein paar Wochen (Linux-Kernel 6.4 sollte Ende 2023-06 oder Anfang 2023-07 veröffentlicht werden). Der akzeptierte Vorschlag (nach einigen Iterationen) für die VerwendungbrüttemitNftablesin netfilter-devel ist von24.02.2023.

AKTUALISIEREN: es ist jetzt offiziell implementiert für nft(Nftables) >= 1.0.8 und sogar ebtables-nft>= 1.8.10, siehe das Update am Ende dieser Antwort.

Es ist gewesenhinzugefügt in noch nicht veröffentlichtenLinux-Kernel 6.4am 26.04.2023:

Netzfilter:

  • Fügen Sie nf_tables 'brouting'-Unterstützung hinzu, um das Routing eines Pakets statt der Überbrückung zu erzwingen.

und ist in der Pipeline für das noch nicht veröffentlichte nächsteNftablesVersion, wahrscheinlich 1.0.8:

Meta: Einführung der Meta-Broute-Unterstützung

Kann im Bridge-Prerouting-Hook verwendet werden, um ein Paket zum Routing an den IP-Stack umzuleiten.

Dies ist ein Ersatz für ebtables -t brouteFunktionalität.

Da ist keinebtabellenBesonderheit bei der Verwendung von accept/drop mit einem speziellenbrütteTyp. Es wird verwendet, indem derbrütteFlag in einer Regel imBrückeFamilientypFilterUndVorab-RoutingHaken:

meta broute set 1

Anstatt also (zu verwenden ebtables-legacy, da ebtables-nftdie Unterstützung für fehltebrüttebis vor kurzem):

ebtables-legacy -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

man macht stattdessen so etwas wie:

table bridge b {
    chain prerouting {
        type filter hook prerouting priority -250; policy accept;
        ether type != ip6 iifname wan meta broute set 1 accept
    }
}

Darüber hinaus ebtables-nft(durch iptablesQuellen für dieNftablesBackend-Variante), hat auchein gleichwertiger Patch für die noch zu veröffentlichende nächste Version:

ebtables-nft: Broute-Tabellenemulation hinzufügen

Verwenden Sie new meta broute set 1zum Emulieren -t broute. Wenn -t brouteangegeben, automatisch intern -j DROPin übersetzen meta broute set 1 accept .

Dadurch kann ebtables-nftanstelle ebtables-legacyder folgenden Version (immer noch mit Kernel >= 6.4) Folgendes verwendet werden:

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

AKTUALISIEREN

  • wie oben geschrieben, Kernel6.4 veröffentlicht um den 25.06.2023erhielt die Funktion

  • wie oben geschrieben,Nftables1.0.8 veröffentlicht um den 14.07.2023unterstützt jetzt broute:

    • Broute-Unterstützung zum Kurzschließen der Bridge-Logik vom Bridge-Prerouting-Hook und Weiterleiten von Paketen an den lokalen IP-Stack.

      ... meta broute set 1
      
  • iptables: 1.8.10 veröffentlicht um den 10.10.2023(bietet auch die binäreebtabellen) unterstützt jetzt broute mit ebtables-nft:

    • Broute-Tabellenunterstützung in ebtables-nft

    Ab dieser Version ist der folgende Befehl erfolgreich:

    ebtables-nft -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
    

    Was oben geschrieben steht, DROPwird tatsächlich so dargestellt broute set 1 acceptwie unten wiedergegeben (Anzeigen ist normalerweise ok, Ändern ist normalerweise nicht ok):

    # 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
      }
    }
    

    (Priorität -2147483648 sieht vielleicht komisch aus, aber das ist das gleicheHook-Priorität verwendet vonebtables-legacy:NF_BR_PRI_FIRST)

verwandte Informationen