Wie kann ich den gesamten Datenverkehr, der für einen bestimmten Port bestimmt ist, von einer beliebigen IP-Adresse zu einer beliebigen IP-Adresse übertragen und an den lokalen Computer umleiten, wobei die Quell-IP beibehalten wird?

434
AppleDash

Ich möchte den gesamten Datenverkehr von einer beliebigen IP-Adresse zu einer beliebigen IP-Adresse, die von der Schnittstelle stammt enp4s5und für den Port bestimmt ist 80, an den lokalen Computer weiterleiten (den Router, auf dem iptables ausgeführt wird).

Der Dienst, der auf Port 80 des lokalen Computers ausgeführt wird (ein Webserver, falls dies nicht offensichtlich war), muss die ursprüngliche SOURCE-IP der Verbindung kennen.

Der Anwendungsfall betrifft ein Captive-WLAN-Portal, das alle HTTP-Seiten (ich weiß, dass dies für HTTPS nicht funktioniert) ersetzt und eine Weiterleitung zu meiner auf dem Router ausgeführten Anmeldeseite ausführt, mit der sie sich authentifizieren müssen (und dann eine iptables-Regel hinzufügen oder fügen Sie ihre Adresse einem ipset hinzu, das diese Weiterleitung umgeht).

Ich bin mir ziemlich sicher, dass ein DNAT die Hälfte des gewünschten Setups durchführt und die Pakete an den lokalen Computer umleitet. Ich blieb jedoch fest, dass ich einen passenden SNAT benötige, um die Antwortpakete an den Computer zurückzuschicken, der sie ursprünglich gesendet hat - aber ich Ich kann das nicht tun, weil ich die Quell-IP nicht kenne, die in --to-source für die SNAT-Regel angegeben werden muss.

2

1 Antwort auf die Frage

2
AppleDash

Was für mich am Ende alle oben genannten Anforderungen erfüllte, war eine REDIRECTRegel:iptables -t nat -A PREROUTING -i enp4s5 -p tcp --dport 80 -j REDIRECT --to-port 80