Quand on pense VPN, on pense souvent d’abord à la confidentialité sur Wi-Fi public ou l’accès à des contenus géo-restreints. Mon besoin principal est un peu différent : accéder à mon réseau local à distance et, si nécessaire, faire sortir tout le trafic Internet de mon téléphone ou de mon portable via ma connexion domestique.
Concrètement, je veux :
- accéder à des ressources locales quand je suis hors de chez moi
- administrer certains services sans les exposer directement sur Internet
- utiliser ma connexion maison comme point de sortie sur des réseaux tiers
- garder une architecture simple, maintenable et adaptée au mobile
Pour ça, WireGuard est un très bon choix. C’est plus simple à maintenir que beaucoup d’anciens VPN, performant, et très bien intégré dans OpenWrt.
Cet article est basé sur mon setup :
- un Linksys MR8300 avec OpenWrt 24.10.5
- le routeur OpenWrt placé derrière une box FAI Huawei
- un accès distant principalement depuis Android
L’objectif est d’obtenir à la fois :
- l’accès au LAN derrière OpenWrt
- un routage Internet complet via la maison (
AllowedIPs = 0.0.0.0/0côté client)
Je ne vois pas WireGuard ici comme une simple option de confort. C’est un composant d’accès distant et d’administration, donc il faut une base réseau/sécurité propre.
Si vous voulez aller directement à l’implémentation, sautez à l’étape 1.
Résumé de configuration
- Sous-réseau LAN :
192.168.10.0/24 - Sous-réseau WireGuard :
10.203.0.0/24 - IP WireGuard du routeur :
10.203.0.1 - IP WireGuard Android :
10.203.0.2 - Port UDP WireGuard :
32541 - Exemple de hostname DDNS :
myprivatevpnXYZ.mmb.sh
Ce que fait ce setup
Ce montage est pensé pour un réseau domestique où :
- la box FAI reste en place
- le routeur OpenWrt est derrière
- un port UDP est redirigé depuis la box vers OpenWrt
- les clients se connectent en WireGuard
- le VPN fournit à la fois accès LAN et full tunnel Internet
C’est important, car beaucoup de tutoriels supposent un routeur OpenWrt directement exposé à Internet. Ce n’est pas mon cas ici.
Prérequis pour OpenWrt derrière une box FAI
Avant de commencer, il me faut :
- OpenWrt 24.10.5 installé
- accès admin à LuCI OpenWrt et à la box Huawei HG8145X6
- la possibilité de créer une redirection de port UDP sur la box FAI
- une IP WAN stable pour OpenWrt côté box (idéalement réservation DHCP)
- une stratégie DynDNS si l’IP publique change
- les paquets WireGuard installés sur OpenWrt
Sur mon routeur, j’ai installé :
opkg update
opkg install kmod-wireguard wireguard-tools luci-proto-wireguard
Ces paquets peuvent aussi être installés via LuCI > System > Software.
Le paquet luci-proto-wireguard est nécessaire si je veux gérer WireGuard et les peers directement dans LuCI.

