2009-07-24 09:33:51 +0000 2009-07-24 09:33:51 +0000
143
143

Wie kann ich die Windows VPN-Route zum selektiven Verkehr (nach Zielnetzwerk) machen?

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

z.B, Anstatt das VPN zur Standard-Route zu machen, machen Sie es nur zur Route für 192.168.123.0/24

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

Kann das automatisiert werden, so dass es immer dann, wenn ich mich mit dem VPN verbinde, dies tut?

Ответы (13)

143
143
143
2009-07-24 11:11:52 +0000

Sie können die Übernahme Ihrer gesamten Verbindung ausschalten, indem Sie zu den Eigenschaften des VPN gehen, Registerkarte Networking, Internet Protocol (TCP/IP) properties, Advanced, untick Use default gateway on remote network. Abhängig von der Einrichtung des VPN-Servers kann dies eine Route zu 192.168.123.0/24 hinterlassen oder nicht. Wenn dies nicht der Fall ist, müssen Sie die Route jedes Mal manuell hinzufügen, obwohl Sie sie auch in eine Batch-Datei einfügen könnten.

Um die Route manuell hinzuzufügen, führen Sie (als Administrator) aus:

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

In diesem Beispiel wird eine persistente (es ist nicht erforderlich, den Befehl nach einem Neustart auszuführen) Route zur IP 192.168.0.12 über das VPN-Gateway 10.100.100.254 erstellt.

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

20
20
20
2011-02-28 16:05:03 +0000

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-Mails (ich hasse Webmail!!) eine VPN-Verbindung zum Firmennetzwerk aufbauen.

Gleichzeitig muss ich ständig nach Informationen surfen und brauche auch Youtube für meine Hintergrundmusik… Jetzt wollen Sie youtube definitiv nicht über ein VPN streamen, da es sich dann wie Robot Singing!! anhört! :)

Ich habe nur @TRS-80 befolgt:

Eigenschaften des VPN, Registerkarte Netzwerk, “Internetprotokoll (TCP/IP)”-Eigenschaften, Erweitert, “Standardgateway im entfernten Netzwerk verwenden”

abgehakt und dann meine eigenen gemacht:

unter der Registerkarte DNS, “diese Verbindungsadressen im DNS registrieren” ankreuzen

Alles funktioniert nahtlos!

9
9
9
2009-07-24 10:09:15 +0000

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

Vielleicht finden Sie bessere Antworten von anderen Leuten, aber zumindest gibt Ihnen das etwas zu denken, da es eine einfache Lösung ist, nachdem die VM erstellt wurde.

7
7
7
2013-09-25 05:41:53 +0000

Ich stellte fest, dass sie direkt auf die Schnittstelle im Streckenkommando zeigen musste. Ohne sie wird Windows die Hauptnetzwerkkartenschnittstelle anstelle von VPN verwenden. In meinem Fall sieht es so aus, dass

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

die ‘IF 26’ beachten.

6
6
6
2018-01-26 07:11:32 +0000

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

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
4
4
4
2011-07-29 09:03:55 +0000

Wenn Sie sowohl IPV4 als auch IPV6 haben, müssen Sie das Häkchen bei “Use default gateway on remote network” an beiden Orten entfernen, auch wenn Sie nur IPV4 verwenden.

3
3
3
2011-03-28 18:32:39 +0000

Wenn Sie das CMAK verwenden und eine Routingdatei einrichten, die der Client herunterladen kann… Windows wird die Routingdatei herunterladen und die Routen entsprechend anpassen. Es gibt Optionen, um die Standard-Route zu entfernen… und verschiedene statische Routen & solche hinzuzufügen. Dies ist bekannt als ein Split-Tunnel btw.

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

2
2
2
2015-10-26 15:29:33 +0000

Ich möchte meine Lösung dem Mix hinzufügen. Sie 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 Admin-Rechten ausgeführt werden.

