web-dev-qa-db-fra.com

Utiliser la connexion VPN uniquement pour les applications sélectionnées

J'ai accès à un VPN et je ne veux l'utiliser que pour certaines applications, pas toutes.

Par exemple:
Si je me connecte à un VPN, je souhaite que seules les applications Opera et Newsbin utilisent cette connexion VPN. Toutes les autres applications, comme f.e. Outlook, doit utiliser la connexion Internet normale (lorsque le VPN est connecté/ouvert).

Afaik ce n'est pas possible, mais je ne suis pas totalement sûr. Donc donc ma question: est-ce faisable?

34
user18861

C'est possible, au moins sous Linux (et je pense aussi à BSD et OS X). Vous pouvez le faire en:

  • Créez un utilisateur supplémentaire pour tout le trafic VPN.
  • Créez une table de routage supplémentaire avec 1 route par défaut via le VPN.
  • Configurez Netfilter via Iptables pour utiliser l'autre table de routage pour tout le trafic provenant d'un ID utilisateur spécifique.
  • Exécutez les applications devant utiliser le VPN sous leur propre utilisateur. Par exemple avec 'Sudo'.

Il y a des scripts pour accomplir les étapes ci-dessus ici ou un autre guide ici .

Voici un guide détaillé pour le routage de la transmission via un réseau VPN (à l'aide d'un serveur VPN que vous possédez).

33
Freeaqingme

Vous pouvez utiliser le Pare-feu Windows pour y parvenir (à condition d’utiliser Windows 7 ou Vista) - J'ai écrit un guide à ce sujet

  1. Connectez-vous à votre VPN comme vous le feriez normalement.

  2. Ouvrez le Centre Réseau et partage - cliquez avec le bouton droit sur l'icône de connexion Internet dans la barre des tâches et choisissez "Ouvrir le Centre Réseau et partage" (voir ci-dessous).

  3. Vous devriez voir (au moins) deux réseaux énumérés sous "Afficher vos réseaux actifs" - votre connexion VPN et un réseau appelé "Réseau" - a.k.a. votre connexion ISP. Assurez-vous que votre VPN est un "réseau public" et que votre connexion ISP est un "réseau domestique". Si vous devez modifier l’une ou l’autre des connexions, cliquez dessus et une fenêtre d’options apparaîtra (voir ci-dessous).

  4. Allez dans le Panneau de configuration et cliquez sur Système et sécurité (voir ci-dessous).

  5. Dans la fenêtre résultante, cliquez sur Pare-feu Windows (voir ci-dessous).

  6. Dans la fenêtre Pare-feu Windows, cliquez sur Paramètres avancés dans le volet de gauche (voir ci-dessous). Remarque: Vous devez être connecté en tant qu'administrateur pour modifier les paramètres du pare-feu.

  7. Vous devriez voir une fenêtre intitulée Pare-feu Windows avec sécurité avancée. Dans cette fenêtre, cliquez sur Règles entrantes (voir ci-dessous).

  8. Dans le volet de droite, vous verrez une option pour une nouvelle règle. Cliquez dessus (voir ci-dessous).

  9. Dans la nouvelle règle entrante Wizard (qui devrait apparaître), procédez comme suit:

    • Choisissez le programme et cliquez sur Suivant.

    • Choisissez le programme que vous souhaitez bloquer tout le trafic sauf sur la connexion VPN, puis cliquez sur Suivant.

    • Choisissez Bloquer la connexion.

    • Tick ​​Domaine et privé. Assurez-vous que Public est décoché.

  10. Répétez l'étape 9 pour les règles sortantes.

14
pramble

Si vous êtes sur Linux et que vous utilisez openVPN, VPNShift fonctionne à merveille.

1
thouliha

Je l'ai fait sous Windows. L'idée est de lier les packages réseau sortants à l'interface VPN. Les gens suggèrent ForceBindIP , mais grâce à cette réponse j'ai a eu une idée d'utiliser un proxy. L’inconvénient de cette méthode est que vos applications doivent avoir un support proxy ou vous devez utiliser un proxy (voir ici et ici ). L'avantage est que, de cette manière, vous serez en mesure de limiter l'utilisation du VPN dans le navigateur à des domaines spécifiques à l'aide de FoxyProxy ou de modules complémentaires similaires.

J'utilise 3proxy en mode SOCKS et lie son interface externe à l'IP du VPN. OpenVPN est utilisé pour la connexion VPN.

Dans mon fichier .ovpn (client, dev tun), j'ai ajouté ces lignes:

route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'

route-nopull pour ignorer les itinéraires envoyés par le serveur. Dans votre cas, vous devrez peut-être commenter la passerelle de redirection à la place.

route pour ajouter une route pour cette interface, sans cette ligne, elle ne sera pas utilisée même si l'application y est liée.

pull-filter pour conserver le DNS poussé qui, sinon, serait abandonné par route-nopull avec les routes poussées. Cette option est prise en charge à partir de OpenVPN 2.4. Si vous devez vous en tenir à OpenVPN 2.3 (dernière version pour Windows XP), vous devrez plutôt ajouter deux lignes dhcp-option DNS x.x.x.x avec des adresses IP codées en dur.

script-security 2 pour autoriser les scripts.

up script:

cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf

down script:

taskkill /f /im 3proxy.exe

Ainsi, après vous être connecté au VPN à l'aide de cette configuration, le processus 3proxy.exe sera lancé et un proxy SOCKS5 limité à l'hôte local avec la capacité de résolution DNS s'exécutera sur le port 1080, il suffit maintenant de configurer votre application pour qu'elle utilise localhost:1080 SOCKS.

1
user

Accédez simplement au VPN via une machine virtuelle.

  1. Créez une machine virtuelle, puis à l'intérieur de celle-ci ...
  2. Installer les applications 'sélectionnées'
  3. Configurez le VPN

Utilisez les applications 'sélectionnées' à partir de la VM au lieu de les utiliser à partir de la machine hôte.

P.S. Vous devez bien sûr accorder un accès réseau à la VM via la machine hôte.

0
drowa

Vous pouvez le faire avec des espaces de noms réseau sous GNU/Linux.

Voici comment exécuter OpenVPN et une seule application dans un espace de noms séparé:

Créez l'espace de noms réseau net:

ip netns add myvpn

Démarrer l'interface de bouclage dans l'espace de noms (sinon beaucoup de choses ne fonctionnent pas comme prévu…)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

Créer des interfaces réseau virtuelles qui laisseront OpenVPN (dans l'espace de noms) accéder au réseau réel et configurer l'interface dans l'espace de noms (vpn1) pour utiliser l'interface hors de l'espace de noms (vpn0) comme passerelle par défaut

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

Activez le routage IPv4 et NAT pour l'interface dans l'espace de noms. Comme mon interface par défaut est une interface sans fil, j’utilise wl + (qui peut correspondre à wlan0, wlp3s0, etc.) dans iptables pour l’interface sortante; si vous utilisez une interface filaire, vous devriez probablement utiliser en + (ou br + pour une interface pontée)

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

Configurez le serveur de noms à utiliser dans l'espace de noms

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

Presque terminé, nous devrions maintenant avoir un accès complet au réseau dans l'espace de noms.

ip netns exec myvpn ping www.google.com

Enfin, lancez OpenVPN dans l’espace de noms.

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

Une fois que tun0 est présent dans l'espace de noms, vous êtes prêt à démarrer le programme souhaité!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn Sudo -u $MYSELF popcorntime

Article SOURCE.

Il existe également un script de wrapper dans l'article source que vous pouvez adapter à vos besoins.

0
PocketSam