L'idée générale est de modifier la table de routage afin que seuls les sous-réseaux connus du bureau (blocs d'adresses) soient acheminés par votre interface VPN (par exemple ppp0) et que tous les autres sous-réseaux soient acheminés par votre interface réseau normale (par exemple en0). Lorsque vous vous connectez au VPN, le gestionnaire de réseau de Gnome ajoute une route par défaut à l'interface VPN (ppp0). Vous devez supprimer cette route et ajouter de nouvelles entrées de routage pour les sous-réseaux connus du bureau.
Tout d'abord, vous devez trouver quels sous-réseaux privés sont utilisés par le réseau de votre bureau. Le moyen le plus simple est de demander aux administrateurs du réseau de votre bureau. Si ce n'est pas possible, vous pouvez le déterminer vous-même en résolvant les noms d'hôtes de votre bureau après vous être connecté au VPN. Par exemple :
$ nslookup service.company.office
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: service.company.office
Address: 192.168.1.22
Dans ce cas, le sous-réseau que vous devez acheminer via votre VPN est 192.168.1.0/24, c'est-à-dire toutes les adresses comprises entre 192.168.1.0 et 192.168.1.255. Votre bureau peut avoir plus d'un sous-réseau que vous devez acheminer.
Deuxièmement, vous devez modifier la table de routage en utilisant ip
commande. Imprimez le tableau en tapant ip r
et cherchez une entrée qui pointe vers le dispositif VPN :
$ ip r
default dev ppp0 proto static scope link metric 50
default via 192.168.20.1 dev eno1 proto dhcp metric 100
...
192.168.20.0/24 dev eno1 proto kernel scope link src 192.168.20.126 metric 100
192.168.100.1 dev ppp0 proto kernel scope link src 192.168.100.89 metric 50
Donc maintenant vous savez que ppp0
est votre dispositif VPN. Dans mon exemple, il y a deux routes par défaut mais ppp0
a une métrique plus petite, donc tout le trafic va là. Maintenant, ajoutez une route séparée vers le réseau de votre bureau :
$ ip route add 192.168.1.0/24 dev ppp0 proto static scope link
Maintenant, il suffit de supprimer la route par défaut vers ppp0
et vous êtes prêt à partir :
$ ip route delete default dev ppp0
Vous pouvez automatiser cela par le script suivant :
#!/bin/bash
# List your office networks
networks=(
192.168.1.0/24
192.168.2.0/24
)
# Execute it with sudo
if [ $(id -u) != "0" ]; then
echo "You must be root to execute this script. Use sudo?"
exit -1
fi
# Check if VPN is active. You can use ipsec status command
# if your VPN is not L2TP
tunnel=$(ip l2tp show tunnel 2>&1)
if [ -z "$tunnel" ]; then
echo "VPN is not active."
exit -2
fi
# Add office private network routes
for net in ${networks[*]}; do
ret=$(ip route add $net dev ppp0 proto static scope link 2>&1)
if [[ $ret =~ "File exists" ]]; then
echo "routes have been already added."
exit -3
fi
done
# Delete default routes so Internet is routed via local ISP
ip route delete default dev ppp0