
Ich habe versucht, einen bestimmten IP-Port an einen bestimmten IP-Port auf einem Linux-Rechner weiterzuleiten. Ich habe iptables mit dem folgenden Befehl verwendet:
iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80
10.0.2.5 ist eine beliebige Adresse, die ich gewählt habe, um zu sehen, ob der Befehl funktioniert, und 69.31.21.42 ist die Adresse einer öffentlichen Website. Dann habe ich überprüft, ob die Weiterleitung funktioniert: Ich habe ausgeführt nmap -p 80 10.0.2.5
und ein positives Ergebnis erhalten. Soweit sehr gut. Dann habe ich jedoch versucht, auszuführen nmap -p 81 10.0.2.5
und auch ein positives Ergebnis erhalten. Das hatte ich nicht erwartet, da ich nur Port 80 weiterleiten wollte. Ich habe ausgeführt iptables -t nat -L
und festgestellt, dass tatsächlich der gesamte 10.0.2.5-Host auf 69.31.21.42:80 abgebildet ist:
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere ip-10-0-2-5.ec2.internal tcp dpt:http to:69.31.21.42:80
Was fehlt in meinem iptables-Befehl? Warum funktioniert es nicht --dport
?
Antwort1
Sie müssen POSTROUTING
eine Kette verwenden, um das zu tun, was Sie tun möchten.
iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80
Mann iptables
and POSTROUTING (for altering packets as they are about to go
out)
Antwort2
Zunächst einmal ist zu beachten, dass es nicht möglich ist, TCP IP:Port an einen anderen IP:Port weiterzuleiten. Dies ist nur mit UDP möglich und dafür gibt es ein separates Perl-Skript.
Ja, Sie können eine IP direkt an einen anderen Computer weiterleiten, nicht an einen bestimmten Port.