Page LuCI après Update lists…, filtre wireguard, avec luci-proto-wireguard, kmod-wireguard et wireguard-tools.
Détail important : j’ai dû redémarrer le routeur après installation pour voir apparaître WireGuard dans la liste des protocoles LuCI.
Pourquoi ce choix plutôt qu’exposer des services
Si le besoin est d’accéder à un seul service interne, la tentation est de publier un port directement sur la box.
Problème :
- chaque service exposé augmente la surface d’attaque
- le contrôle d’accès devient dispersé
- exposition Internet et administration se mélangent
- les box FAI sont souvent limitées pour gérer ça proprement
Avec un VPN :
- un seul point d’entrée est exposé
- l’authentification repose sur des clés cryptographiques
- le LAN reste privé
- l’administration distante devient plus cohérente
Bénéfices et limites
Ce que ce setup apporte
- accès distant au LAN
- sortie Internet via la maison
- configuration légère sur OpenWrt
- bonne compatibilité clients (Android, Linux, Windows, macOS, iOS)
- surface d’exposition réduite (un port UDP)
Ce qu’il faut accepter
- gestion du NAT / port forwarding côté box FAI
- nécessité d’un DynDNS si l’IP publique change
- limitation par l’upload de la connexion maison
- full tunnel plus coûteux en batterie mobile
- risque d’exposition excessive du LAN en cas de mauvaise config
Architecture (vue d’ensemble)
Android / Autre client
|
| WireGuard (UDP)
v
[ Internet ]
|
v
[ Box FAI Huawei HG8145X6 ]
|
| redirige un port UDP
v
[ Routeur OpenWrt MR8300 ]
|
+--> LAN local
|
+--> sortie Internet via le WAN OpenWrt
Le point clé : OpenWrt n’est pas en bordure Internet. Il est derrière la box FAI. Il faut donc au minimum :
- une redirection UDP de la box vers l’IP WAN OpenWrt
- idéalement une réservation DHCP (ou IP fixe WAN OpenWrt) sur la box
- un moyen stable de retrouver l’IP publique (DynDNS)
Plan d’adressage recommandé
Exemple simple :
- LAN OpenWrt :
192.168.10.0/24 - IP LAN OpenWrt :
192.168.10.1 - Réseau WireGuard :
10.203.0.0/24 - IP WireGuard routeur :
10.203.0.1 - Client Android :
10.203.0.2 - Autre client (optionnel) :
10.203.0.3
Etape 1 : créer l’interface WireGuard dans LuCI
Dans Network > Interfaces, créez une interface wg0 en protocole WireGuard VPN.

Après création, LuCI ouvre la page de configuration de wg0.
Générez la paire de clés avec le bouton Generate new key pair.


Valeurs principales :
- private key : générée par OpenWrt
- listen port : port UDP haut non standard, par exemple
32541/UDP - interface address :
10.203.0.1/24

Dans les réglages avancés, désactivez Use default gateway pour ce scénario serveur.

Dans l’onglet firewall de wg0, on peut d’abord associer à une zone existante ; on créera la zone vpn à l’étape 2.

Puis enregistrez l’interface.

Etape 2 : rattacher l’interface à une zone firewall
Créez une zone dédiée vpn :
Name:vpnInput:acceptOutput:acceptIntra zone forward:rejectMasquerading: désactivé (NAT reste surwan)Covered networks:wg0Allow forward to destination zones:lanetwanAllow forward from source zones: vide- Onglet advanced : IPv4 only si votre setup est IPv4 only

Puis sauvegardez.

Etape 3 : autoriser le port WireGuard sur OpenWrt
Dans Firewall > Traffic Rules, ajoutez :
Name:Allow-WireGuard-InboundProtocol:UDPSource zone:wanDestination:This device(pasvpn)Destination port:32541Action:Accept input- Advanced :
IPv4 onlysi setup IPv4 only

Etape 4 : rediriger le port sur la box FAI
Sur la box FAI, redirigez UDP/32541 vers l’IP WAN OpenWrt (exemple 192.168.3.8).
Protocol:UDPExternal port:32541-32541Internal port:32541-32541External source IP: vide (sauf besoin de restriction)

Faut-il mettre OpenWrt en DMZ ?
En général, non. Une redirection ciblée WireGuard est plus propre.
Etape 5 : gérer l’IP publique avec DDNS
Même avec une IP stable, je préfère un nom DNS fixe.
Dans mon cas, j’utilise mon propre domaine avec DNS sur Cloudflare (DynHost indisponible dans mon contexte registrar/manager).
Exemple de FQDN :
myprivatevpnXYZ.mmb.sh
5.1 Créer l’enregistrement DNS WireGuard
Dans Cloudflare DNS :
- créez un
Arecord pourmyprivatevpnXYZ.mmb.sh - mettez une IPv4 temporaire
Proxy status = DNS only(obligatoire pour WireGuard UDP)
5.2 Créer un API Token Cloudflare restreint
Token avec droits minimum :
Zone - DNS - EditZone - Zone - Read- scope limité à la zone
mmb.sh
5.3 Installer DDNS sur OpenWrt
opkg update
opkg install ddns-scripts luci-app-ddns ddns-scripts-cloudflare ca-bundle ca-certificates
Redémarrez OpenWrt après installation du paquet LuCI.
5.4 Configurer DDNS dans LuCI
Dans Services > Dynamic DNS, créez un service IPv4 :
Service Name:CloudflareDynDNSDDNS Service provider:cloudflare.com-v4

