181 votes

Comment puis-je faire en sorte que le VPN Windows achemine un trafic sélectif (par réseau de destination) ?

Je veux utiliser un VPN Windows mais uniquement pour un réseau particulier, afin qu'il ne prenne pas le contrôle de toute ma connexion réseau.

Par exemple, au lieu que le VPN devienne la route par défaut, faites en sorte qu'il ne soit que la route pour 192.168.123.0/24.

(Je peux voir qu'il y a une solution pour cela pour Ubuntu dans cette question mais il m'arrive aussi de devoir le faire sous Windows).

Est-ce que cela peut être automatisé pour que chaque fois que je me connecte au VPN, il fasse cela ?

8voto

Eldhenn Points 81

J'ai découvert qu'il fallait pointer directement l'interface dans la commande route. Sans cela, Windows va utiliser l'interface de la carte réseau principale, au lieu du VPN. Dans mon cas, cela 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".

4voto

Dave Points 41

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

3voto

TheCompWiz Points 10142

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 routes comme il convient. Il existe des options pour supprimer la route par défaut... et ajouter diverses routes statiques et autres. C'est ce qu'on appelle un " split-tunnel ".

Il y a un bon mode d'emploi ici : http://blogs.technet.com/b/rrasblog/archive/2007/06/11/split-tunnelling-using-cmak.aspx

2voto

phk Points 315

Je veux ajouter ma solution au mélange. Elle fonctionne sur un Shell UNIX alimenté par Cygwin sous Windows 7 ou plus récent, mais devrait également fonctionner avec MSYS2, Bash-on-Windows [WSL] après la construction 14986, ou Busybox pour Windows). Doit être exécuté avec des privilèges d'administrateur.

Il a quelques paramètres et essaie de détecter certaines des choses que vous n'avez pas explicitement définies. Il définit également le numéro d'interface (IF) de manière explicite pour contrer certains problèmes que certains utilisateurs (comme moi) ont rencontrés avec les autres solutions proposé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 faible, sinon la route par défaut correspondra avant le trafic destiné au VPN. Pour ce faire, il faut se rendre dans le paramètre de l'adaptateur où l'on ouvre le champ " Propriétés" pour l'adaptateur VPN "Mise en réseau" onglet "Protocole Internet version 4 (TCP/IP)" Propriétés "Avancé" et là, vous décochez l'option "Métrique automatique" (en plus de la case à cocher "Utiliser la passerelle par défaut " bien sûr) et définir la valeur dans le "Métrique de l'interface :" à une valeur inférieure à celle de l'itinéraire par défaut (cf. ROUTE.EXE -4 print sortie).

1voto

Lonnie Points 11

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

Ensuite, j'ai configuré Firefox sur mon ordinateur client pour qu'il utilise le serveur proxy de l'ordinateur portable Le résultat est que si j'utilise FireFox ou n'importe quoi d'autre qui est configuré pour utiliser ce proxy Socks5, il utilisera le VPN, sinon il utilise le routage standard

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X