So DNAT lokale Pakete

Sep 19 2020

Ich habe ein Programm, das UDP-Pakete an 192.168.0.2:12345 sendet, Pakete an Port 54321 empfängt und die IP-Adresse 192.168.0.1 verwendet. Ich möchte, dass Pakete mit demselben Port an 10.10.10.10 gesendet werden, da dieses Programm und der Remote-Server nur 12345 und 54321 akzeptieren. Dies ist topo:

Zuerst verwende ich iptables prerouting:

iptables -t nat -A PREROUTING -s 192.168.0.1 -p udp --dport 12345 -j DNAT --to 10.10.10.10:12345

Aber es funktioniert nicht, ich habe LOG verwendet und festgestellt, dass das nat nie passiert ist (192.168.0.1 & 192.168.0.2 benötigen kein Routing?):

iptables -t nat -A PREROUTING -s 192.168.0.1 -p udp --dport 12345 -j LOG

Dann finde ich diese Pakete in der INPUT-Kette:

iptables -A INPUT -s 192.168.0.1 -p udp --dport 12345 -j LOG

Gibt es eine Möglichkeit, DNAT zu verwenden, wenn ich diese Pakete nur im INPUT sehen kann?

Übrigens kann ich socat verwenden, um diese Pakete umzuleiten, aber die Ports auf 12345 und 54321 auf der Serverseite können nicht gesperrt werden:

socat UDP4-RECVFROM:192.168.0.1,fork UDP4-SENDTO:10.10.10.10:12345
socat UDP4-RECVFROM:10.10.10.10,fork UDP4-SENDTO:192.168.0.1:54321

Einige Updates von meiner Seite, ich kann Phydev verwenden, um Pakete jetzt zu nat:

iptables -t nat -A PREROUTING -m physdev --physdev-in tap0 -s 192.168.0.1 -p udp --dport 12345 -j DNAT --to 10.10.10.10:12345

Von tcpdump von eth0 kann ich Pakete von 192.168.0.1 bis 10.10.10.10 sehen: (192.168.0.1 kann nicht in meinem Netzwerk verwendet werden)

tcpdump -n -i eth0 host 10.10.10.10 
12:36:22.250548 IP 192.168.0.1.54321 > 10.10.10.10.12345: UDP, length 16

Ich kann diese Pakete jedoch nicht vom 10.10.10.10-Server sehen ... Dann starte ich tcpdump auf dem Remote-Server. Ich kann diese Pakete sehen:

21:55:44.980988 IP 192.168.0.1.54321 > 10.10.10.10.12345: UDP, length 16

Aber 192.168.0.1 kann nicht in meinem Labornetzwerk verwendet werden, es wird gelöscht.

Das Übrige wird also: Wie man ein Paket DNAT und dann dasselbe Paket SNAT ...

Antworten

1 codefarmer Sep 24 2020 at 17:09

Ich habe dieses Problem mit dem Befehl run behoben

conntrack -F

Nach all meinen iptables Regeln. Es ist nicht erforderlich, --phydev zu verwenden, sondern nur die folgenden zwei Regeln zu verwenden:

iptables -t nat -A PREROUTING -s 192.168.0.1 -d 192.168.0.2 -p udp --dport 12345 -j DNAT --to 10.10.10.10:12345
iptables -t nat -A POSTROUTING -d 10.10.10.10/24 -o eth0 -j SNAT --to-source 10.10.10.5
Tomek Sep 20 2020 at 16:00

Um DNAT von lokal generierten Paketen durchzuführen, sollte die OUTPUT-Kette der NAT-Tabelle verwendet werden, nicht die PREROUTING-Kette.

Ihre Regel sollte wahrscheinlich aussehen:

iptables -t nat -A OUTPUT -s 192.168.0.1 -p udp --dport 12345 -j DNAT --to 10.10.10.10:12345