Installer et configurer WireGuard sur Raspberry

WireGuard est un logiciel open-source qui permet de mettre en place un VPN. Il vise à être plus rapide et plus léger que d’autre protocole VPN comme OpenVPN ou IPsec. WireGuard est toujours en cours de développement, et même dans son avancement actuel il est plus rapide que OpenVPN. Plus d’info sur le site de Wireguard: https://www.wireguard.com/performance/

WireGuard créé une interface réseau (comme wg0) qui a le même comportement que eth0.

Dans ce tuto nous allons voir comment installer le serveur WireGuard et configurer un client sous Android. La configuration de WireGuard est très simple et rapide.

La connexion au VPN s’effectue via un échange de clés publiques entre le serveur et le client.

Note: Ce tutot a été réalisé sur un rapsberry 3, avec la distribution Buster de Raspbian, et la version 4.19.118-v7+ du Kernel

Installer Wireguard sous Raspberry

Toutes les commandes suivantes sont à effectuer en sudo

Mettre à jour votre raspberry

apt-get update
apt-get upgrade
apt-get dist-upgrade

Actuellement Wireguard n’est pas inclus dans la distribution de Raspbian, il faut donc ajouter le dépôt backports

echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list

Installer les clés du précédent dépôt

gpg --keyserver keys.gnupg.net --recv 648ACFD622F3D138
gpg --keyserver keys.gnupg.net --recv 04EE7237B7D453EC

gpg --export 04EE7237B7D453EC | apt-key add -
gpg --export 648ACFD622F3D138 | apt-key add -

Si la commande gpg –keyserver ne fonctionne pas vous vous tester les commandes suivantes proposées par Oga en commentaire.

gpg –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 648ACFD622F3D138
gpg –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 04EE7237B7D453EC


gpg --export 04EE7237B7D453EC | apt-key add - 
gpg --export 648ACFD622F3D138 | apt-key add -

 

Empêcher Debian d’utiliser ce dépôt pour vos paquets standards

sh -c 'printf "Package: *\nPin: release a=unstable\nPin-Priority: 90\n" > /etc/apt/preferences.d/limit-unstable'

Mettre à jour la liste des paquets

apt-get update

Installer les headers linux. ils sont nécessaires pour faire marcher wireguard. Pas d’inquiétude si l’execution se termine avec ce genre d’erreur (dkms: WARNING: Linux headers are missing, which may explain the above failures.
please install the linux-headers-4.19.118-v8+ package to fix this.)

apt-get install raspberrypi-kernel-headers

Installer Wireguard, Wireguard-dmks s’installera en même temps et va builder une version adaptée avec le kernel du rapsberry

apt-get install wireguard

 

Configurer le serveur WireGuard

Dans cette partie nous allons créer les clés serveurs et pour un client, et créer notre fichier de configuration.
Ce schéma résume la configuration que nous allons déployer.

schema de configuration de WireGuard

 

 

Tout d’abord placer vous dans le dossier de Wireguard

cd /etc/wireguard/

Générer les clés serveurs (privée et publique)

wg genkey | tee server_private_key | wg pubkey > server_public_key

Générer les clés clients (privée et publique)

wg genkey | tee client_private_key | wg pubkey > client_public_key

Créer le fichier de configuration

vim wg0.conf

y insérer le contenu suivant:

[Interface]
Address = 10.10.10.1/32
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51900
PrivateKey = <mettre le contenu de la clé server private>

[Peer]
# client 1: Android de colas
PublicKey = <mettre le contenu de la clé client publique>
AllowedIPs = 10.10.10.2/32

La première partie Interface permet configurer le serveur:

  • Adress : l’adresse IP du serveur VPN du réseau virtuel. Il ne s’agit pas de l’adresse IP de votre réseau privée, mais bien d’une nouvelle IP à définir vous même.
  • ListenPort : le port du VPN, qui va écouter les connexions entrantes
  • PostUp/PostDown : ligne de commandée lancé au démarrage et arrêt de wireguard. eth0 correspond à l’interface connecté à votre LAN
  • SaveConfig: Indique que la configuration doit se mettre automatiquement à jour quand un nouveau client est ajouté en ligne de commande pendant que le service fonctionne.
  • PrivateKey : clé privée du serveur

