Ich habe einen Dienst, der auf 127.0.0.1 mit Port 2222 ausgeführt wird. Ich muss alle Anforderungen an 192.168.2.2:2222 (außerhalb der IP-Adresse) nur vom Subnetz 192.168.1.0/24 an 127.0.0.1:2222 weiterleiten .
Ich versuche das zu benutzen, aber es funktioniert nicht.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Wie kann ich das zum Laufen bringen?
UPD: Adressschema bearbeiten.
iptables
port-forwarding
network-interface
SimWhite
quelle
quelle
2222
über das Subnetz auf die Loopback-Schnittstelle portiert werden kann192.168.1.0/24
? Das ist nicht nur ein einzelner Regeltyp. Siehe hier: debuntu.org/…Antworten:
Die von Ihnen verwendete iptables-Regel funktioniert, aber Sie müssen noch eine weitere Änderung vornehmen:
(Ersetzen
eth0
mit dem NIC192.168.2.2
residiert auf)Standardmäßig lautet dieser Wert
0
, der den Kernel anweist, keinen externen Datenverkehr weiterzuleiten, der für bestimmt ist127.0.0.0/8
. Dies dient nur der Sicherheit, da ein solcher Verkehr nicht normal ist.Zusätzlicher Hinweis: Ihre derzeitige iptables-Regel ist zu weit gefasst. Ihre Regel gibt
-d 192.168.1.0/24 --dport 2222
an, dass das Ziel übereinstimmt. Wenn Ihr Computer versucht, mit einem anderen Host auf Port 2222 zu kommunizieren (dh ausgehenden Datenverkehr), wird er ebenfalls umgeleitet. Sie müssen entweder die-d
Übereinstimmung ändern-d 192.168.2.2
oder hinzufügen-i eth0
(oder was auch immer Ihre Nic ist).quelle
route_localnet
. Gab es andere Namen dafür? (in Linux 2.6.30)ls /proc/sys/net/ipv4/conf/lan/
: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm Forwarding mc_forwarding promote_secondaries rp_filter send_redirects Tagroute_localnet
ist aktueller (7. Juni 2012) als mein Kernel (2.6.30-std-def-alt15 # 1 SMP Mon Dec 14 08:45:48 UTC 2009). Ok, ich werde einfach die gewünschte Portweiterleitung (von außen nach innen) mit einem Weiterleitungsprozess wienetcat
(nc
)xinetd
oder den Portweiterleitungsoptionen vonssh
(letzteres ist natürlich ineffektiv und dumm, aber ich erwähne es, denn nun ja, diese Möglichkeit gibt es).sysctl -w net.ipv4.conf.all.route_localnet=1
Sie können zu localhost umleiten, jedoch nicht zu loopback (127.0.0.0/8). Loopback ist eine Lücke. Sie müssen zu einer Ihrer realen Schnittstellen umleiten. Versuchen Sie es mit REDIRECT.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
quelle
-j DNAT --to-destination w.x.y.z:222
Was ist, wenn die richtige Antwort mit
route_localnet
nicht funktioniert? ..Wenn Ihr Kernel den Patch für
route_localnet
nicht enthält , dann ... aktualisieren Sie den Kernel!Oder es gibt andere Möglichkeiten, den an einer Schnittstelle ankommenden Datenverkehr an einen anderen Port an einer anderen Schnittstelle weiterzuleiten (insbesondere an localhost), indem ein Prozess ausgeführt wird, der die externe Schnittstelle überwacht und den Datenverkehr weiterleitet.
netcat
(nc
),,xinetd
undssh
(und vielleicht noch mehr) sind Beispiele für Programme, die dazu in der Lage sind (obwohl die Auswahlssh
seltsam und ineffektiv wäre).Ich habe dafür eine Konfiguration geschrieben
xinetd
. Nun wird dieser Dienst automatisch aufgerufen:(
vaio.ob
Ist der Name dieses Hosts auf der externen Netzwerkschnittstelle.)service xinetd reload
Überprüfen wir nach a , ob es zuhört:Und tatsächlich gehen Verbindungen durch!
quelle