rss logo

Commandes iproute2 sous Linux : gérer les adresses IP, les routes et les interfaces réseau

Illustration d’une passerelle Debian dirigeant le trafic LAN vers deux connexions Internet distinctes (WAN1 et WAN2) avec iproute2

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.

Schéma réseau montrant un serveur Debian utilisant iproute2 pour router le trafic de LAN1 et LAN2 via deux connexions Internet distinctes (WAN1 et WAN2)
Architecture réseau illustrant une passerelle Debian utilisant iproute2 pour router deux LAN (LAN1 et LAN2) via des connexions WAN distinctes.

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.

Serveur Debian configuré avec une interface trunk transportant plusieurs VLAN pour LAN1 (192.168.1.0/24) et LAN2 (192.168.2.0/24) via une seule interface réseau physique
Configuration LAN utilisant le trunk VLAN sur un serveur Debian, avec deux interfaces virtuelles pour LAN1 et LAN2 sur une seule interface physique.

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.

💡 Remarque : Les interfaces réseau utilisées dans ce guide portent des noms clairs et explicites (par exemple lan, wan). Si votre système utilise des noms par défaut comme eth0 ou ens33, vous pouvez suivre ce guide pour renommer les interfaces réseau sous Debian.

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.vlan10 et lan.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.

💡 Remarque : Cet exemple utilise une configuration de switch Cisco, mais les mêmes concepts (ports en mode access et ports en mode trunk) peuvent être adaptés à d’autres constructeurs.

  • Configurer l’interface g1 en 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 g4 en 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 g8 en 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.

Serveur Debian avec deux interfaces WAN (wan1 et wan2) configurées avec des passerelles distinctes pour un accès Internet double via iproute2
Configuration WAN montrant un serveur Debian avec deux interfaces physiques (wan1 et wan2), chacune connectée à une passerelle différente pour un accès Internet double.

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_tables et ajouter une table de routage personnalisée qui sera utilisée pour router via wan2 (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 table wan2 :
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/interfaces et configurer les interfaces suivantes :
    • wan1 : l’interface WAN principale avec la route par défaut
    • wan2 : 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 avec ip addr add), qui exécute également le script /usr/local/sbin/pbr.sh au 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.conf afin 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