Meine iptables-Umleitungsregel hat keine Auswirkung

2

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.Bildbeschreibung hier eingeben

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.
  1. 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.

  2. Auf dem Router

    #cat /proc/sys/net/ipv4/ip_forward
    1
    

was zeigt, dass die Weiterleitung aktiviert ist.

  1. Wenn iptables -t nat -v -n -Lich 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.

  1. Ich iptables -v -n -Lstarte 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 benutze iptables --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.

Akr
quelle

Antworten:

0

Grundsätzlich müssen Sie zuerst die Dinge vereinfachen und Anleitungen ausprobieren, bei denen Sie sich ziemlich sicher sind. Und gesunder Menschenverstand. Ich kann mit iptablesFragen sehr gut umgehen, da ich einmal 3 Tage lang daran gearbeitet habe und Konzepte schnell verschwommen sind, es sei denn, Sie haben ein Setup, das richtig funktioniert.

Damit ssh funktioniert, benötigen Sie dies nur, wenn die Standardrichtlinie ACCEPT lautet:

iptables -t nat -A PREROUTING -d 101.101.101.101 -p tcp --dport 25122 -j DNAT --to-destination 10.0.1.251:22

Auf Server-Regeln würde ich Objekte jedoch lieber nicht nach IP-Adresse, sondern nach Schnittstellenname unterscheiden. Angenommen, die externe Schnittstelle ist eth4und die Schnittstelle, die Ihrem Netzwerk zugewandt ist, ist, eth1dann sollte dies funktionieren und ausreichen:

iptables -t nat -I PREROUTING -p tcp -i eth4 --dport 25122 -j DNAT --to-destination 10.0.1.251:22
iptables -A FORWARD -i eth4 -o eth1 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth4 -p tcp -j ACCEPT

Die letzten beiden Regeln werden benötigt, wenn die FORWARD-Kettenrichtlinie nicht ACCEPT ist.

Sie können Schnittstellen Liste wie folgt: ip addr list.

Denken Sie vor der Entscheidung, ob Änderungen nicht funktionieren, daran, die Firewall auf den Standardstatus zurückzusetzen, in dem sie sein soll, bevor Sie die wichtigen Änderungen anwenden. Zum Beispiel Ketten spülen und iptable service neu starten. Und Sie haben die Weiterleitung im Kernel bereits aktiviert.

Viel Glück!

r0berts
quelle
Zunächst vielen Dank für die ausführliche Antwort. Ich denke jedoch, dass die beiden SNAT-Regeln auch notwendig sind, da ich sicherstellen muss, dass die an Host B weitergeleiteten Pakete vom Router zurückkommen. Dies gilt nur, wenn Host B den Router als Standard-Gateway festgelegt hat, während B dies ist im lokalen Netzwerk. Auf jeden Fall werde ich Ihre Ratschläge Tage später versuchen.
Akr
Nein, nicht so, da Host B denkt, dass er SSH mit dem Router ausführt. Host B muss nicht wissen, dass die Pakete zwischen Router und A
r0berts