web-dev-qa-db-fra.com

Exempter les programmes de l'utilisation d'une connexion VPN active

Lorsque je me connecte à un VPN, tout mon trafic réseau y est automatiquement acheminé. Y a-t-il un moyen d'ajouter des exemptions à cela? Je ne sais pas si l'ajout d'exceptions a quelque chose à voir avec le protocole VPN, mais le VPN que j'utilise est du protocole OpenVPN.

En parlant d’OpenVPN, pourquoi n’est-il pas installé par défaut sur les installations d’Ubuntu contrairement à PPTP?

Je n'ai pas pu obtenir la liste des serveurs d'IRCHighWay, et voici le résultat de ma tentative de connexion à XChat avec l'exécution du script bash:

* Looking up irc.irchighway.net
* Connecting to irc.irchighway.net (65.23.153.98) port 6667...
* Connected. Now logging in...
* You have been K-Lined.
* *** You are not welcome on this network.
* *** K-Lined for Open proxies are not allowed. (2011/02/26 01.21)
* *** Your IP is 173.0.14.9
* *** For assistance, please email [email protected] and include everything shown here.
* Closing Link: 0.0.0.0 (Open proxies are not allowed. (2011/02/26 01.21))
* Disconnected (Remote Host closed socket).

L'IP 173.0.14.9 est celui dû à mon VPN. J'avais oublié de vérifier ip route list avant d'exécuter le script, et voici celui qui l'a exécuté:

~$ ip route list
99.192.193.241 dev ppp0  proto kernel  scope link  src 173.0.14.9 
173.0.14.2 via 192.168.1.1 dev eth1  proto static 
173.0.14.2 via 192.168.1.1 dev eth1  src 192.168.1.3 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.3  metric 2 
169.254.0.0/16 dev eth1  scope link  metric 1000 
default dev ppp0  proto static

Oh, et l'exécution du script a renvoyé cette sortie:

~$ Sudo bash irc_route.sh
Usage: inet_route [-vF] del {-Host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
       inet_route [-vF] add {-Host|-net} Target[/prefix] [gw Gw] [metric M]
                              [netmask N] [mss Mss] [window W] [irtt I]
                              [mod] [dyn] [reinstate] [[dev] If]
       inet_route [-vF] add {-Host|-net} Target[/prefix] [metric M] reject
       inet_route [-FC] flush      NOT supported

J'ai exécuté le script après la connexion au VPN.

8
Oxwivi

Créez un fichier, irc_route.sh, qui contient:

#!/bin/bash
# script to make connections to irc.irchighway.net go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
route add -Host irc.irchighway.net gw $GW $DEV

Changez DEV pour être l'interface avec laquelle vous obtenez votre connexion Internet (par exemple, wlan0, eth1, eth0, ppp0). Ensuite, exécutez le script avec Sudo bash irc_route.sh, vous pouvez vérifier les résultats en exécutant ip route list avant et après.

L'adresse IP de la passerelle par défaut pour le trafic Internet sur le périphérique DEV est stockée dans la variable GW, qui est ensuite utilisée pour router tout le trafic allant au serveur irc.irchighway.net via votre GW par défaut au lieu de la connexion OpenVPN que vous avez.

Pour que cela fonctionne avec tous les serveurs IRCHighWay, vous devez obtenir une liste de tous les serveurs.

liste_serveur.txt:

 irc.irchighway.net
 caliburn.pa.us.irchighway.net

Scénario:

#!/bin/bash
# script to make connections to irchighway go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
cat server_list.txt| xargs -iSERVER route add -Host SERVER gw $GW $DEV

Il existe une solution "plus facile", vous pouvez marquer les ports et les routes en fonction, voir tutoriel iproute2 mais je ne l'ai pas utilisé. Et il y a quelques problèmes avec ce type de routage si vous ne savez pas ce que vous faites.

6
Erik Johansson

Vous ne pouvez pas empêcher des programmes spécifiques d'établir des connexions via le VPN, mais s'ils souhaitent atteindre un hôte ou un numéro de port spécifique, c'est possible. Je vais supposer dans le pire des cas que vous voulez que certaines applications contournent le pare-feu.

Cela devrait être possible en utilisant SELinux, en bannissant les connexions réseau d'un programme. Je ne connais pas de bons outils pour faire cette configuration, ni comment le changer à la volée.

Je pense qu’il était une fois un module dans iptables qui pourrait correspondre à un programme d’envoi, mais je ne l’ai pas vu depuis un moment.

1
Erik Johansson