Installer un VPN Wireguard sur sa raspberry [tuto]

wireguard raspberry
Dernière mise a jour 09 Fév 2020 a 05:56

On l’a appris fin janvier, Wireguard VPN va être intégré officiellement au prochain noyau linux. Pour ceux qui ne savent toujours pas de quoi il en retourne c’est par ici. En attendant, pour les autres, les impatients, les geeks, les curieux ou les 3 à la fois, il est temps de tester la bête !! Voici le petit tuto que je vous avais promis la semaine dernière, à savoir :
Comment installer un serveur VPN wireguard sur sa raspberry?

Dans ce tutoriel j’utilise:
– une raspberry 3 avec la distrib raspbian Buster installée (serveur vpn)
– un smartphone android et un pc ubuntu/desktop (clients vpn )

Je pars du principe que vous savez installer,configurer,sécuriser une raspbian , ajouter des règles au niveau du parefeu ,en bon nerd que vous êtes ^_^
Pour l’install et la config du VPN, let’s go!

1 – Installation des paquets

On a le choix entre 2 méthodes :

  • Méthode1: compilation de wireguard à la mano
  • Méthode2: via le dépôt debian (branche « unstable »)

J’ai opté pour la méthode 2 (flemme de recompiler en cas de future maj). Pour la suite des manips, se connecter dans un terminal, avec les superpouvoirs.

– Ajout du dépôt qui va bien sur la raspbian:

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list

-On ajuste la priorité du dépôt « unstable » pour pas tout péter lors de futures maj:
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable

-On met à jour la liste des paquets:
apt update

Ne pas s’inquiéter des quelques messages d’erreurs qui s’affichent. En effet,il manque les signatures du dépôt qui ne peuvent pas être vérifiées pour le moment (GPG error …NO PUBKEY).

-On va y remédier :

apt install dirmngr
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
apt update

Enfin , installation des paquets:
apt install wireguard dkms raspberrypi-kernel-headers wireguard-dkms wireguard-tools

Et c’est terminé pour la partie installation des packages!

2 – Générer les clés privées et publiques

Comme pour ssh, on génère une clé publique et une clé privée pour chaque machine (serveur, client1,client2 …)

cd /etc/wireguard ; umask 077

– clés pour le serveur vpn:

wg genkey > server_private.key
wg pubkey > server_public.key < server_private.key

– clés pour le client vpn (tablette, smartphone,pc….)

wg genkey > client1_private.key
wg pubkey > client1_public.key < client1_private.key

3 – Éditer les fichiers de conf :

Donc toujours dans un terminal sur notre raspberry.

– pour le SERVEUR :

nano /etc/wireguard/wg0.conf

-copier/coller les lignes suivantes dans le fichier de conf.
J’ai essayé de commenter un max pour ceux qui ne comprendraient pas bien quelles valeurs sont à modifier en fonction de leur environnement.

[Interface]
# plage d'adresse privée pr le réseau vpn
Address = 10.9.0.1/24 

# port d'écoute du serveur vpn
ListenPort = 51820  

# @ip du resolveur dns , ici c'est l'@ip de mon pihole
# mais on peut aussi mettre celle d'un public,par ex:1.1.1.1
DNS = 192.168.1.2 # ip du resolveur

# mettre la clé privée de notre serveur (fichier server_private_key)
PrivateKey = VJUUasN+z6hYn4C6xxxxxxxxxxxxxxxx= 

# règles de routage
# penser à adapter avec le nom de votre interface reseau (ici eth0)
# au besoin faire un "ip a" pour trouver votre interface
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

[Peer]
# client1 - telephone android
# contenu de la clé publique (fichier client1_public.key)
PublicKey = bLuMB4ed7txxxxxxxxxxxxxxxxxxxxxxxx
# @ip privée du vpn client
AllowedIPs = 10.9.0.2/32 
PersistentkeepAlive = 60 

– pour le CLIENT :

On génère ce fichier à partir de notre serveur. Une fois édité, il sera à transféré sur le client (smartphone, pc).

nano /etc/wireguard/wg0-client1.conf

