PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

ephase : Wireguard et OpenWRT, le VPN facile

jeudi 2 avril 2020 à 14:34

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 :

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-feux 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-feux pour notre nouvelle interface

Il serait possible de créer une nouvelle zone de pare-feu pour régler finement le pare-feux 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é :

wg genpsk > client1.psk

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 :

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-feux plus élaboré, plan d’adressage plus complexe etc.

Bibliographie


  1. 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. 

  2. Certain utilisateurs on rapporté des instabilités lorque le routeur n’était pas redémarré après l’installation. 

  3. Il l’est sûrement aussi sur le Google Play Store. 

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