Dans la popup du service :
Enable: cochéLookup Hostname:myprivatevpnXYZ.mmb.shDomain:myprivatevpnXYZ@mmb.sh(formatrecord@zone)Username:BearerPassword:<Cloudflare API Token>Use HTTP Secure: cochéPath to CA-Certificate:/etc/ssl/certs

Advanced settings :
- si WAN public direct :
IP source = Network,Network = wan - si OpenWrt derrière box (WAN privée
192.168.x.x) :IP source = URL/Web - URL fiable :
http://checkip.amazonaws.comouhttps://api.ipify.org DNS-Servervide par défaut- si les logs montrent une résolution privée (
192.168.x.x) pourLookup Hostname, forcez un DNS public (1.1.1.1)

Timer settings :
Check Interval = 5 minutesForce Interval = 72 hoursError Retry Interval = 60 secondsError Max Retry Counter = 0

Sauvegardez puis démarrez le service.
Si l’authentification Cloudflare DDNS échoue, voir la section dépannage (modes Bearer et legacy).
5.5 Valider
Dans LuCI, onglet logs + Reload, et en CLI :
nslookup myprivatevpnXYZ.mmb.sh 1.1.1.1
logread -e ddns
Etape 6 : créer les peers OpenWrt
Dans wg0 > Peers, créez un peer par appareil.
Règles :
- une paire de clés par appareil
- une IP tunnel par appareil
- jamais de profil partagé
Distinction importante :
- Côté peer OpenWrt,
Allowed IPssert à associer l’IP tunnel au bon client (par exemple10.203.0.2/32). - Côté profil client,
AllowedIPsdéfinit quelles destinations passent dans le tunnel (full tunnel vs LAN only).
Peer Android
Exemple :
- nom :
android-pixel Allowed IPscôté serveur :10.203.0.2/32

Etape 7 : configurer le client Android
Application officielle WireGuard :
Depuis la page peer OpenWrt :
- remplissez le peer
- sauvegardez
- cliquez sur Generate configuration…
- scannez le QR code depuis l’app Android

