Wie kann ich den Windows VPN-Routing selektiven Datenverkehr (nach Zielnetzwerk) veranlassen?

219169
Legooolas

Ich möchte ein Windows-VPN verwenden, jedoch nur für ein bestimmtes Netzwerk, damit es nicht meine gesamte Netzwerkverbindung übernimmt.

Anstelle, dass das VPN die Standardroute wird, machen Sie nur die Route für 192.168.123.0/24

(Ich sehe, dass es in dieser Frage eine Lösung für Ubuntu gibt, aber manchmal muss ich das auch unter Windows tun.)

Kann dies automatisiert werden, damit dies bei jeder Verbindung zum VPN geschieht?

131
Gibt es eine verwandte Frage zum Filtern einer Reihe von Websites über VPN? Es sieht so aus, als würden die Antworten hier nur für den Fall funktionieren, wo sich eine einzige Site hinter VPN befindet. Ich bin in China und ungefähr die Hälfte der Websites, die ich verwenden möchte, sind gesperrt. Sie sollten also über VPN gehen, andere Websites sind jedoch ohne VPN schneller / reibungsloser. hippietrail vor 9 Jahren 0
Ich ging weiter und stellte eine neue Frage: http://superuser.com/questions/925947 hippietrail vor 9 Jahren 0

12 Antworten auf die Frage

129
TRS-80

Sie können die Übernahme Ihrer gesamten Verbindung deaktivieren, indem Sie zu den Eigenschaften von VPN, NetworkingRegisterkarte, Internet Protocol (TCP/IP)Eigenschaften, Advancedund dem Häkchen wechseln Use default gateway on remote network. 192.168.123.0/24Abhängig von der Konfiguration des VPN-Servers kann dies eine Route hinterlassen . Wenn dies nicht der Fall ist, müssen Sie die Route jedes Mal manuell hinzufügen, obwohl Sie sie in eine Batchdatei schreiben könnten.

Führen Sie (als Administrator) Folgendes aus, um die Route manuell hinzuzufügen:

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254 

In diesem Beispiel wird eine dauerhafte Route (es ist nicht erforderlich, den Befehl nach einem Neustart auszuführen) 192.168.0.12über das VPN-Gateway an die IP- Adresse weitergeleitet 10.100.100.254.

Mehr dazu unter http://technet.microsoft.com/de-de/library/bb878117.aspx

"Sie müssen die Route manuell hinzufügen" ... wie? Wie zwingt jemand, sagen wir, "192.168.10.123", um durch den VPN zu gehen, aber sonst nichts? Timothy Khouri vor 13 Jahren 1
Ich persönlich fand es ausreichend, das Kontrollkästchen auszuschalten. Ich musste keine Routen hinzufügen. Ich habe bestätigt, dass alles durch zahlreiche Tracerts dahin geht, wo ich es erwarten würde. eidylon vor 13 Jahren 15
Das Ankreuzfeld war alles, was benötigt wurde. Luk vor 12 Jahren 1
Bitte klären Sie. Welcher Verkehr wird über das VPN geleitet? Ist es nur Verkehr, der auf die IP des VPN-Servers abzielt? Wenn beispielsweise die VPN-Verbindung zu "my.domain.com" hergestellt wird, bedeutet dies, dass der gesamte Datenverkehr auf dem Client zu "my.domain.com" über das VPN und alle anderen Daten an das Standardgateway gehen. Triynko vor 12 Jahren 1
Ich habe den Befehl "route print" verwendet und festgestellt, dass die von Windows 7 generierten Routen absolut falsch waren. Es wurde kein an die IP-Adresse meines VPNs gerichteter Datenverkehr an das VPN gesendet, sondern an mein lokales Gateway. Es gab auch einige kreisförmige Einträge in der Tabelle. Ich löschte die von Windows erstellte Route und fügte dann manuell die richtige Route hinzu, sodass die IP-Adresse des VPN-Servers das Gateway des VPN und die lokale IP des Clients für die Schnittstelle verwendet. Der Verkehr zu meinem VPN-Server wurde dann erfolgreich durch den VPN-Tunnel geleitet, und der gesamte andere Verkehr blieb erwartungsgemäß unberührt. Funktioniert gut. Triynko vor 12 Jahren 1
Ich musste das Kontrollkästchen "Standardgateway im Remotenetzwerk verwenden" deaktivieren und dann "Klassenbasierten Routenzusatz deaktivieren" aktivieren, um mein lokales Netzwerk im selben IP-Bereich zu verwenden. (Local und VPN verwenden intern '192.168.1.x') wersimmon vor 11 Jahren 0
@eidylon Danke für das Teilen von "tracert" als Hinweis zur Verifikationsmethode. Ich wollte unbedingt nach einer Überprüfungsmethode fragen. Die Antwort könnte noch durch ein funktionierendes Beispiel verbessert werden, wie überprüft werden kann, ob beide Arten von Verkehr an ihren entsprechenden "richtigen Ort" gelangen, möglicherweise mit "tracert". n611x007 vor 11 Jahren 0
Der route -p add war für mich besonders nützlich, da unsere öffentlichen Webserver Bereiche haben, die sowohl mit einem Kennwort als auch mit IP-Einschränkungen geschützt sind, sodass sie nur von unserem eigenen Netzwerk aus erreichbar sind. Lenne vor 11 Jahren 0
Diese Antwort ist unvollständig, weil Sie die Notwendigkeit der Angabe der Schnittstelle nicht erwähnen. Eine ausführlichere Erklärung finden Sie hier in meiner Antwort: http://superuser.com/a/862409/16153 Jez vor 9 Jahren 0
Ich habe über 2 Jahre nach einer Möglichkeit gesucht, dies zu tun! Ich habe nicht erwartet, dass es so einfach ist, ein Kontrollkästchen zu deaktivieren. Wissen Sie, wie Sie den gleichen Effekt auch auf Ubuntu und Android erzielen können? Vielen Dank! Bruno Finger vor 7 Jahren 0
18
bPratik

