Files
docudjeex/content/fr/3.serveex/2.core/3.wireguard.md
T

9.0 KiB

title, description
title description
Wireguard Installer et configurer WireGuard VPN pour accéder à votre homelab de n'importe où et connecter tous vos appareils à votre réseau privé.

:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

Introduction

L'utilisation d'un VPN permet d'accéder à distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une manière propre de sécuriser l'accès à la console SSH, plutot que d'exposer le port sur internet. C'est pouvoir se connecter à son réseau où que l'on soit, de maniere sécurisée, et de faire dialoguer des machines qui sont sur des réseaux différents.

Ici nous utiliserons Wireguard, un serveur VPN sécurisé et très performant, à l'aide des conteneurs :

  • wg-easy pour le serveur, qui propose une interface web très simple pour controler les connexions et télécharger les fichiers de conf (notamment par QR code pour les téléphones)
  • Wireguard pour les clients linux

Il existe aussi des clients Windows, MacOS, iOS et Android.

Le principe est le suivant :

  • Sur internet, n'importe qui peut contacter n'importe quel box internet et donc essayer de contacter n'importe quel serveur exposé.
  • Votre serveur est sur votre réseau local. Il est accessible depuis le réseau local mais pas depuis internet, mis à part les services exposés (comme nous l'avons fait avec Dockge). Pour accéder aux ressources non exposées, vous devez être connecté sur le meme réseau que votre serveur et donc etre chez vous. De plus, vous devez laisser ouvert les ports utilisés par vos services à travers le pare feu de votre serveur.
  • Nous souhaitons ici au contraire, depuis n'importe où, pouvoir accéder de maniere securisée aux services non exposés sur internet du serveur, comme la console SSH qui permet de se connecter à la machine par exemple.
  • Nous souhaitons aussi accéder aux services d'autres serveurs, et par exemple relier de maniere sécurisée deux instances de Dockge pour tout controler depuis la meme interface.

Pour cela nous allons créer un réseau privé virtuel, ou VPN, c'est à dire un tunnel sécurisé auquel personne n'a accès à part les machines que vous relierez entre elles. Elles feront partie d'un nouveau réseau et pourront dialoguer entre elle comme dans un réseau local.

D'autre part, vous pourrez ajouter votre téléphone, un ordinateur portable ou n'importe quel appareil au réseau pour pouvoir utiliser vos ressources depuis vos appareils quotidiens, où que vous soyiez.

picture

Dans cette illustration, la machine 1 est sur deux réseaux :

  • son réseau local (tous les appareils liés à la box, avec une adresse IP du type 192.168.x.x donc ici la machine 1 et la machine 2)
  • le réseau du VPN (tous les appareils reliés au VPN, avec une seconde adresse IP du type 10.8.x.x donc ici la machine 1 et 4)

On peut aussi faire en sorte que les machines reliées au réseau virtuel partagent les acces à leur réseau local. Ici nous ne le ferons pas, pour des raisons de sécurité, et de complexité en terme de sous-réseau (si les deux machines distantes ont des machines locales qui utilisent la meme adresse IP locale, par exemple 192.168.1.1, cela posera des conflits).

Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront dialoguer entre elle depuis ce réseau. Elles ne pourront pas dialoguer avec une machine situées sur un autre réseau local et non reliée au VPN.

Côté serveur

::note{icon=""} 📋 À vérifier au préalable :

  • Vérifiez que le port 51820 UDP est libre sur votre serveur et correctement redirigé depuis votre box (51820 UDP -> Serveur).
  • Vérifiez que le port 51821 TCP est libre pour l'interface web. ::

::warning

Attention : si votre IP n'est pas fixe, utilisez un service de DNS dynamique (DynDNS). Si votre opérateur utilise un CGNAT, vous devrez passer par un VPS externe et y connecter votre serveur local comme client. ::

Structure des dossiers

::file-tree

tree: /: - srv: - docker: - wg-easy: - config: - etc_wireguard/ - compose.yaml - .env

::

::steps{level="3"}

Déployer la stack

Ouvrez Dockge, cliquez sur Compose, et nommez la stack wg_easy.

Copiez la configuration suivante :

---
services:
  wg-easy:
    environment:
      - INSECURE=true
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: wg-easy
    networks:
      wg:
        ipv4_address: 10.42.42.42
        ipv6_address: fdcc:ad94:bacf:61a3::2a
    volumes:
      - ./etc_wireguard:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1

networks:
  wg:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 10.42.42.0/24
        - subnet: fdcc:ad94:bacf:61a3::/64

::tip{icon=""} Astuce :

  • Vous pouvez personnaliser les ports de WireGuard et de l'interface web.
  • Ajoutez un label Watchtower pour les mises à jour automatiques :
---
services:
  wg-easy:
    # ...
    labels:
      - com.centurylinklabs.watchtower.enable=true

::

Déployez la stack et accédez à l'interface web locale sur http://ipduserveur:51821.

::caution

En cas d'échec du déploiement, vérifiez les règles de votre pare-feu. ::

Créer votre compte

Une fois connecté, suivez les instructions de l'interface web pour :

  • Créer votre compte administrateur et son mot de passe.
  • Renseigner le champ host (votre IP publique ou votre nom de domaine).

Configurer le tunnel

Allez ensuite dans Administrator → Admin Panel → Config :

  • Remplacez Allowed IPs 0.0.0.0/24 par 10.8.0.0/24 pour du split tunneling.
  • Supprimez l'IPv6 (il cause souvent des problèmes inutiles).

Terminé !

::

Récupérer les fichiers de configuration

Pour configurer les clients :

::steps{level="4"}

Accéder à l'interface web

Allez sur http://ipduserveur:51821.

Créer un nouveau client

Modifier le client

Ajoutez 10.8.0.0/24 dans Server Allowed IPs.

(Facultatif) Régler le Persistent Keep Alive

Mettez-le à 25 s'il s'agit d'un client connecté en permanence.

Enregistrer et renommer le fichier

Enregistrez, téléchargez, et renommez le fichier en wg0.conf (ou wg1.conf, etc.)

Terminé !

::

Sur le serveur client

::note

Nous partons du principe que le serveur client tourne sous Linux avec Docker installé. ::

Structure des dossiers

::file-tree

tree: /: - srv: - docker: - wireguard: - config: - wg_confs/ - compose.yaml

::

::steps{level="3"}

Créer le dossier

sudo mkdir -p /srv/docker/wireguard/config/wg_confs

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce : vous pouvez utiliser File Browser Quantum plutôt que le terminal pour modifier et téléverser vos fichiers. ::

Créer le fichier wg0.conf

sudo nano /srv/docker/wireguard/config/wg_confs/wg0.conf

Collez la configuration téléchargée, puis enregistrez avec :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, et quittez avec :kbd{value="Ctrl+X"}.

::tip{icon=""} Méthode alternative : transférez le fichier en SFTP puis déplacez-le :

sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs

::

Créer le fichier compose

Créez le fichier compose.yaml dans /srv/docker/wireguard :

---
services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    network_mode: host
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - TZ=Europe/Paris
    volumes:
      - /srv/docker/wireguard/config:/config
      - /lib/modules:/lib/modules
    restart: unless-stopped

Démarrer le conteneur

cd /srv/docker/wireguard
sudo docker compose up -d

Terminé !

::

::note

Répétez cette installation pour chaque client. ::

Autres appareils

  • Mobile : installez WireGuard et scannez le QR code depuis l'interface web (http://ipduserveur:51821)
  • Ordinateur : installez le client WireGuard et importez le fichier de configuration téléchargé.

::warning

Note : si la machine cliente est sur le même réseau local que le serveur, modifiez le fichier wg0.conf pour utiliser l'IP locale du serveur : Endpoint = ip-locale-du-serveur:51820 ::

Et voici le schéma final de l'installation :

picture