Es hat einige Einstellungen und versucht, einige der Dinge zu erkennen, die Sie nicht explizit eingestellt haben. Es setzt auch die Schnittstellennummer (IF) explizit, um einigen Problemen entgegenzuwirken, 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=${0##*/}

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'[:]+' '{print $4}')

  ["$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'[:]+' '{print $4}')

  ["$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. '{gsub(" ", "");print $1}')

["$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, daß es notwendig sein könnte, manuell eine niedrige Metrik einzustellen, oder andernfalls wird die Standard-Route vor dem für das VPN bestimmten Datenverkehr übereinstimmen. Sie tun dies, indem Sie zur Adaptereinstellung gehen, wo Sie den Menüpunkt “… Properties” für den VPN-Adapter öffnen → “Networking” Registerkarte → “Internet Protocol Version 4 (TCP/IP)” Properties → “Advanced” → und dort das Kontrollkästchen “Automatic metric” deaktivieren (zusätzlich zum Kontrollkästchen “Use default gateway …” natürlich) und den Wert im Feld “Interface metric:” auf einen niedrigeren Wert als die Standard-Route setzen (siehe Ausgabe ROUTE.EXE -4 print).

1
1
1
2010-04-20 19:46:26 +0000

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

eingerichtet. Dann richte ich Firefox auf meinem Client-Rechner ein, um den Proxy-Server des Laptops zu benutzen… das Ergebnis ist, daß, wenn ich FireFox oder irgendetwas anderes benutze, das für die Benutzung des Socks5-Proxys eingerichtet ist, es das VPN benutzt, ansonsten benutzt es Standard-Routing…

1
1
1
2011-08-30 09:23:19 +0000

Sie können etwas wie netcatcher verwenden - fügen Sie einfach alle Routen, die Sie benötigen, einmal hinzu und vergessen Sie es. Er fügt automatisch Routen hinzu und löscht sie, wenn Sie Ihre VPN-Sitzung verbinden oder trennen. Wenn Ihre VPN-IP-Adresse dynamisch bezogen wird (DHCP), wird netcatcher sie abfangen und die Routen auf die richtige Weise aktualisieren.

1
1
1
2013-02-18 16:37:51 +0000

vom Russischen Forum: http://forum.ixbt.com/topic.cgi?id=14:43549

als Datei speichern (z.B.: vpn_route.vbs) und nach vpn connected Befehl ausführen

cscript vpn_route.vbs

vpn_route.vbs:

strComputer = "."
strMACAddress = "MAC of VPN interface here (example 00:45:55:00:00:00)"
strTarget = "route target here (example 192.168.123.0)"
strMask = "mask here (example 255.255.255.0)"
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration Where MACAddress = '" & strMACAddress & "'")
For Each objItem in colItems
strIP = objItem.IPAddress(0)
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "route add " & strTarget & " mask " & strMask & " " & strIP
1
1
1
2019-08-07 13:42:20 +0000

Ein “kurzer” Leitfaden für Neulinge wie mich, die nicht viel über Netzwerke wissen. Nicht viel Neues hier, aber eine Zusammenfassung aller guten Optionen, die in früheren Antworten und in anderen verwandten Threads beschrieben wurden. Das gesamte Verfahren besteht aus 3 grundlegenden Schritten:

1) Sorgen Sie dafür, dass aller Datenverkehr NICHT über VPN geht. Dazu müssen Sie das Kontrollkästchen Use default gateway on remote network in den VPN-Einstellungen deaktivieren. Stellen Sie sicher, dass dieses Kontrollkästchen sowohl für IPv4 als auch für IPv6 deaktiviert ist. Normalerweise deaktiviere ich das IPv6-Protokoll einfach komplett für eine VPN-Verbindung.

(!) Es ist (manchmal) möglich, dass das Deaktivieren dieses Kontrollkästchens für die normale Arbeit ausreicht - nach meiner Erfahrung können notwendige Routen (die den notwendigen Verkehr über VPN leiten) automatisch hinzugefügt werden, nachdem die VPN-Verbindung hergestellt wurde. Ich weiß nicht genau, wo und wie diese Regeln konfiguriert sind, aber ein solches Szenario existiert - wahrscheinlich handelt es sich um Zauberei von VPN-Netzwerkadministratoren.

2) Lassen Sie nur notwendigen Verkehr über VPN laufen. Dazu müssen Sie Routen definieren. Hier haben Sie 3 Optionen:

2.1) Fügen Sie eine permanente Route über VPN-Gateway hinzu:

route -p add a.b.c.d/<CIDR> w.x.y.z oder route -p add a.b.c.d mask e.f.g.h w.x.y.z

wobei ‘VPN-Gateway’ = ‘Ihre IP im VPN-Netzwerk’ = w.x.y.z und Zieladresse/Netzwerk = a.b.c.d. Sie können w.x.y.z finden, indem Sie ipconfig ausführen und nach dem Namen Ihrer VPN-Verbindung suchen, oder, wenn Sie PowerShell verwenden, können Sie eine kompakte Ausgabe erhalten, indem Sie ipconfig | grep -A5 PPP ausführen (die nach dem Finden jeder PPP-Verbindung 5 Zeilen ausgibt).

Nachteile: Sie müssen Routen neu erstellen, wenn sich Ihre VPN-IP ändert.

2.2) Fügen Sie eine permanente Route über die VPN-Netzwerkschnittstelle hinzu:

route -p add a.b.c.d/<CIDR> 0.0.0.0 IF <interface number>

, wobei a.b.c.d die Zieladresse/Netzwerk und interface number die Kennung Ihrer VPN-Verbindung ist. Diese ID kann durch Ausführen von netstat -rn oder, für eine kompaktere Ausgabe, netstat -rn | grep -A10 'Interface List' gefunden werden.

Vorteile: Sie müssen nichts ändern, wenn sich Ihre VPN-Adresse (w.x.y.z) ändert.

Nachteile: Sie müssen Routen mit neuer ID neu erstellen, wenn Sie Ihre VPN-Verbindung löschen.

  1. 3) Verwenden Sie das Cmdlet “PowerShell”:

Add-VpnConnectionRoute -ConnectionName '<VPN connection name>' -DestinationPrefix a.b.c.d/<CIDR>

Pro: Erforderliche Routen werden bei jedem Herstellen einer VPN-Verbindung hinzugefügt und bei jedem Trennen der Verbindung gelöscht.

Cons: Es gibt kein Cmdlet “Get-VpnConnectionRoutes”, so dass es schwierig sein kann, diese Regeln zu verwalten.

3) Überprüfen Sie und stellen Sie sicher, dass das Routing wie erwartet funktioniert!

Wenn Sie persistente Routen hinzugefügt haben, können Sie diese überprüfen, indem Sie netstat -rn | grep -A10 'Persistent Routes' ausführen.

Und schließlich führen Sie einige tracert-Befehle sowohl gegen die IP-Adressen aus, auf die über VPN zugegriffen werden soll, als auch gegen diejenigen, die ohne VPN funktionieren sollen.

1
1
1
2010-10-11 21:31:43 +0000

Dies kann unter Windows nicht ohne zusätzliche Programme, Batch-Dateien oder die Befehlszeile durchgeführt werden. Eine Alternative ist, sich eine virtuelle (oder physische) Maschine zu besorgen, auf der Sie das VPN ausführen können.

Es scheint seltsam, dass etwas so leicht Erklärbares wie dies so schwer zu erreichen ist. Wie schwierig kann es sein, den Verkehr von einem Programm zur VPN-Schnittstelle und alle anderen Programme zur Standard-NIC-Schnittstelle zu leiten? Warum sollten wir dafür eine ganze virtuelle Maschine einrichten müssen? Und mit Linux ist das möglich, aber die Lösung ist auch nicht sehr elegant.

Es ist auch sehr begehrt: Ich bin auf Dutzende von Threads zum gleichen Thema gestoßen. Ich hoffe also nur, dass jemand die Lächerlichkeit dieser Sache erkennt und etwas dagegen unternimmt. (In Windows 8!)

Diese Lösung stammt aus einer unattribuierten Batch-Datei . Sie wurde leicht angepaßt.

Anweisungen für Windows 7

Das Skript stellt eine Verbindung zu Ihrem VPN her und leitet den Datenverkehr durch Ihr VPN, bis ein Neustart erfolgt - Sie können route add durch route -p add ersetzen, damit die Änderung bestehen bleibt, aber wenn Sie keine persistente IP mit Ihrem VPN haben, wird es schließlich nicht mehr funktionieren, wenn sich Ihre VPN-IP ändert.

  1. Öffnen Sie das Netzwerk- und Freigabecenter
  2. Öffnen Sie die Eigenschaften für Ihre VPN-Verbindung
  3. Klicken Sie auf die Registerkarte Networking
  4. Sowohl für IPv4 als auch für 6:
  5. Klicken Sie auf die Registerkarte Properties
  6. Klicken Sie auf die Registerkarte Advanced
  7. Deaktivieren Sie Use default gateway[...]
  8. schließen Sie alles, was Sie aus den vorherigen Schritten
  9. bearbeiten und speichern Sie das Batch-Skript unter
  10. Führen Sie es als Administrator aus

Sie müssen in dem Skript Folgendes ersetzen:

  • <VPN> durch den Namen der VPN-Verbindung, die Sie erstellt haben
  • <USER> durch den VPN-Benutzernamen
  • <PASS> durch das VPN-Passwort
  • <TARGET> durch die IP-Adresse, die durch das VPN geroutet werden soll (wenn Sie mehr Adressen routen wollen, duplizieren Sie einfach die drei Zeilen, in denen das Ziel verwendet wird)

_Hinweis: _Wenn Sie das Passwort nicht in der Datei speichern möchten, ersetzen Sie <PASS> durch %password% und fügen Sie nach der ersten Zeile des Skripts Folgendes hinzu: set password= Input password:.

Script

@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