Ich habe erfolgreich die Technik von @ TRS-80 verwendet, um dies zu erreichen.

Ich arbeite von zu Hause aus und muss für meine E-Mail ein VPN in das Unternehmensnetzwerk einbauen (ich hasse Webmail !!).

Zur gleichen Zeit muss ich ständig nach Informationen surfen und brauche auch Youtube für meine Hintergrundmusik ... Jetzt möchten Sie Youtube definitiv nicht von einem VPN streamen, da es sich wie ein Robot Singing anhört !!! :)

Alles, was ich getan habe, war @ TRS-80 zu folgen:

Eigenschaften des VPN, Registerkarte Netzwerk, Eigenschaften "Internetprotokoll (TCP / IP)", Erweitert, deaktivieren Sie "Standardgateway im Remotenetzwerk verwenden".

und machte dann meine eigene:

Aktivieren Sie auf der Registerkarte "DNS" die Option "Diese Verbindungsadressen in DNS registrieren".

Alles funktioniert nahtlos!

8
Wayne

Zugegeben, diese Antwort spiegelt nicht Ihre Anfrage wider, aber ich verwende speziell für diesen Zweck eine VM. Auf diese Weise wird nur das Netzwerk innerhalb der VM durch die Routen eingeschränkt.

Möglicherweise finden Sie einige bessere Antworten von anderen Benutzern, aber dies kann Ihnen zumindest etwas zu berücksichtigen geben, da dies eine einfache Lösung ist, nachdem die VM erstellt wurde.

Dies ist eine gute Lösung, vorausgesetzt, Ihre Hardware kann damit umgehen. Enigma vor 11 Jahren 0
7
Dmitry Petrov

Ich fand, dass es notwendig war, Schnittstelle in Wegbefehl direkt zu zeigen. Ohne dies wird Windows die Hauptnetzwerkkartenschnittstelle anstelle von VPN verwenden. In meinem Fall sieht es so aus

route -p add 192.168.10.187 mask 255.255.255.255 0.0.0.0 IF 26 :: ^destination ^mask ^gateway ^interface 

Beachten Sie das 'IF 26'.

