URL: https://linuxfr.org/users/jeanclaude-2/journaux/un-peu-de-configuration-reseau-pour-vpn Title: Un peu de configuration réseau pour VPN Authors: barmic 🦦 Date: 2020年06月14日T19:38:51+02:00 Tags: networkmanager, dnsmasq, systemd, debian, vpn et vpnc Score: 15 Comme d'autres, j'ai découverts ces derniers temps les joies du travail à distance. Pour cela toujours dans l'originalité nous utilisons vpnc. J'ai déjà utilisé ce vpn quand j'étais à la fac, pas de problème particulier pour une utilisation de base. Néanmoins, j'ai mis en place quelques astuces pour rendre l'usage plus agréable pour moi et c'est ce que je vais décrire ici. Rien d'incroyable, mais si ça peut aider quelqu'un c'est toujours ça. # Le DNS : dnsmasq C'est le plus important. vpnc quand il s'active modifie vos DNS (dans `/etc/resolv.conf`). C'est logique si le réseau auquel vous tentez d'accéder gère lui-même ses domaines, mais ça pose des soucis : - vous ne voulais pas forcément que toutes vos requêtes DNS transitent par le DNS de votre entreprise. Si vous oubliez d'arrêter votre client VPN (entre midi et 2 ou le soir par exemple), vous pouvez ne pas vouloir que votre employeur sache sur quels sites vous allez - on peut imaginer que les DNS de votre entreprise fassent du filtrage - plus prosaïquement, ces DNS sont loin, le réseau peut ne pas être très bon et avoir tout son trafic ralentit parce que la connexion avec le réseau de votre entreprise a des problèmes c'est dommage et assez frustrant La solution la plus simple est d'utiliser `dnsmasq`. C'est un serveur DNS[^1] qui est fait soit pour être utilisé au sein d'un réseau privé soit directement sur votre machine (pour un usage sur internet on privilégiera `bind` par exemple). L'objectif est simple : il va nous servir de proxy : - les requêtes concernant un domaine de votre entreprise vont vers les DNS de votre entreprise (ceux qui sont configurés par le VPN) - les autres vont vers le DNS que vous souhaitez (celui de votre FAI ou autre) Pour faire tout ça c'est simple : ```sh apt install dnsmasq ``` J'ai laissé sa conf de base et j'ai simplement ajouté un fichier `/etc/dnsmasq.d/ma-config.conf` contenant : ``` server=/{domaine1}/{dns1} server=/{domaine2}/{dns2} server={dns FAI 1} server={dns FAI 2} ``` Chaque ligne indique pour un domaine donné (et tous ses sous domaines) quel DNS utiliser. Quand on indique pas de domaine c'est le DNS par défaut. On a un DNS tout beau et tout propre, maintenant ce serait bien de s'en servir. # Config réseau : NetworkManager J'utilise NetworkManager (nm) pour configurer mon réseau généralement. J'en suis pas forcément fan, mais pour des réseaux wifi il est pratique. Il est possible de demander à nm de lancer lui-même dnsmasq. Je n'en ai pas l'intérêt personnellement. Pour pouvoir choisir son serveur DNS, il faut éditer sa configuration réseau pour demander "Adresse only" et on peut ainsi choisir un DNS qui ne sera pas pris depuis la configuration DHCP. # VPN : vpnc Il reste à lancer vpnc. La base pour le lancer c'est : ```sh vpnc plouf.conf # démarré avec la conf décrite dans `/etc/vpnc/plouf.conf` vpnc-disconnect # pour l'arrêter ``` Encore une fois il est possible d'utiliser l'intégration avec nm, mais ce n'est pas ce que j'utilise. Sur ma debian stable, ce qui gère la configuration système autour de l'ouverture de la connexion par vpnc est le script `/usr/share/vpnc-scripts/vpnc-script` C'est un script qui est lancé après l'ouverture de la connexion par vpnc. Malheureusement, il ne gère pas d'ensemble de script pour que je puisse faire ma modif dans mon coin. On peut trouver sur internet des gens qui parlent d'une configuration `DNSUpdate`, mais elle n'est pas reconnue chez moi. J'aurais pu utiliser une diversion debian, mais je vais partir sur un truc bête et méchant je crée le fichier `/usr/share/vpnc-scripts/vpnc-script.custom.sh` ```sh #!/bin/sh /usr/share/vpnc-scripts/vpnc-script cat> /etc/resolv.conf < /dev/null if [[ $? == 0 ]]; then echo "vpn: on" else echo "vpn: off" fi ``` et le petit bout de conf i3blocks qui va bien : ``` [vpn] command=/usr/local/bin/vpn-check interval=5 color=#C5D86D ``` Ça fonctionne bien, mais c'est assez frustrant. C'est à nous de remonter la connexion manuellement. Pour palier à ça, j'ai choisi de mettre en place un watchdog. Pour le plaisir de la découverte, j'ai choisi d'utiliser systemd pour ça. L'idée c'est de voir le vpn comme un service, je le lance et systemd se débrouille (en fait je vais l'aider un peu hein) pour maintenir la connexion. Je crée un petit script perl : ```pl #!/usr/bin/env perl use strict; use warnings; use Net::Ping; use 5.010; use autodie; use Time::HiRes qw(usleep); use Systemd::Daemon qw( -hard notify ); sub watchdog { my $ip = shift; my $sleep = ($ENV{WATCHDOG_USEC} // 2_000_000) / 2; my $ping = Net::Ping->new("icmp", 1); while(1) { if ($ping->ping($ip)) { notify( WATCHDOG => 1 ); } usleep $sleep; } } system("/usr/sbin/vpnc-disconnect"); system("/usr/sbin/vpnc --no-detach plouf.conf"); sleep(1); notify( READY => 1 ); watchdog("{ip for check}"); ``` On a besoin de `Systemd::Daemon` qui nécessite `libsystemd-dev`. Et le service systemd qui va avec `my-vpnc.service` : ``` [Unit] Description=VPN with watchdog [Service] ExecStart=/home/michel/bin/resilient-vpn Restart=on-watchdog WatchdogSec=5 ``` Voila un coup de `systemctl start my-vpnc.service` et mon vpn est lancé et en cas de défaillance il va tout seul le relancer. (Le journal est sous [licence CC0](https://creativecommons.org/publicdomain/zero/1.0/deed.fr) et si vraiment le code présenté pourrait être sous le coup de la propriété intellectuel il utilise la [licence WTFPL](http://www.wtfpl.net/about/=) [^1]: et aussi DHCP, mais on ne se servira pas de cette fonctionnalité ici

AltStyle によって変換されたページ (->オリジナル) /