Le profil généré doit inclure au minimum :
Address = 10.203.0.2/32Endpoint = <votre-ddns>:<votre-port-wireguard>AllowedIPs = 0.0.0.0/0pour le full tunnel IPv4- optionnel : ajouter
::/0uniquement si IPv6 est réellement routé dans le tunnel DNS = <resolver accessible via le tunnel>(par exemple192.168.10.1si les clients joignent le DNS LAN du routeur, ou10.203.0.1si vous exposez explicitement le DNS sur l’interface WireGuard)- optionnel :
PersistentKeepalive = 25
Testez en 4G/5G (pas sur le Wi-Fi de la maison) et vérifiez que l’IP publique vue côté client est celle de votre domicile.
Dépannage Android (retour réel)
Si le tunnel ne monte pas :
- vérifiez endpoint + port UDP dans le profil généré
- vérifiez port d’écoute OpenWrt + règle firewall
- vérifiez la correspondance des clés (public key client côté OpenWrt)
- sauvegardez le peer avant de générer le QR
- si besoin, régénérez le peer et rescanez un QR neuf
C’est précisément les points 4 et 5 qui ont résolu mon cas.
Etape 8 : autres appareils (même principe)
Pour Linux, Windows, macOS ou iOS, la logique est quasiment la même :
- un peer dédié par appareil
- export/copie du profil client
- endpoint/port et clés cohérents
AllowedIPsselon besoin (LAN only vs full tunnel)- validation handshake + trafic
L’UI change selon plateforme, pas la logique WireGuard.
Tests à faire avant de valider le setup
Je déconseille de s’arrêter au simple fait que “le tunnel se connecte”.
Je vérifierais au minimum :
- que le handshake WireGuard apparaît sur le routeur
- que le client atteint bien
10.203.0.1 - qu’il atteint le LAN, par exemple
192.168.10.1puis un hôte interne - que le trafic Internet sort bien via la maison
- que la résolution DNS est cohérente
- que la reconnexion fonctionne après un changement de réseau mobile / Wi-Fi
Exemples de tests utiles :
ping 10.203.0.1
ping 192.168.10.1
curl ifconfig.me
Si curl ifconfig.me renvoie l’IP publique de votre domicile lorsque le tunnel est actif, le routage Internet est probablement correct.
Problèmes courants et dépannage
Pas de handshake
Vérifiez :
- endpoint public et port UDP
- redirection de port sur la box FAI
- règle firewall OpenWrt d’entrée UDP
- éventuel CGNAT côté FAI
- clé publique du routeur utilisée côté client
Handshake OK mais LAN inaccessible
Vérifiez :
- forwarding
vpn -> lan Allowed IPsdu peer côté OpenWrt- sous-réseau LAN déclaré côté client
- absence de collision d’adressage
LAN OK mais pas d’Internet via tunnel
Vérifiez :
AllowedIPs = 0.0.0.0/0côté client- forwarding
vpn -> wan - NAT/masquerade sur zone
wan - DNS client cohérent
DNS incohérent ou fuite DNS
Vérifiez :
- valeur
DNSdans le profil client - accessibilité du DNS via tunnel
- éventuel override DNS par Android
Incompatibilité d’authentification Cloudflare DDNS
Si DDNS échoue côté Cloudflare, les logs indiquent le mode attendu :
- si les logs montrent
Authorization: Bearer ..., utiliser le format token attendu par votre implémentation DDNS OpenWrt (dans mon cas :Username = Bearer,Password = API Token,Domain = record@zone) - si les logs montrent
X-Auth-EmailetX-Auth-Key, utiliserUsername = email Cloudflare,Password = Global API Key,Domain = zone
Fonctionne en Wi-Fi mais pas en data mobile
Testez :
PersistentKeepalive = 25- un autre réseau externe
- éventuel filtrage UDP côté opérateur mobile
Note IPv6
::/0 dans AllowedIPs est pertinent uniquement si vous voulez réellement faire passer IPv6 dans le tunnel.
Si votre setup IPv6 n’est pas complet, mieux vaut retirer ::/0 plutôt que laisser un comportement partiel ambigu.
Bonnes pratiques sécurité
- une clé par appareil, révocation immédiate en cas de perte
- sous-réseau VPN distinct du LAN
- règles firewall minimales nécessaires
- désactiver UPnP si inutile
- maintenir OpenWrt à jour
- sauvegardes exportées de la config
- limiter l’exposition des interfaces d’administration
- décider explicitement de la stratégie IPv6
Références
- WireGuard Quick Start
- OpenWrt documentation
- OpenWrt WireGuard package page
- OpenWrt Dynamic DNS client
- Cloudflare API tokens
Pourquoi pas Tailscale ou ZeroTier ?
Ce guide cible un WireGuard auto-géré sur OpenWrt. Tailscale/ZeroTier peuvent simplifier la mise en route (NAT traversal, enrôlement), mais impliquent une couche de contrôle externe.
Je préfère OpenWrt + WireGuard quand je veux :
- contrôle direct de la config routeur
- comportement réseau prévisible
- full tunnel maîtrisé de bout en bout
- architecture proche du WireGuard standard
Conclusion
WireGuard sur OpenWrt derrière une box FAI est totalement faisable dans un contexte domestique. Le plus important n’est pas l’installation du protocole en elle-même, mais la cohérence globale :
- adressage propre
- firewall clair
- redirections de ports correctes
- gestion réaliste de l’IP publique
- distinction nette entre accès LAN et full tunnel
Pour mon besoin, c’est plus propre que d’exposer des services internes un par un, et plus flexible que des ouvertures de ports ad hoc.