Sommaire

Je ne vous présente pas ce qu’est un VPN, Wikipedia fait ça très bien. Il existe plusieurs solutions pour héberger un VPN chez soi, le plus connu étant OpenVPN. Mais un petit nouveau a fait son apparition depuis quelques années. Il s’agit de Wireguard. Ce dernier offre des performances dingues, que ce soit au niveau de la consommation des ressources ou des capacités de transfert.

Installation du serveur

Encore et toujours, je vous mets à disposition les fichiers compose que j’utilise. L’image utilisée est fournie par Linuxserver.io.

Le fichier docker-compose.yml :

services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    hostname: wireguard
    env_file: wireguard.env
    cap_add:
      - NET_ADMIN
    volumes:
      - /opt/wireguard:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: always

Son fichier wireguard.env :

PUID=1000
PGID=1000
TZ=Europe/Paris
SERVERURL=foo.bar.com
SERVERPORT=51820
PEERS=client1,client2
PEERDNS=1.1.1.2,1.0.0.2
INTERNAL_SUBNET=10.13.13.0
ALLOWEDIPS=0.0.0.0/0

Dans ce fichier, vous avez quelques éléments à modifier :

  • La variable SERVERURL à remplacer par votre nom de domaine
  • La variable PEERS, qui contient la liste de vos clients VPN séparés par une virgule
  • La variable PEERDNS, où vous allez définir les serveurs DNS à utiliser (Cloudflare dans notre exemple)

Configuration du client

Pour l’installation du client, vous pouvez vous rendre sur cette page. Le client est disponible pour tous les systèmes d’exploitation. Une fois installé, vous pouvez ajouter la configuration soit manuellement, soit en effectuant un scan d’un QR code depuis vos appareils mobile. Il peut s’afficher directement dans votre terminal :

docker exec -it wireguard /app/show-peer client1

Je vous conseille d’ajouter un alias dans votre fichier .bash_aliases pour plus de confort :

alias peer='docker exec -it wireguard /app/show-peer $1'

Si toutefois vous devez ajouter les infos manuellement, le fichier de configuration se trouve sur votre hôte dans un sous dossier de /opt/wireguard. Dans notre exemple : /opt/wireguard/peer_client1/peer_client1.conf Une fois la configuration importée, vous pouvez activer votre VPN !

Firewall UFW

Si vous souhaitez accéder à vos applications sur le même serveur où se trouve Wireguard et que vous avez ufw installé, vous constaterez que vos applications ne sont pas accessibles… Il est donc nécessaire, sur le host, d’ajouter les ports à autoriser pour votre conteneur Wireguard. Par exemple, pour accéder à votre proxy web :

sudo ufw allow https

Port NAT

Enfin, pour pouvoir accéder à votre VPN depuis Internet, vous devez ajouter une ouverture de port NAT sur votre box. Dans le cas de Wireguard, il faut ouvrir le port UDP 51820.