Split-tunnelling et OpenVPN

J’utilise un client OpenVPN pour préserver mon anonymat sur internet, et une chose me dérangeait : dès l’activation du VPN, tout mon trafic passait par cette connexion.

Ce qui pouvait provoquer quelques désagréments lors de la navigation sur les sites marchands ou bancaires, qui détectaient une connexion en provenance d’un autre pays, ce qui déclenchait une procédure de vérification d’identité par SMS ou par mail.

D’autres fois, c’était simplement le serveur VPN qui était détecté, et le site visité affichait une Captcha pour m’autoriser à y accéder. Bref, ça devenait difficile à utiliser au quotidien.

La solution était de faire du Split Tunnelling, c’est-à-dire de faire en sorte que seules les applications de mon choix utilisent cette connexion VPN, et que les autres continuent à utiliser la connexion par défaut, celle de mon fournisseur internet.

Voyons voir comment faire cela avec Ubuntu et une connexion OpenVPN, il faut mettre un peu les mains dans le cambouis, c’est-à-dire ouvrir un terminal ! 😉 Mais franchement, cela a été beaucoup plus simple que je ne le pensais.

Le Network Manager d’Ubuntu

Et ça aurait pu être vraiment simple, si le Network Manager (l’interface graphique d’Ubuntu pour configurer le(s) réseau(x) acceptait une telle configuration, mais ce n’est hélas pas le cas. Toute connexion OpenVPN activée via cette interface va rediriger tout le trafic sur la nouvelle connexion.

J’ai trouvé cette information sur la documentation française d’Ubuntu :

À noter que le plugin propose d’importer le profil depuis un fichier de configuration openvpn. Cette option est assez pratique mais perdra tous les réglages non pris en charge directement par network-manager, ce qui est bien dommage, en particulier les routages différenciés pour ne router qu’une partie du trafic par le vpn et les scripts up et down.

Le fournisseur VPN

J’ai donc posé la question à mon nouveau fournisseur VPN : après tout c’est lui le mieux placé pour me répondre, et comme je venais de changer, c’était aussi une façon de tester le support.


Petit aparté : si j’ai changé de fournisseur c’est parce que BunkerVPN (dont j’étais très satisfait en terme de qualité de service et même d’éthique) n’acceptait que les paiements en Bitcoin ou Monero. Cette première expérience de paiement en monnaie électronique (voir cet article) ne m’avait pas du tout plu car il y avait des frais à chaque transaction.

Toujours à ce sujet, Mozilla Firefox a commencé très récemment à fournir un service de VPN, mais pas encore en France, ni sur Linux ! 🙁 Mais ce sera peut-être une option intéressante dans quelques mois, ce serait un moyen sympa d’aider la fondation Mozilla… À voir, si l’on en croit les informations de Clubic, ils se sont associés avec Mullvad, or c’est le nouveau fournisseur que j’ai choisi, pour son prix correct et sa réputation (article) ! Le monde est petit… 😎


Mais revenons à mon problème : le support de Mullvad a répondu rapidement, et m’a confirmé la faisabilité de la chose, en me renvoyant vers cette page d’assistance.

Cela m’a paru assez obscur au début, et j’ai mis cela de côté. Je m’y suis remis ce matin, et finalement c’est assez facile à réaliser.

La configuration

Il faut donc oublier le fichier .ovpn fourni par Mullvad (et utilisé par le Network Manager d’Ubuntu), et récupérer le fichier .conf fourni par défaut pour les systèmes Linux. J’ai choisi la France comme lieu de sortie pour ce premier essai.

On édite alors le fichier mullvad_fr_par.conf fourni par mullvad, et on l’édite pour y ajouter les instructions de routage comme indiqué sur la page d’assistance :

route-nopull
route 10.0.0.0 255.0.0.0
route 193.138.218.74 255.255.255.255

Puis on lance la connexion via un terminal avec cette commande :

sudo openvpn --config mullvad_fr_par.conf

À ce stade, on peut déjà vérifier qu’une interface tun0 a bien été créée sur le système :

Puis on va dans qBittorrent, que j’ai configuré pour n’utiliser que l’interface tun0 (celle créée par défaut lors d’une connexion VPN) dans les paramètres Avancés :

qBittorrent ne fonctionnera que sur l’interface « tun0 »

Puis on va dans les paramètres Connexion définir le Proxy SOCKS5 avec les informations fournies par Mullvad sur cette page :

Pour finir je relance qBittorrent après avoir validé ces nouveaux paramètres. Il s’agit maintenant de vérifier qu’il se connecte bien sur l’interface tun0 alors que les autres applications sont bien restées sur enp3s0 (l’interface réseau par défaut de mon PC).

Je fais cela à l’aide de la commande sudo nethogs (que l’on installe par un sudo apt install nethogs) : on voit que les Firefox et autres Thunderbird restent bien sur l’interface enp3s0 :

qBittorrent est bien la seule application à utiliser l’interface ‘tun0’

Tout fonctionne comme attendu, c’est génial ! 😎

Démarrage automatique

OpenVPN utilise un fichier de configuration : /etc/default/openvpn. Par défaut, celui-ci est configuré pour démarrer automatiquement tout fichier .conf qu’il trouvera dans /etc/openvpn (variable AUTOSTART définie à ALL).

Il y a donc simplement à copier les fichiers fournis par Mullvad dans ce répertoire, en particulier le mullvad_fr_par.conf précédemment modifié. J’y ai également copié les autres : mullva_ca.crt et update-resolv-conf.

Conclusion

Tout fonctionne parfaitement, le tunnel VPN est créé au démarrage du PC, et est utilisé par qBittorrent si je le lance, et seulement par lui.

De plus, en sortie de veille, le tunnel existe toujours, ce qui n’était pas le cas avec le Network Manager. Mine de rien, ça simplifie la vie ! 😎

J’aurai bien aimé trouver une solution pour utiliser cette configuration tout en pouvant lancer cette connexion à partir du menu d’Ubuntu, mais je n’ai pas trouvé. Si j’ai bien compris, ce n’est pas possible, à cause des limitations du Network Manager, comme je l’expliquais au début de l’article.

Le Network Manager stocke ses fichiers de configuration dans /etc/NetworkManager/system-connections. J’ai pu, à partir d’un fichier .ovpn fourni par Mullvad (il faut dans ce cas choisir Android comme système pour récupérer ce type de fichier), créer mes connections via ce Network Manager.

Je ne sais pas s’il est possible de modifier ces fichiers manuellement pour y ajouter les règles de routage ? De ce que j’ai pu lire, la réponse est non, mais je n’ai pas de certitudes à ce sujet.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *