Configurer des réseaux VLAN Linux avec iproute2 vous permet de diviser un lien physique unique en plusieurs domaines de diffusion isolés sans matériel supplémentaire. Ce guide couvre les interfaces taguées 802.1Q, la configuration des ports trunk et la segmentation réseau en utilisant uniquement la commande ip incluse dans toute distribution Linux moderne. À la fin, vous comprendrez comment créer et pérenniser des sous-interfaces VLAN, connecter des hôtes Linux via un trunk, et vérifier l’isolation entre les segments.

Prérequis

  • Un hôte Linux sous noyau 3.2 ou ultérieur (toute distribution récente convient)
  • Accès root ou sudo
  • Le paquet iproute2 installé (fourni par défaut sur Debian, Ubuntu, RHEL, Fedora, Arch)
  • Une carte réseau physique ou virtuelle ; pour un vrai trunk, il faut un commutateur managé compatible 802.1Q configuré en mode trunk
  • Connaissance de base de l’adressage IP et du sous-réseau

Comprendre les VLANs 802.1Q

Un VLAN (Virtual Local Area Network) crée des segments réseau logiques sur un support physique partagé. 802.1Q est le standard IEEE qui insère un tag de 4 octets dans les trames Ethernet pour transporter l’identifiant VLAN. Linux l’implémente dans le module noyau 8021q, qui expose des sous-interfaces VLAN (parfois appelées interfaces virtuelles) apparaissant au reste de la pile comme des équipements Ethernet ordinaires.

Terminologie clé :

  • VLAN ID (VID) : Un nombre de 12 bits (1–4094) qui identifie un VLAN.
  • Port tagué / port trunk : Un port de commutateur ou de carte réseau qui transporte des trames avec des tags 802.1Q pour plusieurs VLANs.
  • Port non tagué / port access : Transporte le trafic d’un seul VLAN ; le commutateur supprime le tag avant de transmettre à l’équipement final.
  • Sous-interface : Sous Linux, une interface virtuelle comme eth0.10 superposée à un parent (eth0) qui filtre ou injecte des trames taguées pour le VLAN 10.

Lorsqu’une trame arrive sur eth0 avec le tag VLAN 10, le noyau la route vers eth0.10. Le trafic sortant envoyé via eth0.10 est tagué avec le VLAN 10 avant de quitter la machine.

Chargement du support 802.1Q

Avant de créer des interfaces VLAN, assurez-vous que le module noyau 8021q est chargé :

# Charger le module pour la session en cours
sudo modprobe 8021q

# Vérifier qu'il est chargé
lsmod | grep 8021q

Pour le charger automatiquement au démarrage, ajoutez-le au fichier de modules :

echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf

La plupart des distributions le chargent à la demande lors de la création de la première interface VLAN, mais être explicite évite les mauvaises surprises.

Création de sous-interfaces VLAN avec iproute2

La commande ip link add crée une sous-interface VLAN en une seule étape. La syntaxe est simple :

# Créer le VLAN 10 sur eth0
sudo ip link add link eth0 name eth0.10 type vlan id 10

# Activer l'interface
sudo ip link set eth0.10 up

# Assigner une adresse IP
sudo ip addr add 192.168.10.1/24 dev eth0.10

Répétez l’opération pour les VLANs supplémentaires. Ici nous ajoutons le VLAN 20 sur le même parent :

sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip link set eth0.20 up
sudo ip addr add 192.168.20.1/24 dev eth0.20

Inspectez le résultat avec le flag -d (détail) pour confirmer l’ID VLAN et le protocole :

ip -d link show eth0.10
# La sortie contient : vlan protocol 802.1Q id 10 <REORDER_HDR>

Vous pouvez utiliser n’importe quel nom d’interface — eth0.10 est une convention courante, mais vlan10 ou mgmt sont tout aussi valides. C’est l’ID VLAN qui compte, pas le nom.

Configuration des ports trunk

Un port trunk transporte le trafic tagué de plusieurs VLANs entre des équipements réseau. En reliant deux hôtes Linux directement ou en connectant un hôte Linux à un commutateur managé, l’interface physique joue le rôle de trunk et chaque sous-interface représente un VLAN.

Deux hôtes Linux connectés directement :

Sur l’hôte A :

sudo ip link add link eth1 name eth1.100 type vlan id 100
sudo ip link set eth1.100 up
sudo ip addr add 10.0.100.1/24 dev eth1.100

sudo ip link add link eth1 name eth1.200 type vlan id 200
sudo ip link set eth1.200 up
sudo ip addr add 10.0.200.1/24 dev eth1.200

Sur l’hôte B :

sudo ip link add link eth1 name eth1.100 type vlan id 100
sudo ip link set eth1.100 up
sudo ip addr add 10.0.100.2/24 dev eth1.100

sudo ip link add link eth1 name eth1.200 type vlan id 200
sudo ip link set eth1.200 up
sudo ip addr add 10.0.200.2/24 dev eth1.200

Depuis l’hôte A, ping 10.0.100.2 atteint l’hôte B sur le VLAN 100. ping 10.0.200.2 l’atteint sur le VLAN 200 — même câble physique, domaines de diffusion isolés.

Connexion à un commutateur managé :

Sur le commutateur, configurez le port face à l’hôte Linux en mode trunk (ou « tagged » selon les constructeurs) et autorisez les VLANs 100 et 200. Côté Linux, aucun changement n’est nécessaire — l’interface parente transmet déjà toutes les trames taguées à la sous-interface appropriée.

iproute2 vs. autres outils pour la gestion des VLANs

OutilApprochePersistanceComplexité
iproute2 (ip)Sous-interfaces noyauManuelle ou via networkd/NMFaible
NetworkManager (nmcli)Profils de connexion VLANIntégréeFaible
systemd-networkdFichiers .netdev + .networkIntégréeFaible–Moyenne
Open vSwitch (OVS)Commutateur virtuel, support VLAN/tunnel completBase de données OVSÉlevée
bridge + vlan_filtering802.1Q sur pont LinuxManuelle ou networkdMoyenne

Pour un hôte seul avec quelques VLANs, iproute2 associé à systemd-networkd est la solution la plus simple et fiable. Pour un réseau virtuel complexe (plusieurs VMs, overlays VXLAN), Open vSwitch est le bon choix.

Scénario réel : isoler le trafic de gestion et de production

Vous gérez un hyperviseur avec une seule carte réseau 10 GbE. La politique de sécurité exige que le trafic des VMs et celui de la gestion de l’hôte ne partagent jamais un même domaine de diffusion. Le port du commutateur en amont est déjà en mode trunk avec le VLAN 10 (gestion) et le VLAN 100 (VMs de production).

# Réseau de gestion pour l'hôte lui-même
sudo ip link add link eno1 name eno1.10 type vlan id 10
sudo ip link set eno1.10 up
sudo ip addr add 192.168.10.5/24 dev eno1.10
sudo ip route add default via 192.168.10.1 dev eno1.10

# Pont de production pour les VMs — attacher l'interface VLAN à un pont
sudo ip link add name br100 type bridge
sudo ip link set eno1.100 master br100
sudo ip link add link eno1 name eno1.100 type vlan id 100
sudo ip link set eno1.100 up
sudo ip link set br100 up

Les interfaces virtuelles des VMs (périphériques tap) sont ensuite ajoutées comme ports du pont br100. Le trafic des VMs est isolé dans le VLAN 100 ; le plan de gestion de l’hôte vit sur le VLAN 10 et n’est accessible que via sa propre sous-interface.

Rendre la configuration VLAN persistante avec systemd-networkd

Les commandes ip link ci-dessus sont éphémères — elles disparaissent au redémarrage. Avec systemd-networkd, la persistance est déclarative et propre.

Créez la définition netdev du VLAN dans /etc/systemd/network/10-vlan10.netdev :

[NetDev]
Name=eth0.10
Kind=vlan

[VLAN]
Id=10

Créez le fichier réseau dans /etc/systemd/network/10-vlan10.network :

[Match]
Name=eth0.10

[Network]
Address=192.168.10.1/24

Assurez-vous également que l’interface parente est activée et configurée pour laisser passer le trafic VLAN dans /etc/systemd/network/05-eth0.network :

[Match]
Name=eth0

[Network]
VLAN=eth0.10
VLAN=eth0.20

Appliquez les changements :

sudo systemctl enable --now systemd-networkd
sudo networkctl reload

Pour les utilisateurs de NetworkManager, l’équivalent est :

