Wie leite ich den Verkehr von Port 80 auf Tun0 nach Port 80 auf Eth0 um?

453
CaseJ

Ich habe einen Webserver, der auf demselben Server läuft, auf dem ich ein VPN verwende. Ich möchte gerne auf den Webserver zugreifen können, wenn das VPN ein- oder ausgeschaltet ist. Unter FreeBSD war dies ziemlich einfach, meiner Meinung nach ist PF viel einfacher zu benutzen als IPTables.

Ich versuche, den Verkehr von Port 80/443 auf tun0 nach Port 80/44 auf Eth0 umzuleiten . Ich habe die Manpages für iptables gelesen, hatte aber kein Glück.

0

1 Antwort auf die Frage

0
grawity

Der Fragetitel macht nicht so viel Sinn wie geschrieben. Der Datenverkehr wird von vornherein nicht zu oder von TCP-Ports geroutet (stattdessen sollten Sie sie eher als Beschriftungen betrachten), und TCP-Ports sind in keiner Weise mit Schnittstellen verbunden. Und nichts davon hat etwas mit der Möglichkeit zu tun, den Webserver zu verwenden, wenn das VPN ein- und ausgeschaltet ist.

Routen für ein Paket werden hauptsächlich auf der Grundlage der Ziel-IP-Adresse ausgewählt, indem Sie in der Routing-Tabelle nachschauen. Das übliche Problem - FreeBSD pf (und von dem, was ich gehört habe, Windows) verfügt über zusätzliche integrierte Mechanismen zur Vermeidung, aber Linux hält sich an die Grundlagen -, dass die ausgehenden Antwortpakete völlig unabhängig vom eingehenden Routing geroutet werden. Originalpakete. Wenn Sie also über zwei Standardrouten verfügen (sowohl über ein LAN-Gateway als auch über ein VPN), wird Linux immer die gleiche Route bevorzugen.

In dieser Situation benötigen Sie normalerweise das quellenabhängige Routing oder das Richtlinienrouting. Das Betriebssystem muss wissen, dass ausgehende Antwortpakete a) von einer bestimmten Quell-IP-Adresse oder b) zu bestimmten eingerichteten Verbindungen gehören und eine andere Routenauswahl verwenden müssen.

In der großen Tradition von "aber Linux ist Wahl", müssen Sie dies manuell konfigurieren, indem Sie verschiedene Mechanismen zusammenbauen. Ich gehe davon aus, dass Sie auch IPv4 benötigen, und können sich daher nicht vollständig auf den "Teilbaum" -Mechanismus verlassen (der viel einfacher zu bedienen ist, aber leider nur IPv6 als implementiert).

Stellen Sie zunächst sicher, dass Sie über zwei Routingtabellen verfügen, die jeweils eine andere Standardroute haben:

ip -4 route add default via 192.168.1.1 dev eth0 table 2 ip -4 route add default dev tun0 table 3 

(Abkürzung: Wenn die 'main'-Tabelle bereits eine Standardroute über das VPN hat, benötigen Sie hier keine Tabelle 3, Sie können stattdessen auch' main 'verwenden, anstatt die Tabelle 3 zu erstellen.)

Fügen Sie dann Richtlinienroutingregeln hinzu, um in dieser Tabelle nach der Quell-IP-Adresse zu suchen:

ip -4 rule add pref 200 from 192.168.1.0/24 lookup 2 ip -4 rule add pref 300 from <vpnnet> lookup 3 

(Auch wenn die Haupttabelle bereits eine Standardroute über das VPN vorgezogen hat, können Sie die letztere Regel überspringen. Sie ist hier der Vollständigkeit halber enthalten.)

Dann überprüfen Sie das Ergebnis mit:

ip -4 route get 8.8.8.8 from 192.168.1.x ip -4 route get 8.8.8.8 from <vpnip>