web-dev-qa-db-fra.com

Comment rendre le trafic sélectif de la route Windows VPN (par réseau de destination)?

Je souhaite utiliser un réseau privé virtuel Windows, mais uniquement pour un réseau particulier, afin de ne pas prendre en charge l'intégralité de ma connexion réseau.

par exemple, au lieu que le VPN devienne la route par défaut, définissez uniquement la route pour 192.168.123.0/24.

(Je peux voir qu'il existe une solution pour cela pour Ubuntu dans cette question , mais parfois je dois le faire aussi sous Windows)

Cela peut-il être automatisé de sorte que chaque fois que je me connecte au VPN, cela se fasse?

135
Legooolas

Vous pouvez désactiver la prise en charge de l'intégralité de votre connexion en accédant aux propriétés du VPN, de l'onglet Networking, des propriétés Internet Protocol (TCP/IP), Advanced, décochant Use default gateway on remote network. Cela peut ou non laisser une route à 192.168.123.0/24 en fonction de la configuration du serveur VPN. Si ce n'est pas le cas, vous devrez ajouter manuellement l'itinéraire chaque fois, bien que vous puissiez le placer dans un fichier de traitement par lots.

Pour ajouter manuellement la route, exécutez (en tant qu'administrateur):

route -p add 192.168.0.12 mask 255.255.255.255 10.100.100.254

Cet exemple créera un itinéraire persistant (il n'est pas nécessaire d'exécuter la commande après un redémarrage) vers l'IP 192.168.0.12 via la passerelle VPN 10.100.100.254.

Plus d'informations à ce sujet sur http://technet.Microsoft.com/en-us/library/bb878117.aspx

135
TRS-80

J'ai utilisé avec succès la technique de @ TRS-80 / pour y parvenir.

Je travaille de chez moi et je dois utiliser un VPN sur le réseau de l'entreprise pour mon courrier électronique (je déteste les courriers électroniques !!).

En même temps, je dois constamment surfer sur Internet et sur youtube pour ma musique de fond ... Maintenant, vous ne voulez certainement pas diffuser YouTube sur un VPN, car cela ressemble à un Robot Singing !!! :)

Je n'ai fait que suivre @ TRS-80:

propriétés du VPN, onglet Réseau, Propriétés "Protocole Internet (TCP/IP)", Options avancées, décochez "Utiliser la passerelle par défaut sur le réseau distant".

et ensuite mon propre:

sous l'onglet DNS, cochez "enregistrer les adresses de ces connexions dans le DNS"

Tout fonctionne parfaitement!

19
bPratik

Accordé cette réponse ne reflète pas votre demande mais j'utilise un VM spécifiquement à cet effet. Ainsi, seul le réseau à l'intérieur de la VM est limité par les routes.

Vous pouvez trouver de meilleures réponses d’autres personnes, mais au moins, cela peut vous donner quelque chose à considérer, car il s’agit d’une solution simple après la création du VM.

8
Wayne

J'ai trouvé qu'il fallait directement pointer l'interface dans la commande route. Sans cela, Windows utilisera l'interface de la carte réseau principale au lieu du VPN. Dans mon cas, ça ressemble à

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

notez le 'IF 26'.

7
Dmitry Petrov

si vous avez à la fois IPV4 et IPV6, vous devez décocher l'option "Utiliser la passerelle par défaut sur un réseau distant" aux deux endroits, même si vous utilisez uniquement IPV4.

4
Dave

Si vous utilisez le CMAK et configurez un fichier de routage que le client peut télécharger ... Windows téléchargera le fichier de routage et ajustera les itinéraires en fonction des besoins. Il existe des options pour supprimer la route par défaut ... et ajouter diverses routes statiques et autres. Ceci est connu comme un tunnel split.

Il existe un bon guide ici: http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

3
TheCompWiz

Je veux ajouter ma solution au mélange. Il fonctionne sur un shell UNIX alimenté par Cygwin sous Windows 7 ou version ultérieure, mais devrait également fonctionner avec MSYS2, Bash-on-Windows [WSL] après la génération 14986 ou Busybox pour Windows). Doit être exécuté avec les privilèges d'administrateur.

Il comporte certains paramètres et tente de détecter certaines choses que vous n'avez pas explicitement définies. Il définit également le numéro d'interface (IF) explicitement pour contrer certains problèmes que certains utilisateurs (comme moi) ont rencontrés avec les autres solutions présentées ici.

#!/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

