Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.
C’est alors la barrière de la prise en main qui fait peur, et pourtant...
Les logiciels libres
L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.
Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.
Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.
Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.
- Avril 2020 -
Wireguard est un logiciel et un protocole de communication pour
créer un VPN en mode point à point routé ou bridgé. Il se compose d’un
module noyau et d’outils en espace utilisateur.
Il se veut léger, sécurisé, facile à configurer (coucou OpenVPN) et
intègre par défaut des protocoles de chiffrement modernes :
Il devrait être intégré comme module du noyau GNU/Linux dans la version 5.6
mais il est d’ores est déjà disponible via dkms sur des distributions comme
Debian ou Archlinux ou encore FreeBSD.
Il est aussi disponible dans les dépôts OpenWRT, le sujet même de cet article
Installation sous OpenWRT
Je vais l’installer sur mon Turris Omnia, mais avant toute chose, je
vais définir le plan d’adressage :
- le LAN déjà en place avec la place 192.168.100.0/24 et la passerelle en
192.168.100.254 (le routeur)
- tout ce qui concerne Wireguard avec comme adresse 10.100.100.0/24 avec comme
passerelle 10.100.100.254 (notre interface wireguard sur le routeur).
Pour commencer l’installation, connectons nous en SSH1 au routeur:
opkg install wireguard wireguard-tools
Il est conseillé de redémarrer le routeur après l’installation de Wireguard
pour que le module noyau soit chargé2.
Générer la paire de clefs
Pour fonctionner, Wireguard utilise une paire de clefs privée / publique
qu’il est possible de générer via wg
.
umask u=rw,g=,o=
wg genkey | tee wireguard.key | wg pubkey > wireguard.pub
Créer l’interface réseau
Maintenant que les clefs sont créées et le port ouvert nous allons configurer
notre interface réseau dédiées à Wireguard.
uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="$(cat /root/wireguard.key)"
uci set network.wg0.listen_port="51820"
uci add_list network.wg0.adresses="10.100.100.254/24"
uci commit network
Ouvrir le port udp nécessaire
Wireguard fonctionne exclusivement en UDP, il est donc nécessaire d’ouvrir un
port sur notre pare-feu afin de laisser passer les trames nécessaires. Le port
choisit est le 51820, voici les commandes à entrer (toujours via SSH)
uci add firewall rule
uci set firewall.@rule[-1].src="wan"
uci set firewall.@rule[-1].target="ACCEPT"
uci set firewall.@rule[-1].proto="udp"
uci set firewall.@rule[-1].dest_port="51820"
uci set firewall.@rule[-1].name="Allow Wireguard Inbound"
uci commit firewall
Ajouter les règles au pare-feu pour notre nouvelle interface
Il serait possible de créer une nouvelle zone de pare-feu pour régler finement
le pare-feu pour notre interface wg0
. Nous allons nous contenter de rattacher
cette interface à notre zone lan.
uci rename firewall.@zone[0]="lan"
uci add_list firewall.lan.network="wg0"
uci commit
/etc/init.d/firewall restart
Configurer un “peer” sur le routeur
Dans le langage de Wireguard, un peer est une machine cliente. Nous allons
maintenant en rajouter un. Mais avant il faut penser à créer un couple de clefs
publique / privée pour celui-ci.
Il est aussi possible de générer une pre-shared key afin de renforcer le
chiffrement celle-ci devra être différente pour chaque client pour des
raisons de sécurité :
Puis configurer notre premier client :
uci set network.wgclient="wireguard_wg0"
uci set network.wgclient.public_key=""
uci set network.wgclient.preshared_key="$(cat /root/client1.psk)"
uci add_list network.wgclient.allowed_ips="10.100.100.0/24"
uci add_list network.wgclient.description="My phone"
uci commit network
/etc/init.d/network restart
Il faut bien sûr remplacer
par la clé publique de votre client.
Configuer son Client.
Le client se configure à l’aide d’un fichier de configuration, voici un exemple
que l’on nommera wg.conf
:
[interface]
Address = 10.100.100.42/32
PrivateKey =
[peer]
EndPoint = :51820
AllowedIPs = 0.0.0.0/24
PersistentKeepAlive = 25
PreSHaredKey =
PublicKey =
Il faut bien sur remplacer ces éléments :
par la clé privée de votre client, nous avons utilisé
la clé publique pour configurer l’accès sur notre routeur
par l’adresse IP publique de votre routeur (ou son
nom DNS)
par la pre shared key que nous avons créé pour la
configuration de notre client sur le routeur
par la clé publique de notre Wireguard sur le
routeur créée au tout début de cet article.
AllowedIPs = 0.0.0.0/24
signifie que tous le trafic de notre client sera
envoyé vers le VPN. Cette partie est à adapter selon les besoins.
Ce fichier servira à la commande wg-quick
pour lancer la connexion sur un
système *NIX, ou sera à importer dans l’interface graphique de Wireguard sous Windows.
Il existe aussi une version Android disponible sur
F-Droid3, dans ce cas on peut utiliser un QR-code. Il
est possible de le générer dans un terminal avec qrencode. Il est
disponible sur Archlinux, Debian et FreeBSD (de ce que j’ai vérifié) et sûrement
d’autre distributions / systèmes.
Sous Archlinux, en root
ça donne :
pacman -S qrencode
qrencode -t ansiutf8 < wg0.conf
Il ne reste plus qu’à “flasher” le QR-code avec l’application Android.
En conclusion
Voici une solution simple et efficace de mettre en place un VPN léger, robuste
et fiable sur son routeur. Avec Wireguard, j’ai accès à mon réseau local depuis
n’importe où que se soit sur mon ordinateur portable ou mon ordiphone. Il est
bien entendu possible d’aller plus loin : routage plus fin, pare-feu plus
élaboré, plan d’adressage plus complexe etc.
Bibliographie
-
Il est possible de le faire entièrement avec LUCI, l’interface graphique
d’OpenWRT mais ce n’est pas le sujet de cet article. ↩
-
Certain utilisateurs on rapporté des instabilités lorsque le routeur
n’était pas redémarré après l’installation. ↩
-
Il l’est sûrement aussi sur le Google Play Store. ↩

Original post of ephase.Votez pour ce billet sur Planet Libre.