VPN für HTTP/HTTPS-Verkehr unter Ubuntu umgehen?

VPN für HTTP/HTTPS-Verkehr unter Ubuntu umgehen?

Ich habe eine Ubuntu 14.04-Maschine, deren gesamter ausgehender Datenverkehr über ein VPN läuft, und ich muss sicherstellen, dass HTTP- und HTTPS-Datenverkehr nicht über das VPN läuft.
Ich habe mir statisches Routing angesehen, aber es scheint nur Layer 3 zu verarbeiten.
Wie gehe ich mit dieser Einstellung um? Danke.

Antwort1

Um Pakete, die an bestimmte Ports gerichtet sind, über ein anderes Standard-Gateway zu routen, müssen Sie diese Pakete mit iptables markieren und sie dann über eine andere Routing-Tabelle routen.

Erstellen Sie also zunächst eine neue Routentabelle mit Ihrem lokalen Gateway als Standardgateway (nicht Ihrem VPN-Gateway).

ip route add table 4 default via 192.168.0.1

Markieren Sie dann die benötigten Pakete basierend auf den Zielports.

iptables -t mangle -A PREROUTING -p tcp --dport 80  -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 4

Leiten Sie diese markierten Pakete abschließend über die neu erstellte Routentabelle weiter.

ip rule add fwmark 4 table 4

Ich habe die obigen Befehle nicht getestet, daher müssen sie möglicherweise ein wenig angepasst werden.

Antwort2

Eine Möglichkeit hierfür ist die Verwendung von ip ruleund iptables. Ein Beispiel wäre, den Verkehr zu markieren, den Sie weiterleiten möchten.

iptables -I OUTPUT -m tcp -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x0001

Anschließend erstellen Sie eine neue Routingtabelle:

echo 101 r_http >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 dev eth0 table r_http
ip route flush cache

Und nachdem Sie nun Ihren HTTP- und HTTPS-Verkehr markiert haben, können Sie eine Regel erstellen, um die neue Routing-Tabelle anzuwenden

ip rule fwmark 0x0001 table 101

Das sollte funktionieren. Als Übung für den Leser: Wie man es dauerhaft macht und wie man die Standardroute erstellt :-)

Antwort3

Vor kurzem befand ich mich in einer ähnlichen Situation wie der OP. Dank der Antworten von @Cha0s und @Pablo Martinez konnte ich es für meine Situation zum Laufen bringen.

Erstens müssen wir, wie beide sagten, iptables-Regeln haben, um die Pakete zu markieren, die nicht durch VPN gehen sollen. @Cha0s hatte Recht, die Regeln in die Mangle-Tabelle einzutragen. Laut der Manpage von iptables müssen Sie die Mangle-Tabelle verwenden, um -j MARK target auszuführen.

Andererseits hat @Pablo Martinez Recht, sie in die OUTPUT-Kette einzufügen, obwohl auf der Manpage von iptables steht, dass Sie -j MARK in der PREROUTING-Kette verwenden sollten. Diese Pakete werden auf dem lokalen Host generiert und gehen raus. Sie werden nicht von der PREROUTING-Kette verarbeitet. Aber die OUTPUT-Kette ist sinnvoll und hat auch eine Mangle-Tabelle. Hier ist also die iptables-Regel, die ich verwendet habe:

iptables -t mangle -I OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x101

Erstellen Sie dann eine neue Routing-Tabelle und fügen Sie ihr eine Route hinzu, wie @Pablo Martinez beschrieben hat:

echo 101 r_http > /etc/iproute2/rt_tables.d/r_http.conf
ip route add table r_http default via 192.168.0.1 dev enp2s0
ip route flush cache

Ersetzen Sie 192.168.0.1 durch die IP Ihres Gateways oder Routers (nicht VPN) und enp2s0 durch den Namen Ihrer Netzwerkschnittstelle. Sie können „ip addr“ verwenden, um Schnittstellennamen zu überprüfen.

Fügen Sie abschließend eine IP-Regel hinzu, damit iproute2 die Markierung überprüft und unsere neue Routing-Tabelle verwendet.

ip rule add fwmark 0x101 table 101

Sie können eine iptables-Regel hinzufügen, um die an Port 80 und 443 gehenden Pakete zu protokollieren. Beachten Sie, dass diese Regel am Anfang der OUTPUT-Kette in der Filtertabelle hinzugefügt wird, da die Filtertabelle nach der Mangle-Tabelle verarbeitet wird und die erste Regel sein muss, um zu vermeiden, dass sie ignoriert wird.

iptables -I OUTPUT -p tcp -m multiport --dports 80,443 -j LOG --log-prefix "<HTTP/S>" --log-level info

Die Protokolleinträge sollten in /var/log/kern.log (auf einem Debian-System) angezeigt werden. Sie können überprüfen, ob sie alle MARK=0x101 enthalten. Vergessen Sie nicht, die Regel für die Protokollierung zu löschen, sobald Sie genügend Einträge gesammelt haben.

cat /var/log/kern.log | grep '<HTTP/S>' | less

Sobald Sie sicher sind, dass die Pakete richtig markiert sind, können Sie überprüfen, ob iproute2 die richtige Route für markierte Pakete auswählt.

ip route get to 8.8.8.8
ip route get to 8.8.8.8 mark 0x101

Das Ergebnis der ersten Zeile sollte Ihnen mitteilen, dass das Paket durch das VPN-Gateway und das Tunnelgerät geht. Die zweite Zeile sollte zeigen, dass das Paket durch Ihr eigenes Gateway und Netzwerkgerät geht.

VERWEISE:

Antwort4

Sie könnten versuchen, Ihren Browser für die Verwendung eines Proxys zu konfigurieren.
– Sie können einen Proxy im DNS angeben, aber ich bin mit dieser Technik nicht vertraut. (So funktionieren DNS-Lookups bei Verwendung eines HTTP-Proxys (oder nicht) im Internet Explorer) - Dies kann auch mit Gruppenrichtlinien erfolgen (http://social.technet.microsoft.com/wiki/contents/articles/5156.how-to-force-proxy-settings-via-group-policy.aspx) und sofern die betreffenden Browser die Einstellungen des Internet Explorers respektieren, können Sie es problemlos im gesamten Netzwerk einsetzen.

Sie benötigen jedoch einen HTTP-Proxyserver, damit dies funktioniert (https://stackoverflow.com/questions/1994846/open-source-http-or-https-proxy)

Dadurch wird der Webbrowser-Verkehr vom VPN ferngehalten, aber alles andere sollte in Ordnung sein. Richten Sie Ihren Proxyserver so ein, dass kein Datenverkehr über das VPN geleitet wird.

verwandte Informationen