IPTables – Weiterleitung an angeschlossenen Client, aber Beibehaltung der Quell-IP

IPTables – Weiterleitung an angeschlossenen Client, aber Beibehaltung der Quell-IP

Hier ist mein Szenario:

Ich habe einen VPS mit zwei IP-Adressen, auf dem OpenVPN läuft (IP-Adresse des OpenVPN-Servers: 10.1.2.1). Ich möchte den gesamten empfangenen Datenverkehr an EINE Adresse an den VPN-Client (10.1.2.2) weiterleiten.

Hier sind die beiden Regeln, die ich AKTUELL verwende:

iptables -t nat -A PREROUTING -i venet0 -p ALL -d <EXTERNAL IP #1> -j DNAT --to-destination 10.1.2.2
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Das funktioniert. Ich kann die Anfrage an den VPN-Client weiterleiten und die Dienste nutzen, die vom VPN-Client gehostet werden. Ich habe jedoch einen anderen Dienst, der die WAHRE IP-Adresse der Anfrage des INCOMING-CLIENT kennen muss. Wenn ich es auf die oben beschriebene Weise mache, denkt der VPN-Client, der Incoming-Client habe die IP-Adresse 10.1.2.1, was die IP-Adresse des OpenVPN-Servers ist.

Ich habe viele Lösungen ausprobiert, darunter das Ersetzen von MASQUERADE durch ...

iptables -t nat -A POSTROUING -o tun0 -s 10.1.2.2 -j SNAT --to-source <EXTERNAL IP #1>

aber das funktioniert nicht. Alle Anfragen bleiben einfach hängen.

Meine Netzwerkarchitektur verwendet nur venet0 und tun0, also den OpenVPN-Tunnel. Vorschläge, wie man die WAHRE IP-Adresse des öffentlichen Clients erhält, wären sehr willkommen. Vielen Dank.

Trecius

Antwort1

Es sieht so aus, als ob Sie weder SNAT noch MASQUERADE verwenden sollten. Beide Optionen führen zu doppeltem NAT, wodurch beide Enden die echte IP des anderen Endes nicht kennen. NAT wird dieses Wissen immer in mindestens eine Richtung unterbrechen.

Wenn der Server am anderen Ende tun0Ihren Router als Standardroute verwendet, sollte er den Datenverkehr an Ihren Router zurückleiten, wo das DNAT für den Rückverkehr rückgängig gemacht werden kann.

Eine alternative Option, zumindest für HTTP, besteht darin, einen Proxy auf Ihrem Server auszuführen. Der Proxy sollte den Header „X-Forwarded-For“ hinzufügen oder erweitern. Dieser enthält eine oder mehrere Adressen, die die Adresse identifizieren, an die der Datenverkehr weitergeleitet wurde. Sie können der von Ihnen hinzugefügten IP-Adresse vertrauen. Andere Adressen könnten gefälscht sein.

verwandte Informationen