[Interface]
    #client 1
    # @ip du client 
    Address = 10.9.0.2/32
   # contenu du fichier client1_private_key
    PrivateKey = aI2cUEOwaMNjgfdxxxxxxxxxxxxxxxxxxxxxxxxx
    
    [Peer]
    #client 1
    # contenu du fichier server_public_key
    PublicKey = Tzq/nLB07p8GKxxxxxxxxxxxxxxxxxxxxxxxxxxxx
   
   # @ipPubliqueBox:port_vpn, 
   Endpoint = 82.xx.xx.xxx:51820
   AllowedIPs = 0.0.0.0/0
   #(si 0.0.0.0/0 alors tout le traffic est routé dans le vpn)
   PersistentKeepalive = 25

-Activer le routage des paquets IP sur le rpi:

dans le fichier nano /etc/sysctl.conf
passer la valeur net.ipv4.ip_forward= à 1

Pour les poilus de la main, on peut le faire en une seule ligne de commande :

sed -ir 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

On recharge les paramètres du noyau:
sysctl -p /etc/sysctl.conf

Activer l’interface:
wg-quick up wg0

Vérifier le tunnel:
ip a

Pour voir le status de la connexion :
sudo wg

Activer l’interface pour chaque redémarrage:
sudo systemctl enable wg-quick@wg0

4 – Configurer les clients VPN
(téléphone Android ou pc)

selon le système que vous utilisez (android , linux, windows, macOS….) vous aurez toutes les infos détaillées sur la doc officielle pour installer le client wireguard sur votre pc. Sinon, pour ceux qui auraient un téléphone android et/ou ubuntu voilà comment je m’y suis pris:

Résultat de recherche d'images pour "android"

– télécharger l’application wireguard sur le dépôt libre Fdroïd.

Pour récupérer le fichier de conf sur notre téléphone, on va le faire à partir d’un QR code généré sur notre raspberry .

sudo apt install qrcode

qrencode -t ansiutf8 < /etc/wireguard/wg0-client1.conf

Et voilà le joli Qr code correspondant à la conf vpn pour notre téléphone:

Il ne reste plus qu’à scanner et à importer le fichier dans l’appli wireguard installée précédemment sur notre android.

Sur un pc linux (ubuntu)

Résultat de recherche d'images pour "linux inside"

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard

On crée le fichier de conf spécial pour le pc ubuntu :

nano /etc/wireguard/wg0-client2.conf

Puis on y insère les lignes suivantes:

[Interface]
#client 2 - ubuntu
Address = 10.9.0.3/32
# contenu du fichier client2_private_key
PrivateKey = aI2cUEOwaMNjgfdxxxxxxxxxxxxxxxxxxxxxxxxx
[Peer]
#client 2
# contenu du fichier server_public_key généré sur le pi
PublicKey = Tzq/nLB07p8GKxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# @ipPubliqueBox:port_vpn, 
    Endpoint = 82.xx.xx.xxx:51820
    AllowedIPs = 0.0.0.0/0
    #(si 0.0.0.0/0 alors tout le traffic est routé dans le vpn)
    PersistentKeepalive = 25

Lancer la connexion vpn:
wg-quick up wg0-client2

Enfin, on vérifie qu’on a bien récupéré l’adresse IP publique de notre box:
curl ifconfig.me

Désactiver la connexion vpn:
wg-quick down wg0-client2

Régles du parefeu:

Ne pas oublier d’ajouter une règle pour autoriser la connexion entrante vers le serveur VPN placé derrère votre box:

  • NAT/ portforwarding
  • port udp 51820 vers rpi LAN 192.168.X.X

Quelques infos supplémentaires:

  • Wireguard est encore en phase expérimentale, donc le déployer en prod en contexte entreprise on évite pour le moment hein ! Même si vous êtes bluffé par ses perfs et que vous avez une irrésistible envie de virer openvpn:-)
  • On trouve sur github des scripts d’install auto. J’ai vu que pivpn avait aussi proposé le sien. Ça pourrait être une bonne idée pour ceux qui sont pressés de tester le bouzin vite fait . Mais je déconseille pour du long terme , surtout au vu de la facilité d’install et de config de wireguard.
  • Je mettrai à jour ce tuto régulièrement en fonction des évolutions du projet.

Voilà j’espère que vous aurez réussi à tester wireguard avec succès et que comme moi vous allez apprécier son utilisation au quotidien!

2 commentaires sur Installer un VPN Wireguard sur sa raspberry [tuto]

  1. Hello Yann,

    Merci pour ce tuto.

    J’ai une petite question en lien à ce sujet : quelles sont les règles iptables que tu as mis en place pour protéger ton serveur tout en permettant les connexions Wireguard ?

    Je te remercie

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.


*