Call-Informatique
Call-Informatique
Le média tech
OpenWrt : flash, config réseau et hardening complet
High-TechGuides9 min de lecture

OpenWrt : flash, config réseau et hardening complet

Guide technique pour flasher OpenWrt 25.12.0 sur un routeur, configurer VLANs, DNS, firewall, VPN WireGuard et sécuriser l'ensemble.

OpenWrt : flash, config réseau et hardening complet

Ce guide couvre l'installation d'OpenWrt 25.12.0 sur un routeur compatible, la configuration réseau avancée, et le durcissement sécurité. On part du firmware d'usine pour arriver à un routeur production-ready.

Pré-requis

  • Routeur présent dans le Table of Hardware (https://openwrt.org/toh/start) avec statut Supported
  • Connexion Ethernet filaire entre le PC et un port LAN du routeur
  • Le modèle exact ET la version hardware (étiquette physique sous l'appareil)
  • Firmware factory OpenWrt 25.12.0 téléchargé depuis firmware-selector.openwrt.org
  • Accès SSH depuis le poste client (PuTTY sous Windows, terminal natif sous Linux/macOS)

1. Flash du firmware

Méthode standard (interface web du fabricant)

Accédez à l'interface d'administration du routeur :

bash
## La plupart des routeurs répondent sur l'une de ces adresses
curl -sI http://192.168.1.1 || curl -sI http://192.168.0.1

Dans l'interface du fabricant, trouvez la section firmware update. Uploadez le fichier .bin factory correspondant au modèle exact. Le routeur flashe et redémarre.

Méthode TFTP (pour routeurs sans interface web ou en recovery)

Si le routeur est en mode recovery (voyant clignotant après reset maintenu 10s au boot) :

bash
## Configurez une IP statique sur votre interface Ethernet
## Linux
sudo ip addr flush dev eth0
sudo ip addr add 192.168.1.2/24 dev eth0
sudo ip link set eth0 up

## macOS
sudo ifconfig en0 192.168.1.2 netmask 255.255.255.0 up

## Envoyez le firmware via TFTP
## L'adresse du routeur en mode recovery dépend du fabricant
## TP-Link : 192.168.0.66 ou 192.168.1.1
## Netgear : 192.168.1.1
atftp —option "mode octet" —put —local-file openwrt-25.12.0-*-factory.bin 192.168.0.66

Attendez 3 à 5 minutes sans toucher à rien. Le routeur redémarre sur OpenWrt.

2. Premier accès et sécurisation SSH

Par défaut, OpenWrt expose SSH (Dropbear) et l'interface web LuCI sur le LAN. Le mot de passe root est vide.

bash
## Connexion SSH initiale
ssh root@192.168.1.1
## Mot de passe : [vide, tapez Entrée]

Premier geste : définir un mot de passe root.

bash
passwd

Puis passez en authentification par clé SSH uniquement :

bash
## Depuis votre poste client, copiez votre clé publique
ssh-copy-id root@192.168.1.1

## Sur le routeur : désactivez l'authentification par mot de passe
uci set dropbear.@dropbear[0].PasswordAuth='off'
uci set dropbear.@dropbear[0].RootPasswordAuth='off'
uci commit dropbear
/etc/init.d/dropbear restart

⚠️ Gardez votre session SSH ouverte pendant cette opération. Si la clé ne fonctionne pas, vous êtes enfermé dehors.

Changez le port SSH par défaut :

bash
uci set dropbear.@dropbear[0].Port='2222'
uci commit dropbear
/etc/init.d/dropbear restart

3. Configuration réseau

Interface WAN

bash
## DHCP (derrière une box FAI)
uci set network.wan.proto='dhcp'

## PPPoE (connexion directe FAI)
uci set network.wan.proto='pppoe'
uci set network.wan.username='votre-identifiant-fai@fai.fr'
uci set network.wan.password='votre-mot-de-passe'

## IP statique
uci set network.wan.proto='static'
uci set network.wan.ipaddr='203.0.113.10'
uci set network.wan.netmask='255.255.255.0'
uci set network.wan.gateway='203.0.113.1'
uci set network.wan.dns='1.1.1.1 9.9.9.9'

uci commit network
/etc/init.d/network restart

DNS sécurisé (DNS over TLS)

OpenWrt utilise dnsmasq par défaut. Pour du DNS chiffré, installez stubby :

bash
opkg update
opkg install stubby

## Configurez dnsmasq pour forwarder vers stubby (127.0.0.1:5453)
uci set dhcp.@dnsmasq[0].noresolv='1'
uci delete dhcp.@dnsmasq[0].server
uci add_list dhcp.@dnsmasq[0].server='127.0.0.1#5453'
uci commit dhcp

/etc/init.d/stubby enable
/etc/init.d/stubby start
/etc/init.d/dnsmasq restart

Stubby est préconfiguré pour utiliser Cloudflare (1.1.1.1) et Quad9 (9.9.9.9) en DoT.

Wi-Fi

Par défaut, les radios Wi-Fi sont désactivées. Activez-les et configurez :

bash
## Radio 0 (2.4 GHz)
uci set wireless.radio0.disabled='0'
uci set wireless.radio0.country='FR'
uci set wireless.radio0.channel='auto'

uci set wireless.default_radio0.ssid='MonReseau'
uci set wireless.default_radio0.encryption='sae-mixed'
uci set wireless.default_radio0.key='VotreMotDePasseWiFi-Robuste-2026'

## Radio 1 (5 GHz)
uci set wireless.radio1.disabled='0'
uci set wireless.radio1.country='FR'
uci set wireless.radio1.channel='auto'
uci set wireless.radio1.htmode='VHT80'  # ou HE80 pour Wi-Fi 6

uci set wireless.default_radio1.ssid='MonReseau'
uci set wireless.default_radio1.encryption='sae-mixed'
uci set wireless.default_radio1.key='VotreMotDePasseWiFi-Robuste-2026'

uci commit wireless
wifi reload

L'encryption sae-mixed permet WPA3 avec fallback WPA2 pour les appareils anciens. Si tous vos appareils supportent WPA3, utilisez sae seul.

VLAN pour réseau invité

Créez un réseau isolé pour les invités :

bash
## Interface guest
uci set network.guest=interface
uci set network.guest.proto='static'
uci set network.guest.ipaddr='192.168.2.1'
uci set network.guest.netmask='255.255.255.0'

## DHCP pour le réseau guest
uci set dhcp.guest=dhcp
uci set dhcp.guest.interface='guest'
uci set dhcp.guest.start='100'
uci set dhcp.guest.limit='50'
uci set dhcp.guest.leasetime='2h'

## SSID invité sur la radio 2.4 GHz
uci set wireless.wifinet_guest=wifi-iface
uci set wireless.wifinet_guest.device='radio0'
uci set wireless.wifinet_guest.mode='ap'
uci set wireless.wifinet_guest.network='guest'
uci set wireless.wifinet_guest.ssid='MonReseau-Invites'
uci set wireless.wifinet_guest.encryption='sae-mixed'
uci set wireless.wifinet_guest.key='InviteWiFi2026'
uci set wireless.wifinet_guest.isolate='1'

uci commit network
uci commit dhcp
uci commit wireless
/etc/init.d/network restart
wifi reload

4. Firewall

Zone guest isolée

bash
## Zone firewall pour le réseau invité
uci add firewall zone
uci set firewall.@zone[-1].name='guest'
uci set firewall.@zone[-1].network='guest'
uci set firewall.@zone[-1].input='REJECT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='REJECT'

## Les invités peuvent accéder à internet mais pas au LAN
uci add firewall forwarding
uci set firewall.@forwarding[-1].src='guest'
uci set firewall.@forwarding[-1].dest='wan'

## Autoriser DHCP et DNS pour les invités
uci add firewall rule
uci set firewall.@rule[-1].name='Guest-DNS'
uci set firewall.@rule[-1].src='guest'
uci set firewall.@rule[-1].dest_port='53'
uci set firewall.@rule[-1].proto='tcpudp'
uci set firewall.@rule[-1].target='ACCEPT'

uci add firewall rule
uci set firewall.@rule[-1].name='Guest-DHCP'
uci set firewall.@rule[-1].src='guest'
uci set firewall.@rule[-1].dest_port='67-68'
uci set firewall.@rule[-1].proto='udp'
uci set firewall.@rule[-1].target='ACCEPT'

uci commit firewall
/etc/init.d/firewall restart

Bloquer le trafic WAN entrant (déjà fait par défaut, vérification)

bash
## Vérifier que la zone WAN bloque bien tout en entrée
uci show firewall | grep 'wan.*input'
## Doit afficher : firewall.@zone[1].input='REJECT'

5. VPN WireGuard

Installation et configuration d'un tunnel WireGuard :

bash
opkg update
opkg install wireguard-tools luci-proto-wireguard

## Générer les clés
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
SERVER_PRIVKEY=$(cat /etc/wireguard/server_private.key)
SERVER_PUBKEY=$(cat /etc/wireguard/server_public.key)

## Interface WireGuard
uci set network.wg0=interface
uci set network.wg0.proto='wireguard'
uci set network.wg0.private_key="$SERVER_PRIVKEY"
uci set network.wg0.listen_port='51820'
uci add_list network.wg0.addresses='10.0.0.1/24'

## Ajouter un peer (client)
## Générez les clés client sur le poste client avec : wg genkey | tee private.key | wg pubkey > public.key
CLIENT_PUBKEY='CollerLaClePubliqueDuClient'

uci add network wireguard_wg0
uci set network.@wireguard_wg0[-1].public_key="$CLIENT_PUBKEY"
uci set network.@wireguard_wg0[-1].allowed_ips='10.0.0.2/32'
uci set network.@wireguard_wg0[-1].description='PC-Portable'

uci commit network
/etc/init.d/network restart

## Ouvrir le port WireGuard dans le firewall
uci add firewall rule
uci set firewall.@rule[-1].name='Allow-WireGuard'
uci set firewall.@rule[-1].src='wan'
uci set firewall.@rule[-1].dest_port='51820'
uci set firewall.@rule[-1].proto='udp'
uci set firewall.@rule[-1].target='ACCEPT'

## Ajouter wg0 à la zone LAN (pour accéder au réseau local via VPN)
uci add_list firewall.@zone[0].network='wg0'

uci commit firewall
/etc/init.d/firewall restart

Configuration client (fichier .conf pour WireGuard) :

ini
[Interface]
PrivateKey = CLE_PRIVEE_CLIENT
Address = 10.0.0.2/24
DNS = 192.168.1.1

[Peer]
PublicKey = CLE_PUBLIQUE_SERVEUR
Endpoint = VOTRE_IP_PUBLIQUE:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

6. Hardening sécurité

Désactiver les services inutiles

bash
## Désactiver le serveur HTTP sur le WAN (ne devrait pas être exposé, mais vérifiez)
uci show uhttpd
## LuCI ne doit écouter que sur le LAN

## Désactiver IPv6 si non utilisé
uci set network.wan6.auto='0'
uci set network.lan.ipv6='0'
uci set dhcp.lan.dhcpv6='disabled'
uci set dhcp.lan.ra='disabled'
uci commit

## Désactiver UPnP (faille de sécurité fréquente)
/etc/init.d/miniupnpd stop 2>/dev/null
/etc/init.d/miniupnpd disable 2>/dev/null

Activer les mises à jour automatiques de la liste de paquets

bash
## Cron pour mettre à jour la liste de paquets chaque semaine
echo '0 4 * * 1 opkg update' >> /etc/crontabs/root
/etc/init.d/cron restart

Monitoring basique

bash
opkg install vnstat2 luci-app-vnstat2
/etc/init.d/vnstat enable
/etc/init.d/vnstat start

vnStat fournit des statistiques de bande passante par interface, accessibles via LuCI.

7. Script post-install automatisé

Pour reproduire cette configuration rapidement sur un autre routeur :

bash
#!/bin/sh
## openwrt-postinstall.sh
## À exécuter après le flash d'OpenWrt 25.12.0
## Usage : scp openwrt-postinstall.sh root@192.168.1.1:/tmp/ && ssh root@192.168.1.1 'sh /tmp/openwrt-postinstall.sh'

set -e

echo "[1/6] Mise à jour des paquets..."
opkg update

echo "[2/6] Installation des paquets essentiels..."
opkg install stubby wireguard-tools luci-proto-wireguard vnstat2 luci-app-vnstat2

echo "[3/6] Configuration DNS over TLS..."
uci set dhcp.@dnsmasq[0].noresolv='1'
uci delete dhcp.@dnsmasq[0].server 2>/dev/null
uci add_list dhcp.@dnsmasq[0].server='127.0.0.1#5453'
uci commit dhcp
/etc/init.d/stubby enable
/etc/init.d/stubby start

echo "[4/6] Activation Wi-Fi..."
uci set wireless.radio0.disabled='0'
uci set wireless.radio0.country='FR'
uci set wireless.radio1.disabled='0'
uci set wireless.radio1.country='FR'
uci commit wireless

echo "[5/6] Désactivation UPnP et IPv6..."
/etc/init.d/miniupnpd stop 2>/dev/null
/etc/init.d/miniupnpd disable 2>/dev/null
uci set network.wan6.auto='0'
uci commit network

echo "[6/6] Activation monitoring..."
/etc/init.d/vnstat enable
/etc/init.d/vnstat start

echo "Configuration terminée. Redémarrage réseau..."
/etc/init.d/network restart
wifi reload

echo "Done. Changez le SSID et le mot de passe Wi-Fi manuellement."
echo "N'oubliez pas : passwd pour définir le mot de passe root."

8. Dépannage

Le routeur ne répond plus après le flash

Maintenez le bouton reset enfoncé pendant 10 secondes pendant que le routeur démarre. Cela déclenche le mode recovery/failsafe selon le modèle.

En mode failsafe OpenWrt :

bash
ssh root@192.168.1.1
## Le mode failsafe monte le système en lecture seule
mount_root
firstboot
reboot -f

Erreur "image too large" ou "bad magic"

Vous avez téléchargé le mauvais firmware. Revérifiez le modèle exact et la version hardware. Un TP-Link Archer C7 v2 et v5 utilisent des chipsets différents.

Wi-Fi instable ou faible portée

bash
## Vérifier la puissance d'émission
uci show wireless | grep txpower

## Régler la puissance (valeur en dBm, max dépend de la réglementation)
uci set wireless.radio0.txpower='20'
uci set wireless.radio1.txpower='23'
uci commit wireless
wifi reload

## Vérifier les logs Wi-Fi
logread | grep hostapd

SSH inaccessible après changement de port

Si vous avez changé le port SSH et perdu l'accès, connectez-vous via LuCI (interface web) et modifiez la configuration dans System → Administration.

Espace disque insuffisant pour les paquets

Routeurs avec peu de flash (8 Mo) : privilégiez une installation minimale. Si vous avez un port USB, montez une clé USB comme stockage supplémentaire :

bash
opkg update
opkg install block-mount kmod-fs-ext4 kmod-usb-storage e2fsprogs

## Formater la clé USB en ext4
mkfs.ext4 /dev/sda1

## Monter sur /overlay pour étendre le stockage
block detect | uci import fstab
uci set fstab.@mount[0].target='/overlay'
uci set fstab.@mount[0].enabled='1'
uci commit fstab
reboot

Sources

Sur le même sujet

À lire aussi

#tutoriel#openwrt#firmware#réseau-avancé#sécurité