sudo nmcli connection add type vlan con-name vlan10 dev eth0 id 10 ip4 192.168.10.1/24
sudo nmcli connection up vlan10

Pièges et Cas Particuliers

MTU et trames jumbo : L’ajout d’un tag 802.1Q augmente la taille de la trame de 4 octets. Si le MTU de l’interface parente est 1500 et qu’un hôte distant utilise également 1500, vous risquez une fragmentation sur les équipements intermédiaires qui n’autorisent pas les trames de 1504 octets. Réduisez le MTU de la sous-interface à 1496 ou activez les trames jumbo sur la carte et le commutateur.

sudo ip link set eth0.10 mtu 1496

Le mode promiscuous n’est pas nécessaire : La pile 802.1Q du noyau filtre par ID VLAN au niveau du pilote. Vous n’avez pas besoin du mode promisc sur l’interface parente pour un fonctionnement VLAN normal.

Le VLAN 1 est spécial sur beaucoup de commutateurs : Certains commutateurs managés traitent le VLAN 1 comme le VLAN natif/non tagué et peuvent supprimer ou mal gérer son tag. Préférez les VIDs 2–4094 pour les VLANs explicitement tagués afin d’éviter toute ambiguïté.

Double-tagging (QinQ) : Linux supporte les tags VLAN imbriqués avec type vlan protocol 802.1ad. Utilisez cette option uniquement lorsque votre réseau nécessite explicitement le pontage fournisseur (IEEE 802.1ad).

Machines virtuelles et filtrage VLAN sur pont : Lorsque des VMs partagent un pont Linux, activez le filtrage VLAN sur le pont lui-même (bridge vlan filtering 1) plutôt que de créer des sous-interfaces par VM. C’est plus évolutif et évite les inondations MAC entre les ports du pont.

Interférence de NetworkManager : Sur les postes de travail ou serveurs qui exécutent NetworkManager, celui-ci peut tenter de gérer vos interfaces VLAN créées manuellement. Marquez l’interface parente comme non gérée dans /etc/NetworkManager/conf.d/ ou utilisez nmcli pour définir les VLANs correctement afin que NM et networkd n’entrent pas en conflit.

Résolution de Problèmes

Aucun trafic sur la sous-interface VLAN :

  1. Confirmez que le parent est actif : ip link show eth0 — l’état doit être UP.
  2. Confirmez que la sous-interface est active : ip link show eth0.10.
  3. Vérifiez que le port du commutateur est en mode trunk et que l’ID VLAN est autorisé.
  4. Capturez avec tcpdump -i eth0 -e vlan pour voir si des trames taguées arrivent.

Filtrage par mauvais ID VLAN :

# Confirmer l'ID VLAN d'une sous-interface
ip -d link show eth0.10 | grep "vlan id"

Une discordance entre Linux et l’ID VLAN du commutateur est l’erreur la plus fréquente.

Conflits de routes entre VLANs :

Si vous assignez des sous-réseaux se chevauchant à différents VLANs, le noyau routera le trafic entre eux via la table de routage de l’hôte, annulant l’isolation. Utilisez des sous-réseaux distincts et non chevauchants pour chaque VLAN.

L’interface disparaît après le redémarrage :

Les commandes ip link à la volée ne persistent pas. Utilisez systemd-networkd, NetworkManager ou /etc/network/interfaces (Debian/Ubuntu hérité) pour définir des interfaces VLAN persistantes.

Résumé

  • La configuration VLAN Linux 802.1Q utilise la commande ip link add ... type vlan id d’iproute2 — aucun paquet supplémentaire n’est requis.
  • Les sous-interfaces comme eth0.10 se superposent à un parent physique et filtrent ou injectent des trames taguées pour un ID VLAN spécifique.
  • Un port trunk transporte plusieurs VLANs sur un seul lien physique ; chaque VLAN dispose de sa propre sous-interface et adresse IP.
  • Pour une configuration persistante, utilisez les fichiers .netdev/.network de systemd-networkd ou les profils de connexion nmcli.
  • Attention au surcoût MTU, aux particularités du VLAN 1 sur les commutateurs et aux conflits avec NetworkManager.
  • Combinez les sous-interfaces VLAN avec les ponts Linux pour connecter des VMs à des segments tagués sans commutateur managé physique.

Articles Connexes