Aller au contenu

WireGuard VPN : accédez à votre serveur domestique de n'importe où

Rogelio Guerra Riverón
Auteur
Rogelio Guerra Riverón
Construction de ma propre infrastructure web depuis zéro. Je documente chaque étape : serveurs, réseaux, conteneurs et tout ce qui se présente.

L’un des problèmes classiques d’avoir un serveur à la maison est l’accès à distance sécurisé. Ouvrir les ports SSH directement au monde est une mauvaise idée — vous le voyez dans les logs d’authentification : des centaines de tentatives par jour. La solution élégante est un VPN, et WireGuard est aujourd’hui la meilleure option disponible.

Pourquoi WireGuard ?
#

Comparé à OpenVPN ou IPSec :

Architecture
#

[Móvil/Portátil]  ←── WireGuard túnel UDP 51820 ──→  [Router casa]  →  [Servidor doméstico 192.168.1.X]
   10.10.0.2                                                               10.10.0.1

Le serveur agit comme concentrateur VPN. Quand je me connecte, j’obtiens l’IP 10.10.0.2 et je peux accéder à n’importe quel service du réseau local comme si j’étais à la maison.

Installation sur Ubuntu
#

sudo apt-get install -y wireguard

WireGuard est disponible dans les dépôts d’Ubuntu depuis 20.04. Dans les versions plus récentes, le module du kernel est inclus par défaut.

Génération de clés
#

WireGuard utilise la cryptographie à clé publique. Nous générons une paire pour le serveur et une autre pour chaque client :

# Claves del servidor
wg genkey | tee server_private.key | wg pubkey > server_public.key

# Claves del cliente (móvil o portátil)
wg genkey | tee client_private.key | wg pubkey > client_public.key

Important : les clés privées ne quittent jamais le dispositif qui les génère. Seules les clés publiques sont échangées.

Configuration du serveur
#

Fichier /etc/wireguard/wg0.conf :

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <CLAVE_PRIVADA_SERVIDOR>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE

[Peer]
# Móvil / portátil
PublicKey = <CLAVE_PUBLICA_CLIENTE>
AllowedIPs = 10.10.0.2/32

Les règles de iptables dans PostUp/PostDown activent la redirection de paquets (NAT) pour que le client puisse accéder au réseau local, pas seulement au serveur.

Permissions strictes sur le fichier :

sudo chmod 600 /etc/wireguard/wg0.conf

Activer la redirection IP
#

Sans cela, le serveur ne réachemine pas les paquets entre les interfaces :

# Temporal (hasta reinicio)
sudo sysctl -w net.ipv4.ip_forward=1

# Permanente
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf

Démarrer WireGuard
#

sudo systemctl enable --now wg-quick@wg0

Vérifier que c’est actif :

sudo wg show wg0

Cela doit afficher l’interface en écoute sur le port 51820 et le peer enregistré.

Pare-feu (UFW)
#

sudo ufw allow 51820/udp
sudo ufw reload

Configuration du client
#

Fichier wg-casa.conf pour l’ordinateur portable ou mobile :

[Interface]
Address = 10.10.0.2/24
PrivateKey = <CLAVE_PRIVADA_CLIENTE>
DNS = 1.1.1.1

[Peer]
PublicKey = <CLAVE_PUBLICA_SERVIDOR>
Endpoint = <IP_PUBLICA_CASA>:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25

AllowedIPs = 10.10.0.0/24 signifie que seul le trafic vers le réseau VPN passe par le tunnel — le reste d’Internet continue de sortir directement. Si vous vouliez router tout le trafic (y compris la navigation web) par la maison, vous utiliseriez 0.0.0.0/0.

PersistentKeepalive = 25 maintient la connexion active même s’il n’y a pas de trafic — utile sur les réseaux mobiles qui ferment les connexions UDP inactives.

Routeur : redirection de port
#

Sur le routeur, il faut rediriger le port 51820 UDP vers l’IP locale du serveur (par ex. 192.168.1.X). C’est généralement dans Configuration → NAT → Redirection de ports.

Code QR pour le mobile
#

Au lieu de taper la config sur le mobile, nous générons un code QR :

sudo apt-get install -y qrencode
qrencode -t ansiutf8 < cliente.conf

L’application WireGuard (iOS/Android) le scanne directement.

Vérification
#

Pour tester que cela fonctionne réellement, il faut se connecter depuis un réseau différent de celui de la maison — par exemple, les données mobiles :

  1. Désactivez le wifi du mobile
  2. Activez le tunnel WireGuard dans l’app
  3. Accédez à un service du serveur par IP locale (ex. http://192.168.1.X)

Si cela répond, le tunnel fonctionne correctement.

Sécurité supplémentaire
#

  • Les clés privées ne voyagent jamais sur le réseau — seules les clés publiques sont échangées
  • Pas d’utilisateurs ni de mots de passe — authentification purement cryptographique
  • Un peer = une clé publique — si tu perds un appareil, tu supprimes sa [Peer] du serveur et il n’a plus accès
  • Fail2ban ne s’applique pas — WireGuard abandonne silencieusement les paquets invalides sans répondre

Ajouter plus de clients
#

Pour chaque nouvel appareil, nous générons une nouvelle paire de clés et ajoutons un bloc [Peer] supplémentaire sur le serveur avec sa clé publique et une IP différente (10.10.0.3, 10.10.0.4…):

sudo wg set wg0 peer <NUEVA_CLAVE_PUBLICA> allowed-ips 10.10.0.3/32
sudo wg-quick save wg0

Il n’est pas nécessaire de redémarrer le service — WireGuard ajoute les peers à chaud.


Mode tunnel complet : tout le trafic par le VPN
#

Par défaut, le client n’achemine que le trafic du réseau local (10.10.0.0/24) par le tunnel. Si tu veux que toute la navigation de l’appareil passe par ton serveur — utile sur les réseaux publics, dans les hôtels ou sur des réseaux WiFi inconnus — change AllowedIPs sur le client :

# Solo red local (por defecto)
AllowedIPs = 10.10.0.0/24

# Todo el tráfico (modo privacidad total)
AllowedIPs = 0.0.0.0/0, ::/0

Avec 0.0.0.0/0 toute la navigation sort par ton adresse IP domestique. Avantages : confidentialité sur les réseaux publics, ton adresse IP réelle à tout moment. Inconvénient : ta vitesse de remontée à la maison limite la navigation de l’appareil distant.

Dans l’application WireGuard (mobile ou bureau) tu peux changer ceci en éditant le tunnel sans avoir besoin de toucher au serveur.


Avec cela, j’ai un accès complet à mon réseau domestique de n’importe où, sans exposer aucun port supplémentaire au monde et avec une cryptographie moderne. L’étape naturelle suivante est de mettre en place des sauvegardes automatiques du VPS vers le serveur de la maison, en utilisant ce tunnel comme canal sécurisé.


Équipement recommandé
#

Liens d’affiliation. Aucun frais supplémentaire pour toi.