Hier ist meine Netzwerktopologie: 101.101.101.101 und 202.202.202.202 sind globale IP-Adressen, während 10.0.1.1 und 10.0.1.251 lokale IP-Adressen sind. Host B ist mein Computer.
Ich kann SSH an den Router und dann SSH an Host A am Router. Jetzt möchte ich direkt zu A SSH, indem ich iptables auf dem Router einstelle, wie zum Beispiel: Weiterleiten aller Pakete mit dem Zielhost 101.101.101.101 und Port 25122 auf 10.0.1.251:22.
Die folgenden drei Anweisungen werden angewendet:
iptables -t nat -A PREROUTING -d 101.101.101.101 -p tcp -m tcp --dport 25122 -j DNAT --to-destination 10.0.1.251:22
iptables -t nat -A POSTROUTING -o br-lan -j SNAT --to-source 10.0.1.1
iptables -t nat -A POSTROUTING -o eth0.2 -j SNAT --to-source 101.101.101.101
Nach der Ausführung werden sie in der Liste von angezeigt iptables -t nat -v -n -L
. Die Routenregeln auf dem Router sind wie folgt:
#route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 101.101.101.254 0.0.0.0 UG 0 0 0 eth0.2
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
Nachdem all dies erledigt ist, kann ich immer noch kein SSH zu A durch "ssh 101.101.101.101 25122" auf B durchführen. Es schlägt einfach fehl mit:
Could not connect to '101.101.101.101' (port 25122): Connection failed.
Die Situation ist, dass die tcpdump-Tools nicht auf dem Router installiert werden können, um den Paketstatus dort anzuzeigen. Aber ich kann tcpdump auf Host A ausführen und bestätigen, dass kein Paket vom Router weitergeleitet wird.
Auf dem Router
#cat /proc/sys/net/ipv4/ip_forward 1
was zeigt, dass die Weiterleitung aktiviert ist.
Wenn
iptables -t nat -v -n -L
ich jedes Mal, nachdem ich ssh auf B ausgeführt habe, die PREROUTING-Pakete des Routers ändere, kann ich sie sehen.Chain PREROUTING (policy ACCEPT 39526 packets, 3345K bytes) pkts bytes target prot opt in out source destination 14 712 DNAT tcp -- * * 0.0.0.0/0 115.156.132.118 tcp dpt:25122 to:10.0.1.251:22
Die erste Zahl (14) erhöht sich jedes Mal, wenn ich ssh auf Port 25122 auf Host B ausführe. Dies zeigt an, dass die Pakete am Router angekommen, aber nicht weitergeleitet wurden.
- Ich
iptables -v -n -L
starte und stelle fest, dass die Standardrichtlinie der FORWARD-Kette DROP ist, während die INPUT- und OUTPUT-Kette ACCEPT sind. Ich stelle dann die FORWARD-Kette so ein, dass sie akzeptiert, indem ich benutzeiptables --policy FORWARD ACCEPT
. Das ssh schlägt jedoch weiterhin wie oben fehl.
So, hier bin ich. Kann dies ein Problem des Hardlimits des Routers sein, oder falsche Einstellungen der iptables. Wenn es das letztere ist, wie soll ich es einstellen, um mein Ziel zu erreichen?
Vielen Dank für Hinweise.