La deuxième partie Peer permet configurer un client. Si vous souhaitez connecter plusieurs client il faudra dupliquer cette partie en changeant les paramètres:

  • AllowedIPs : correspond à l’adresse IP du client autorisé à se connecter au VPN
    • si vous mettez un masque /32 comme dans l’exemple seul cet unique client peut se connecter au VPN
    • si vous mettez la valeur suivante 10.10.10.0/24 alors vous autorisez plusieurs clients à se connecter au VPN. Tous ceux ayant une adresse IP comprise entre 10.10.10.2 et 10.10.10.254. Vous pouvez donc jouer sur la valeur du masque pour autoriser un certain nombre de client.
    • Pour des questions de sécurité un client == une paire de clé, donc on va préférer utiliser un masque /32
  • PublicKey : clé publique du client

 

Changer les droits au dossier de configuration pour le mettre en lecture/écrite qu’à root

chown -R root:root /etc/wireguard/
chmod -R og-rwx /etc/wireguard/*
umask 077

Démarrer Wireguard, avec la commande suivante

wg-quick up wg0


[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.10.10.1/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.10.10.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Vérifier le bon fonctionnement de Wireguard

wg show

Activer le service Wireguard pour qu’il démarre à chaque reboot du rapsberry

systemctl enable wg-quick@wg0

 

Note : Avant de mettre à jour votre fichier wg0.conf, n’oublier pas de stopper le service sinon vos modifications seront perdues.

 

Activer la redirection de port sur votre box

Sur votre routeur / box vous devez mettre en place la redirection de port pour rediriger le port entrant 51900 en UDP vers le port 51900 sur votre raspberry. Voici un exemple sur la freebox mini4k

redirection port wireguard sur freebox

Activer le port Forwarding sur le raspberry

Si une fois connecté au VPN vous souhaitez accéder à votre réseau privé, il faut donc activer le port forwarding.

Editer le fichier

/etc/sysctl.conf

et décommenter la ligne

net.ipv4.ip_forward=1

Redémmarer le serveur pour que la modification soit prise en compte

reboot

 

Configurer le client Wireguard sous Android

Sur votre smartphone télécharger et installer l’application android Wireguard.

Il y a deux facon de configurer le client, soit via la génération d’un qrcode sur le serveur, soit en remplissant tous les champs sous l’application Android. Cette deuxième méthode est un peu plus contraignante car il faut recopier les clés privées et publiques.

Via Qrcode

Sur votre raspberry, installer qrcode

apt-get install qrencode

Créer un fichier, client.conf, qui contient la conf de votre client

[Interface]
Address = 10.10.10.2/32
PrivateKey = <clé privée du client>
DNS = 8.8.8.8

[Peer]
PublicKey = <clé publique du serveur>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = wireguard.tutoanco.colas-delmas.fr:51900

Dans la Partie Interface nous retrouvons les informations suivantes:

  • PrivateKey: clé privée du client
  • Adresses: Adresse IP du client, qui est définie dans la partie Peer sur le serveur
  • DNS Serveur: DNS de Google

Dans la Partie Peer nous retrouvons les informations suivantes:

  • PublicKey: Clé publique du serveur
  • Endpoint:
    • Renseigner un nom de domaine suivie du port qui permet de joindre votre serveur.
    • Sinon si vous avec une adresse IP publique fixe, vous pouvez la renseigner suivie du numéro de port. Voir cet article pour Obtenir son adresse IP publique en ligne de commande.
    • Si vous avez une adresse IP dynamique, il vous faut utiliser un service comme no-ip, DuckDNS, etc.
  • Allowed IPs: ce champs permet de définir quel trafic doit passer par le VPN. si vous renseignez 0.0.0.0/0, ::/0 tout le trafic passera par le VPN.
    Si vous souhaitez que seul le trafic vers votre LAN privée passe par le VPN il faudra mettre: 10.10.10.0/24, 192.168.0.0/24 (où cette adresse correspond à  votre LAN). Cette configuration ne fonctionne pas chez moi, car le reste du trafic (accès à google par exemple ne fonctionne pas).
    En d’autre terme, quand le client tente d’envoyer à un paquet à une IP, il regarde les AllowedsIPs et si l’IP apparaît dans la liste alors le paquet sera envoyé à travers le VPN. Même principe quand il reçoit un paquet.

 

Générer le qrcode que vous scannerez

qrencode -t ansiutf8 -r client.conf

qrcode wireguard

Manuellement

Sur l’application faite ajouter un VPN en cliquant sur l’icone , puis cliquer sur « Create from Scratch« .
Puis configurer votre connexion comme expliqué ci dessus et détaillé sur le screenshot.

Creation du client WireGuard sous Android

Tester votre connexion

Depuis votre smartphone, il faut suffit d’afficher votre adresse IP publique via le site Mon ip.
Cette adresse IP doit être la même que celle obtenue sur votre raspbery en suivant ce guide: Obtenir son adresse IP publique en ligne de commande

 


2 commentaires
Commenter

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