Il convient également de noter qu'il peut être nécessaire de définir manuellement une métrique basse ou sinon, la route par défaut correspondra avant le trafic destiné au VPN. Pour ce faire, accédez au paramètre d'adaptateur dans lequel vous ouvrez l'élément de menu "… Propriétés" de l'adaptateur VPN → "Réseau" onglet → "Protocole Internet version 4 (TCP/IP)" Propriétés → "Avancé" → et cochez la case "Mesure automatique" (en plus du "Utiliser la passerelle par défaut…" bien sûr) et définissez la valeur dans le "Interface metric:" field à une valeur inférieure à la route par défaut (voir ROUTE.EXE -4 print output).

2
phk

Utilisez Add-VpnConnectionRoute cmdlet dans Windows 8+.

Add-VpnConnectionRoute -ConnectionName 'My VPN Connection' -DestinationPrefix 192.168.123.0/24
2
Der_Meister

Vous pouvez utiliser quelque chose comme netcatcher - ajoutez simplement tous les itinéraires dont vous avez besoin et oubliez-le. Il ajoutera et supprimera automatiquement des itinéraires lorsque vous connectez ou déconnectez votre session VPN. Si votre adresse IP VPN est obtenue de manière dynamique (DHCP), netcatcher le détectera et mettra à jour les itinéraires de manière appropriée.

1
Andy

du forum russe: http://forum.ixbt.com/topic.cgi?id=14:43549

enregistrer en tant que fichier (ex: vpn_route.vbs) et après la commande d'exécution connectée au vpn

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
shibormot

Un peu vieux mais j'ai trouvé un moyen de faire cela en utilisant une autre machine. J'ai un ordinateur portable sur lequel je configure la connexion VPN et sur celui-ci, FreeProxy est configuré avec Socks5.

Ensuite, j'ai configuré firefox sur ma machine cliente pour utiliser le serveur proxy de l'ordinateur portable. Le résultat est que si j'utilise FireFox ou tout ce qui est configuré pour utiliser ce proxy Socks5, il utilisera le VPN, sinon il utilise un routage standard.

1
Lonnie

Cela ne peut pas être fait sous Windows sans utiliser des programmes supplémentaires, des fichiers de commandes ou la ligne de commande. Une alternative consiste à obtenir une machine virtuelle (ou physique) sur laquelle vous pouvez exécuter le VPN.

Il semble étrange que quelque chose d'aussi facilement explicable que cela soit si difficile à réaliser. Est-il difficile de simplement acheminer le trafic d'un programme à l'interface VPN et à tous les autres programmes vers l'interface par défaut NIC? Pourquoi aurions-nous besoin de configurer une machine virtuelle complète pour cela? Et avec Linux c'est possible mais sa solution n'est pas très élégante non plus.

C'est aussi très recherché: je suis tombé sur des dizaines de sujets sur le même sujet. J'espère donc que quelqu'un réalise la ridicule et fait quelque chose à ce sujet. (Sous Windows 8!)

Cette solution provient d'un fichier de commandes non attribué . Il a été légèrement adapté.

Instructions pour Windows 7

Le script se connectera à votre VPN et acheminera le trafic jusqu’à ce qu’il redémarre - vous pouvez remplacer route add par route -p add pour que la modification persiste, mais si vous n’avez pas une adresse IP persistante avec votre VPN, elle cessera de fonctionner lorsque votre adresse IP changements.

  1. Ouvrez le centre de réseau et de partage
  2. Ouvrez les propriétés de votre connexion VPN
  3. Cliquez sur l'onglet Networking
  4. Pour IPv4 et 6:
    1. Cliquez sur Properties
    2. Cliquez sur Advanced
    3. Décocher Use default gateway[...]
  5. Fermez tout ce qui a été ouvert depuis les étapes précédentes
  6. Editez et sauvegardez le script batch ci-dessous
  7. Exécutez-le en tant qu'administrateur

Vous devez remplacer les éléments suivants dans le script:

  • <VPN> avec le nom de la connexion VPN que vous avez créée
  • <USER> avec le nom d'utilisateur VPN
  • <PASS> avec le mot de passe VPN
  • <TARGET> avec l'adresse IP que vous voulez acheminer via le VPN (si vous souhaitez acheminer plus d'adresses, dupliquez simplement les trois lignes où la cible est utilisée)

Remarque: Si vous ne souhaitez pas enregistrer le mot de passe dans le fichier, remplacez <PASS> par %password% et ajoutez ce qui suit après la première ligne du script: 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
1
Xantippe