Routage dual WAN avec iproute2 sur Debian (guide VLAN et routage basé sur des politiques)
- Mise à jour le 30 mars 2026
Dans un réseau que j’administre, il existe deux connexions Internet assurant à la fois la redondance et la séparation du trafic. L’objectif est de faire en sorte qu’un LAN spécifique utilise la connexion principale, tandis que les autres réseaux sont acheminés via la connexion secondaire. Cette approche permet de mieux contrôler l’utilisation de la bande passante et d’améliorer la fiabilité globale du réseau.
Pour y parvenir, j’utilise un serveur Debian qui agit comme une passerelle entre les réseaux internes et les deux liens Internet. Grâce au routage basé sur des politiques (policy-based routing), il devient possible de diriger le trafic en fonction du réseau source.
Dans cet article, je vais montrer comment mettre en place cette configuration de routage à l’aide de iproute2, un ensemble d’outils puissant pour la configuration réseau avancée sous Linux.
Schéma de l’architecture réseau
Pour simplifier, cet exemple repose sur deux LAN. L’objectif est de faire transiter le trafic du LAN1 via la connexion WAN1 et celui du LAN2 via la connexion WAN2.
Configuration du réseau LAN
Concentrons-nous sur la partie LAN. Dans cet exemple, LAN1/VLAN10 utilise le réseau 192.168.1.0/24, tandis que LAN2/VLAN20 utilise 192.168.2.0/24. Pour gérer ces deux réseaux, nous allons configurer une interface trunk sur le serveur Debian en utilisant une seule interface physique (nommée lan).
Cette approche permet de transporter plusieurs VLAN sur une même interface. Notez qu’il est également possible d’utiliser des interfaces physiques distinctes pour chaque LAN si votre serveur dispose de suffisamment de cartes réseau.
Configuration VLAN Debian (mode trunk)
Cette section explique comment configurer l’interface lan en mode trunk pour les VLAN 10 et VLAN 20 à l’aide de iproute2. Vous verrez plus loin comment automatiser cette configuration afin qu’elle s’exécute automatiquement au démarrage du système.
Cette configuration permet de séparer le trafic réseau à l’aide de VLAN et de les connecter à un routeur Linux via un lien trunk.
- Créer les interfaces VLAN
lan.vlan10etlan.vlan20, puis leur attribuer des adresses IP :
root@host:~# ip link add link lan name vlan10 type vlan id 10
root@host:~# ip link add link lan name vlan20 type vlan id 20
root@host:~# ip link set vlan10 up
root@host:~# ip link set vlan20 up
root@host:~# ip addr add 192.168.1.254/24 dev vlan10
root@host:~# ip addr add 192.168.2.254/24 dev vlan20
Configuration du switch
Dans cette section, nous allons configurer un commutateur réseau situé entre les segments LAN et la passerelle Debian. Ce switch gérera le trafic VLAN et le transmettra à l’interface trunk du routeur.
- Configurer l’interface
g1en mode access pour le VLAN 10 :
switch# configure terminal
switch(config)# interface g1
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 10
- Configurer l’interface
g4en mode access pour le VLAN 20 :
switch# configure terminal
switch(config)# interface g4
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 20
- Configurer l’interface
g8en mode trunk pour les VLAN 10 et VLAN 20 :
switch# configure terminal
switch(config)# interface g8
switch(config-if)# switchport mode trunk
switch(config-if)# switchport trunk allowed vlan add 10,20
Configuration WAN (NAT et routage basé sur des politiques)
Dans cette section, nous allons configurer la partie WAN du routeur Linux. Cela inclut la mise en place de règles nftables pour effectuer le NAT (Network Address Translation) sur les interfaces wan1 et wan2, ainsi que l’implémentation du routage basé sur des politiques (PBR) afin de contrôler le flux du trafic.
Nous verrons également comment automatiser cette configuration en exécutant un script shell au démarrage du système.
Routage et routage basé sur des politiques (PBR)
- Activer le forwarding IP pour permettre au système Linux de router les paquets entre les interfaces :
root@host:~# sysctl net.ipv4.ip_forward=1
- Modifier le fichier
/etc/iproute2/rt_tableset ajouter une table de routage personnalisée qui sera utilisée pour router viawan2(utilisée pour le trafic de LAN2) :
#
# valeurs réservées
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
200 table.wan2
- Ajouter une route par défaut dans la table de routage
wan2:
root@host:~# ip route add default via 10.20.20.254 dev wan2 table table.wan2
- Ajouter des règles de routage basé sur des politiques pour faire passer le trafic de LAN2 par
wan2. La première règle garantit que le trafic généré par le routeur utilise la table de routage principale, tandis que la seconde redirige le trafic du sous-réseau LAN2 vers la tablewan2:
root@host:~# ip rule add prio 160 from 192.168.20.254 lookup main
root@host:~# ip rule add prio 161 from 192.168.20.0/24 table table.wan2
Ces règles garantissent que le trafic provenant du sous-réseau LAN2 est routé via l’interface wan2, tandis que le trafic propre au routeur continue d’utiliser la table de routage principale.
Configuration du fichier /etc/network/interfaces
- Modifier le fichier
/etc/network/interfaceset configurer les interfaces suivantes :wan1: l’interface WAN principale avec la route par défautwan2: l’interface WAN secondaire utilisée pour le trafic de LAN2 (via le routage basé sur des politiques)lan: l’interface LAN sans adresse IP (configurée plus tard avecip addr add), qui exécute également le script/usr/local/sbin/pbr.shau démarrage
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug wan1
iface wan1 inet static
address 10.10.10.1
netmask 255.255.255.0
gateway 10.10.10.254
allow-hotplug wan2
iface wan2 inet static
address 10.20.20.1
netmask 255.255.255.0
allow-hotplug lan
iface lan inet manual
up /usr/local/sbin/pbr.sh
Configuration de nftables (NAT)
Pour permettre aux réseaux LAN d’accéder à Internet via les interfaces wan1 et wan2, nous devons configurer le NAT (Network Address Translation) à l’aide de nftables.
- Modifier le fichier
/etc/nftables.confafin de définir les règles de NAT :
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
}
chain forward {
type filter hook forward priority 0; policy accept;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip my_nat {
chain my_masquerade {
type nat hook postrouting priority 100; policy accept;
ip daddr != { 10.0.0.0/8, 192.168.0.0/16 } oifname "wan1" masquerade comment "outgoing NAT on wan1"
ip daddr != { 10.0.0.0/8, 192.168.0.0/16 } oifname "wan2" masquerade comment "outgoing NAT on wan2"
}
}
- Activer et démarrer le service
nftables:
root@host:~# systemctl enable nftables.service
root@host:~# systemctl restart nftables.service
Rendre la configuration persistante (script de démarrage)
- Pour rendre la configuration persistante après redémarrage, créer le script
/usr/local/sbin/pbr.sh:
#! /bin/sh
# --- Configuration des VLAN ---
ip link add link lan name vlan10 type vlan id 10
ip link add link lan name vlan20 type vlan id 20
ip link set vlan10 up
ip link set vlan20 up
ip addr add 192.168.1.254/24 dev vlan10
ip addr add 192.168.2.254/24 dev vlan20
# --- Activation du routage IP ---
sysctl net.ipv4.ip_forward=1
# --- Configuration de la table de routage ---
[ $(grep -q 200 /etc/iproute2/rt_tables; echo $?) -ne 0 ] && echo "200 table.wan2" >> /etc/iproute2/rt_tables
# --- Route par défaut pour la table wan2 ---
ip route add default via 10.20.20.254 dev wan2 table table.wan2
# --- Règles de routage basé sur des politiques ---
# Le trafic propre du routeur utilise la table principale
ip rule add prio 160 from 192.168.20.254 lookup main
# Le trafic LAN2 utilise la table wan2
ip rule add prio 161 from 192.168.20.0/24 table table.wan2
- Rendre le script exécutable :
root@host:~# chmod +x /usr/local/sbin/pbr.sh
Commandes de vérification
- Afficher les routes de la table de routage
table.wan2:
root@host:~# ip route show table table.wan2
default via 10.20.20.254
- Afficher les règles de routage basé sur des politiques :
root@host:~# ip rule show
- Afficher toutes les tables de routage :
ip route show table all
- Vérifier quelle route est utilisée pour une destination spécifique :
ip route get 8.8.8.8