Ich verwende diesen Befehl, um NAT auf meinem VM-Container einzurichten:
iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}
mit
- MAIN_IP ist die globale IP des Hauptservers
- SUBNET sind die ersten drei Zahlen meines VM-Subnetzes, z. B. „192.168.1“.
- $2 ist der Port, den ich weiterleiten möchte
- $3 ist das letzte Subnetzsegment, z. B. 20
Dies funktioniert gut für reines NATing.
Aber heute wollte ich einen DNAT für den SSH-Port deklarieren, also habe ich $2 auf 5022 und $3 auf 20:22 gesetzt, was der Übersichtlichkeit halber zu folgender Zeile führte:
iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22
Das hier funktioniert jedoch nicht: Verbindungen laufen ab, wenn ich versuche, per SSH auf die VM zuzugreifen. Beachten Sie, dass sie nicht ablaufen, wenn ich kein NAT verwende, also funktioniert es einwandfrei. Nur über NAT funktioniert es nicht.ssh [email protected]
UFW ist auf dem Containerserver nicht aktiviert. Es hört praktisch nichts ab, also muss nichts geschlossen werden – hoffe ich zumindest.
Ich gehe davon aus, dass die DNAT-Regel korrekt ist. Wie kann ich also feststellen, was mich blockiert?
Bearbeiten: Ausgabe der NAT-Tabelle:
#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere my-server tcp dpt:2113 to:192.168.1.35
DNAT tcp -- anywhere my-server tcp dpt:2115 to:192.168.1.35
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
Bearbeitung 2: Ich löse das Problem vorübergehend, indem ich VM sshd auf mehreren Ports abhören lasse. Auf diese Weise funktioniert NAT einwandfrei.