.png)
Auf meiner Linux-Box 10.20.1.1
habe ich zwei UDP-Apps, die jeweils an Port 46000 (App A)
und gebunden sind 36000(App B)
. Die Apps kommunizieren mit zwei UDP-Servern, die jeweils als 10.10.1.1:36000 (Srv X)
und gebunden sind 10.10.1.2:36000 (Srv Y)
.
Wenn ich das Paket versende, muss ich immer den UDP-Quellport 36000 verwenden. Das Paket auf der Leitung wird immer 36000 - 36000
die Quell- und Zielports verwenden.
Meine iptables-Regeln sind wie unten. Ich möchte DNAT
das eingehende Paket von Srv X vom Port 36000 to 46000
so senden, dass App A es empfängt.
*nat
-A PREROUTING -s 10.10.1.1/32 -p udp --dport 36000 -j DNAT --to-destination :46000
*raw
-A PREROUTING -p udp --dport 36000 -j CT --notrack
-A PREROUTING -p udp -j ACCEPT
-A OUTPUT -p udp --dport 36000 -j CT --notrack
-A OUTPUT -p udp -j ACCEPT
*filter
-A INPUT -p udp -m udp --dport 36000 -j ACCEPT --> rule 1
-A INPUT -p udp -m udp --dport 46000 -j ACCEPT --> rule 2
-A OUTPUT -p udp -m udp --dport 36000 -j ACCEPT -> rule 3
Wenn ich ein Paket von aussende, App A to Srv X
läuft es einwandfrei. Es gibt keinen Conntrack-Eintrag für die Ein- /proc/net/ip_conntrack
und Ausgangspaketübereinstimmungen rule 3
. Wenn die Antwort von kommt Srv X to App A
, durchläuft das Paket die Rohtabelle, wird aber DOES NOT
durchlaufen DNAT
und springt direkt zur Filtertabellenregel 1. Das bedeutet, dass die Antwort von Srv X an meine Box geht, aber an App B statt an App A.
Fragen:
Die RAW-Tabelle zeigt an, dass es kein gibt
CONNTRACK
. Das obige Verhalten zeigt jedoch an, dass das erste PaketApp A -> Srv X
mit Quell- und Zielport36000 - 36000
von einem Modul irgendwo verfolgt wird. DaherSrv X -> App A
scheint die Antwort von keinem DNAT unterzogen zu werden. Wie vermeide ich diesCONNTRACK
?Wie kann sichergestellt werden, dass jedes eingehende Paket von Srv X mit Zielport 36000 immer einem DNAT unterzogen wird?
Vielen Dank im Voraus, Telex
Antwort1
Durch einen Blick auf dieNetfilter-Dokumentation, es wurde gesagt, dass„Verbindungsverfolgung ist für NAT von grundlegender Bedeutung“, daher können Sie DNAT nicht haben, ohne es zu aktivierenKontakt.