On Thursday 17 February 2005 17:54, Torsten Foertsch wrote:
möchte alle Verbindungen zu einer bestimmten IP Adresse und einem bestimmten Port auf localhost:anderer_port umleiten. Wie mache ich das am besten?
Eigentlich dachte ich, diese Regel
iptables -t nat -A OUTPUT -d 1.2.3.4 -p tcp --destination-port 421 -j DNAT --to 127.0.0.1:543
sollte das für lokal erzeugte Pakete tun und diese
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --destination-port 421 -j DNAT --to 127.0.0.1:543
für geroutete.
Leider erzielt das nicht den gewünschten Effekt. Die erste Regel liefert "iptables: Invalid argument", die zweite wird zwar akzeptiert, macht aber nicht wirklich, was es soll.
Der nächste Versuch sah dann so aus:
iptables -t nat -A OUTPUT -d 1.2.3.4 -p tcp --destination-port 421 -j REDIRECT --to-port 543 iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --destination-port 421 -j REDIRECT --to-port 543
Jetzt werden beide Regeln akzeptiert, doch der Effekt ist trotzdem nicht erreicht. Doch eine Änderung hat sich ergeben. Ohne diese Regeln hängt ein "telnet 1.2.3.4 421" von einem anderen Rechner (der Port ist von einer Firewall geblockt). Mit den Regeln kommt sofort "connection refused". Die Regel in der PREROUTING chain hat offensichtlich irgendeinen Effekt. Vom Router selbst hat sich das Verhalten von "telnet 1.2.3.4 421" aber nicht verändert.
Also habe ich in beide chains noch Logging-Regeln eingebaut, um zu sehen, ob die Pakete überhaupt dort vorbeikommen. Wie erwartet finde ich eine Logfilezeile aus der PREROUTING chain, wenn telnet von einem anderen Rechner über den Router gemacht wird. Beim telnet vom Router selbst bleibt aber alles stumm.
Wieso durchlaufen lokal erzeugte Pakete nicht die OUTPUT chain?
Wie kann ich einfach alle TCP Verbindungen zu 1.2.3.4:421 auf 127.0.0.1:543 umleiten?
kleine Ergänzung: Nachdem mein Service nun auf 0.0.0.0:543 statt 127.0.0.1:543 lauscht, funktioniert mit dieser Regel iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --destination-port 421 -j REDIRECT --to-port 543 der Zugriff von einem entfernten Rechner auf 1.2.3.4:421. Die entsprechende OUTPUT-Regel liefert aber immer noch nicht das richtige Resultat. Außerdem soll der Service letztlich auf 127.0.0.1 lauschen. Also, was muss ich tun, damit er nicht auf die lokale Adresse des Interfaces umleitet, sondern auf lo? Wieso funktioniert das OUTPUT Zeug nicht? Torsten