In ebtables hat BROUTING
die Kette in broute
der Tabelle spezielle Verhaltensweisen ACCEPT
und DROP
Aktionen: ACCEPT
bedeutet Überbrückung/Weiterleitungspfad und DROP
bedeutet 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 broute
Funktionalitä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-nft
die 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 iptables
Quellen 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 1
zum Emulieren-t broute
. Wenn-t broute
angegeben, automatisch intern-j DROP
in übersetzenmeta broute set 1 accept
.
Dadurch kann ebtables-nft
anstelle ebtables-legacy
der 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,
DROP
wird tatsächlich so dargestelltbroute set 1 accept
wie 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 von
ebtables-legacy
:NF_BR_PRI_FIRST
)