Certains sites vérifient, avant de vous autoriser certains accès, que votre IP provient bien d'un pays autorisé à utiliser leurs services (par exemple les sites proposant la rediffusion de programmes de télévision ; cela se dit replay en patois.) Si vous passez par un VPN qui vous donne une IP étrangère, cela vous interdit ces accès.
Ou bien, si votre VPN ralentit votre connexion, vous préférez ne pas passer par celui-ci pour télécharger des fichiers (mises à jour de paquets, par exemple).
Voici comment faire :
Installer les paquets iproute2 et traceroute :
apt install iproute2 traceroute
Créez le fichier /etc/novpnfor
qui contiendra la liste des domaines concernés (un par ligne). Par exemple :
localhost smtp.free.fr freeplayer.freebox.fr freebox.fr wifi.free.fr www.free.fr sourceforge.net packages.linuxmint.com debian.linuxmint.com ftp.fr.debian.org ppa.launchpad.net download.virtualbox.org www.linuxmint-fr.org fr.archive.ubuntu.com security.ubuntu.com extras.ubuntu.com archive.canonical.com www.netflix.com
Ensuite, créez le fichier /etc/network/if-up.d/tun0
contenant :
#!/bin/sh NOVPNFOR=/etc/novpnfor IP_ROUTEUR=192.168.0.254 export NOVPNFOR export IP_ROUTEUR if [ ! -f $NOVPNFOR ]; then exit 0 fi if [ "$IFACE" != "tun0" ]; then exit 0 fi RT_TABLE9=$(echo -n $(cat /etc/iproute2/rt_tables | grep specialvpn)) if [ "$RT_TABLE9" = "" ]; then echo "9 specialvpn" | tee -a /etc/iproute2/rt_tables > /dev/null fi if [ ! -f /tmp/novpnfor.tmp ]; then # echo -n $(stat -c %Y $NOVPNFOR) > /tmp/novpnfor.tmp touch /tmp/novpnfor.tmp fi TSTAMP_OLD="$(cat /tmp/novpnfor.tmp)" TSTAMP_NEW=$(echo -n $(stat -c %Y $NOVPNFOR)) FIRST_LINE=$(echo -n $(ip route show table specialvpn | tail -1)) echo "TSTAMP_OLD=$TSTAMP_OLD" echo "TSTAMP_NEW=$TSTAMP_NEW" if [ "$TSTAMP_NEW" != "$TSTAMP_OLD" ] || [ "$FIRST_LINE" = "" ]; then { for site in $(cat $NOVPNFOR | tr "\n" " "); do { #route add -host $site gw 192.168.0.254 for anip in $(host -c IN $site | awk '{print $4}' | tr "\n" " "); do { if [ "$anip" != "alias" ] && [ "$anip" != "out" ]; then echo $anip ip route add $anip via $IP_ROUTEUR table specialvpn fi }; done }; done echo -n $(stat -c %Y $NOVPNFOR) > /tmp/novpnfor.tmp }; fi SPECIALVPN_PRESENT=$(echo -n $(ip rule list | grep specialvpn)) if [ "$SPECIALVPN_PRESENT" = "" ]; then ip rule add table specialvpn fi #service apparmor restart & exit 0
Rendez ce fichier exécutable :
sudo chmod +x /etc/network/if-up.d/tun0
Enfin, créez le fichier /etc/network/if-post-down.d/tun0
contenant :
#!/bin/sh NOVPNFOR=/etc/novpnfor export NOVPNFOR if [ ! -f $NOVPNFOR ]; then exit 0 fi if [ "$IFACE" != "tun0" ]; then exit 0 fi RT_TABLE9=$(echo -n $(cat /etc/iproute2/rt_tables | grep specialvpn)) if [ "$RT_TABLE9" = "" ]; then echo "9 specialvpn" | tee -a /etc/iproute2/rt_tables > /dev/null fi SPEC_VPN=$(echo -n $(ip rule list | grep specialvpn)) if [ "$SPEC_VPN" != "" ]; then ip rule del table specialvpn fi if [ ! -f /tmp/novpnfor.tmp ]; then touch /tmp/novpnfor.tmp fi TSTAMP_OLD="$(cat /tmp/novpnfor.tmp)" TSTAMP_NEW=$(echo -n $(stat -c %Y $NOVPNFOR)) if [ "$TSTAMP_NEW" != "$TSTAMP_OLD" ]; then ip route flush table specialvpn fi exit 0
Rendez ce fichier exécutable :
sudo chmod +x /etc/network/if-post-down.d/tun0
Vous pouvez tester ces scripts avec les commandes :
# On suppose que vous êtes connecté au VPN. sudo traceroute -m 1 DOMAINE_NON_LISTÉ sudo traceroute -m 1 DOMAINE_LISTÉ # Les deux commandes ci-dessus retournent l'IP du routeur de votre fournisseur de VPN. sudo IFACE=tun0 /etc/network/if-up.d/tun0 sudo traceroute -m 1 DOMAINE_NON_LISTÉ # La commande ci-dessus retourne l'IP du routeur de votre fournisseur de VPN. sudo traceroute -m 1 DOMAINE_LISTÉ # La commande ci-dessus retourne l'IP de votre routeur. (Pas de VPN pour ce domaine.) sudo IFACE=tun0 /etc/network/if-post-down.d/tun0 sudo traceroute -m 1 DOMAINE_NON_LISTÉ sudo traceroute -m 1 DOMAINE_LISTÉ # Les deux commandes ci-dessus retournent l'IP du routeur de votre fournisseur de VPN # si vous êtes connecté au VPN, de votre routeur sinon.où DOMAINE_NON_LISTÉ est un domaine qui ne fait pas partie de la liste contenue dans /etc/novpnfor, et DOMAINE_LISTÉ est un domaine qui en fait partie.
Le script /etc/network/if-up.d/tun0
est lancé automatiquement dès que la connexion VPN est établie.
Le script /etc/network/if-post-down.d/tun0
est lancé automatiquement une fois la connexion VPN tombée.
2 personnes ont visité cette page aujourd'hui et 558 en tout.