Das hat auch für mich funktioniert. Um herauszufinden, welche Schnittstelle Sie benötigen, führen Sie einfach den Befehl "route print" aus und überprüfen Sie die ersten Zeilen, in denen die Liste der verfügbaren Schnittstellen angezeigt wird (finden Sie Ihr VPN dort und prüfen Sie das WENN - in der ersten Spalte). Funbit vor 9 Jahren 0
Dazu gibt es einen brillanten Artikel: [link] (https://documentation.meraki.com/MX-Z/Client_VPN/Configuring_Split-tunnel_Client_VPN#Configuring_Split_Tunnel_for_Windows). Die Verwendung von 0.0.0.0 als Standardgateway-IP scheint ebenfalls gut zu funktionieren, sodass sie bei einer Änderung nicht angepasst werden muss. Es wäre großartig, in diese Antwort zu integrieren, denn imo ist es viel nützlicher als das Top. lpd vor 9 Jahren 0
4
Dave

Wenn Sie sowohl über IPV4 als auch über IPV6 verfügen, müssen Sie das Kontrollkästchen "Standardgateway im Remotenetzwerk verwenden" an beiden Stellen deaktivieren, auch wenn Sie nur IPV4 verwenden

3
TheCompWiz

Wenn Sie das CMAK verwenden und eine Routing-Datei einrichten, die der Client herunterladen kann ... werden die Routing-Dateien von Windows heruntergeladen und die Routen entsprechend angepasst. Es gibt Optionen, um die Standardroute zu entfernen ... und verschiedene statische Routen hinzuzufügen. Dies ist bekannt als Split-Tunnel übrigens.

Hier gibt es eine gute Anleitung : http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

2
phk

Ich möchte meine Lösung zum Mix hinzufügen. Es läuft auf einer Cygwin-basierten UNIX-Shell unter Windows 7 oder neuer, sollte aber auch mit MSYS2, Bash-on-Windows [WSL] nach Build 14986 oder Busybox für Windows funktionieren. Muss mit Administratorrechten ausgeführt werden.

Es hat einige Einstellungen und versucht, einige der Dinge zu entdecken, die Sie nicht explizit festgelegt haben. Es legt auch die Schnittstellennummer (IF) explizit fest, um einige Probleme zu beheben, die einige Benutzer (wie ich) mit den anderen Lösungen hier hatten.

#!/bin/sh  # these three settings are required adapter_name='VPN Connection' username= password=  # This setting here might be important because it's about the target network # and in some cases it can't be properly determined automatically so this might # be then worth setting. # Format is in CIDR notation with the network address and a forward slash and # the amount of network bits target_network=192.168.0.0/24  # the IP you will get on the target network, also the VPN gateway on your # local machine, you normally don't need to set this as the script tries to # detect it ip=  # optional setting for metric which normally shouldn't be necessary, # except in te very rare cases where it should be set to a value lower than all # other routes that might match the target network metric=  # experimental setting to delete routes to the target network prior and after # should normally not be needed unless this script fails and you get error # messages like 'The route addition failed: The object already exists.' route_cleanup=F  prog_name=$  msg() { printf '%s: %s\n' "$prog_name" "$*" }  die() { msg "$*" >&2 exit 1 }  [ "$adapter_name" ] || die "Adapter name not set!" [ "$username" ] || die "Username not set!" [ "$password" ] || die "Password not set!"  if [ "$(uname -o)" != 'MS/Windows' ]; then id -G | grep -qE '\<0|544\>' || die 'Not running with admin rights.' fi  msg "Disconnecting any existing connection that might exist." rasdial.exe "$adapter_name" /d  msg "Connecting" rasdial.exe "$adapter_name" "$username" "$password"  if [ ! "$ip" ]; then msg "Getting IP address on target network." ip=$(netsh.exe interface ip show config name="$adapter_name" | grep -a 'IP Address' | awk -F'[: ]+' '')  [ "$ip" ] || die 'Could not get IP! Exiting.'  msg "Detected IP address as '$ip'." fi  if [ ! "$target_network" ]; then msg "Getting target network." target_network=$(netsh.exe interface ip show config name="$adapter_name" | grep -a 'Subnet Prefix' | awk -F'[: ]+' '')  [ "$target_network" ] || die 'Could not get target network! Exiting.'  msg "Detected target network as '$target_network'." fi  msg "Getting VPN interface number." if=$(ROUTE.EXE print -4 | grep -a "$adapter_name" | awk -F. '')  [ "$if" ] || die 'Could not get interface number! Exiting.'  msg "Detected VPN interface number as '$if'."  if [ "$route_cleanup" = T ]; then msg "Deleting any potentially already existing routes for the target network." ROUTE.EXE delete "$target_network" fi  msg "Adding route for target network." if [ "$metric" ]; then ROUTE.EXE add "$target_network" "$ip" IF "$if" Metric "$metric" else ROUTE.EXE add "$target_network" "$ip" IF "$if" fi  msg "VPN should be up now." msg "Press enter to make it stop." read -r _  if [ "$route_cleanup" = T ]; then msg "Deleting route." ROUTE.EXE delete "$target_network" fi  msg "Disconnecting." rasdial.exe "$adapter_name" /d  # msg "Press enter to exit." # read -r _  exit 0 

Es ist auch erwähnenswert, dass es möglicherweise erforderlich sein muss, eine niedrige Metrik manuell festzulegen, oder die Standardroute stimmt vor dem für das VPN bestimmten Datenverkehr überein. Dazu gehen Sie in die Adaptereinstellung, wo Sie den Menüpunkt "Eigenschaften" für den VPN-Adapter → Registerkarte "Netzwerk""Internetprotokoll Version 4 (TCP / IP)" Eigenschaften > "Erweitert" → öffnen und die Auswahl aufheben der „automatischen metric“ Kontrollkästchen (zusätzlich zu dem „Standard - Gateway ...“ natürlich) und den Wert in der Menge „Interface metric:“ Feld auf einen Wert niedriger als die Standardroute (siehe ROUTE.EXE -4 printAusgang).

2
Der_Meister

Verwenden Sie das Cmdlet Add- VpnConnectionRoute in Windows 8+.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24 
Unter Windows 10 hat dies perfekt funktioniert. x-ray vor 6 Jahren 0
1
Lonnie

Ein bisschen alt, aber ich habe einen Weg gefunden, dies mit einer anderen Maschine zu tun. Ich habe einen Laptop, auf dem ich die VPN-Verbindung aufgebaut habe, und dort habe ich FreeProxy mit Socks5 eingerichtet.

Dann habe ich Firefox auf meinem Client-Computer so eingerichtet, dass er den Proxyserver des Laptops verwendet. Wenn ich FireFox oder irgendetwas verwendet, das für diesen Socks5-Proxy konfiguriert ist, wird das VPN verwendet. Andernfalls wird das Routing verwendet.

1
Xantippe

Dies ist unter Windows nicht möglich, ohne zusätzliche Programme, Batchdateien oder die Befehlszeile zu verwenden. Eine Alternative ist, eine virtuelle (oder physische) Maschine zu installieren, auf der Sie das VPN ausführen können.

Es ist merkwürdig, dass etwas so leicht zu erklären ist, wie dies so schwer zu erreichen ist. Wie schwierig könnte es sein, nur den Datenverkehr von einem Programm zur VPN-Schnittstelle und alle anderen Programme zur Standard-NIC-Schnittstelle zu leiten? Warum müssen wir dafür eine ganze virtuelle Maschine einrichten? Und mit Linux ist es möglich, aber auch die Lösung ist nicht sehr elegant.

Es ist auch sehr begehrt: Ich habe Dutzende Threads zum selben Thema gefunden. Ich hoffe nur, dass jemand die Lächerlichkeit davon erkennt und etwas dagegen unternimmt. (In Windows 8!)

Diese Lösung stammt aus einer nicht zugeordneten Batchdatei . Es wurde etwas angepasst.

Anweisungen für Windows 7

Das Skript wird auf und leiten den Verkehr durch den VPN bis zu einem Neustart verbinden - Sie ersetzen können route addmit route -p addfür die Änderung bestehen bleiben, aber wenn Sie keine permanente IP mit Ihrem VPN haben, wird es irgendwann aufhören zu arbeiten, wenn die VPN - IP - Änderungen.

  1. Öffnen Sie das Netzwerk- und Freigabecenter
  2. Öffnen Sie die Eigenschaften für Ihre VPN-Verbindung
  3. Klicken Sie auf die NetworkingRegisterkarte
  4. Für IPv4 und 6:
    1. Klicken Properties
    2. Klicken Advanced
    3. Deaktivieren Sie das Kontrollkästchen Use default gateway[...]
  5. Schließen Sie alles, was von den vorherigen Schritten geöffnet wurde
  6. Bearbeiten und speichern Sie das unten gefundene Batch-Skript
  7. Führen Sie es als Administrator aus

Folgendes muss im Skript ersetzt werden:

  • <VPN> mit dem Namen der erstellten VPN-Verbindung
  • <USER> mit dem VPN-Benutzernamen
  • <PASS> mit dem VPN-Passwort
  • <TARGET> mit der gewünschten IP-Adresse über das VPN (wenn Sie weitere Adressen weiterleiten möchten, duplizieren Sie einfach die drei Zeilen, in denen das Ziel verwendet wird)

Hinweis: Wenn Sie das Passwort nicht in der Datei gespeichert werden soll, ersetzen Sie <PASS>mit %password%und fügen Sie die folgende nach der ersten Zeile des Skripts: set password= Input password:.

Skript

@echo off @echo make sure to be disconnected! rasdial <VPN> /d @echo start to connect to vpn rasdial <VPN> <USER> <PASS> netsh interface ip show config name="<VPN>" | findstr "IP" > ip.dat set /p ip= < ip.dat del ip.dat set ip=%ip:~-12% @echo VPN IP is %ip%  set target=<TARGET> @echo Add route for %target% route add %target% mask 255.255.255.255 %ip%  timeout /T 3 > nul