Ceci est une ancienne révision du document !


Manip VLANs

vlan

Oui, mais au niveau 3 ?

Dans notre exemple, le SWITCH est configuré pour supporter deux VLANS, respectivement d'ID 1 et 2. Les ports verts appartiennent au VLAN d'ID 1 et les ports bleus au VLAN d'ID 2. Aucun de ces ports n'a besoin d'être « tagué » puisqu'ils n'appartiennent qu'à un seul VLAN.

En revanche, sur les ports qui vont véhiculer les trames des deux VLANs, au moins l'un des deux devra être « tagué » au passage de ces ports. Encore une fois, c'est l'interface d'administration du SWITCH qui permettra de réaliser cette configuration. Disons pour fixer les idées que le VLAN vert, d'ID 1  ne sera pas marqué et que le VLAN bleu, d'ID 2 le sera, sur les ports du « trunk » VLAN 1 + VLAN 2.

Pratiquement, admettons que le VLAN 1 supporte un réseau IP 192.168.10.0/24 et que le VLAN 2 soit adressé en 192.168.11.0/24.

Sur le routeur (une machine Debian Etch), nous devons configurer l'unique interface Ethernet physique de manière à ce qu'elle présente deux interfaces IP, chacune pour un VLAN. Il nous faut d'abord installer le paquetage « vlan ».

~# apt-get install vlan
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
....

Nous devons également monter le module noyau qui permet de gérer les tags :

~# modprobe 8021q

Nous venons d'installer les outils nécessaires à la gestion des VLANs (le paquetage vlan et le montage du module 8021q).

Nous devons maintenant créer une interface réseau virtuelle, qui sera chargée de traiter le VLAN bleu d'ID 2 (celui qui est « tagué »). La commande « vconfig » va le permettre :

~# vconfig add eth0 2
Added VLAN with VID == 2 to IF -:eth0:-

Vérifions avec la commande ifconfig :

~# ifconfig -a
eth0      Lien encap:Ethernet  HWaddr 00:20:18:54:99:F9
          inet adr:192.168.10.1  Bcast:192.168.10.255  Masque:255.255.255.0
          adr inet6: fe80::220:18ff:fe54:99f9/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1631 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1233 errors:0 dropped:0 overruns:0 carrier:0
          collisions:2 lg file transmission:1000
          RX bytes:993172 (969.8 KiB)  TX bytes:118423 (115.6 KiB)
          Interruption:11 Adresse de base:0xa800

 eth0.2    Lien encap:Ethernet  HWaddr 00:20:18:54:99:F9
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:332 (332.0 b)  TX bytes:0 (0.0 b)
...

L'argument « -a » est nécessaire pour visualiser les interfaces « down ». eth0.2 existe maintenant, mais n'est pas encore montée.

Nous disposons maintenant sur notre Debian d'un unique adaptateur Ethernet (eth0) qui pourra recevoir nativement le VLAN bleu, puisqu'il n'a pas de tag, et un adaptateur virtuel (eth0.2) qui traitera les trames Ethernet du VLAN vert, d'ID 2. Reste à fixer une adresse IP à eth0.2 et à la monter :

~# ip addr add 192.168.11.1/24 broadcast 192.168.11.255 dev eth0.2
~# ifconfig eth0.2 up

~# ifconfig
eth0      Lien encap:Ethernet  HWaddr 00:20:18:54:99:F9
          inet adr:192.168.10.1  Bcast:192.168.10.255  Masque:255.255.255.0
          adr inet6: fe80::220:18ff:fe54:99f9/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1631 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1233 errors:0 dropped:0 overruns:0 carrier:0
          collisions:2 lg file transmission:1000
          RX bytes:993172 (969.8 KiB)  TX bytes:118423 (115.6 KiB)
          Interruption:11 Adresse de base:0xa800

eth0.2    Lien encap:Ethernet  HWaddr 00:20:18:54:99:F9
          inet adr:192.168.11.1  Bcast:192.168.11.255  Masque:255.255.255.0
          adr inet6: fe80::220:18ff:fe54:99f9/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:0 (0.0 b)  TX bytes:344 (344.0 b)

La dernière étape consistera à :

  • vérifier que le kernel autorise le routage,
  • écrire éventuellement des règles iptables pour le filtrage de paquets, en fonction des besoins.

Cette méthode offre l'avantage de pouvoir réaliser facilement des manipulations pour la mise en ?uvre de la solution, mais offre en revanche l'inconvénient d'être totalement manuelle. Il est bien sûr possible d'arranger ça avec un script bien placé, mais il existe sur Debian (et probablement aussi sur d'autres distributions) une autre solution, qui passe par le fichier de configuration des interfaces (/etc/network/interfaces), dont voici un exemple :

...
auto eth0
iface eth0 inet static
    address 192.168.10.1
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255

auto vlan2
iface vlan2 inet static
    address 192.168.11.1
    netmask 255.255.255.0
    broadcast 192.168.11.255
    vlan_raw_device eth0
...

Nous aurons alors une interface vlan2 en lieu et place de eth0.2, mais qui remplira exactement le même rôle. Pour éviter d'éventuels problèmes de montage du module 8021q, autant l'ajouter dans le fichier /etc/modules.

Mise en œuvre

La manipulation qui suit est faite avec un SWITCH de type D-Link DES-3326s. Lorsque nous configurons notre SWITCH, nous créons plusieurs VLANs. Chacun de ces VLANs dispose d'un VID.

Ensuite, nous attribuons chaque port à un VLAN particulier. Encore une fois, un port (ou plus) peut appartenir à plusieurs VLANs. Voyons ceci sur l'interface d'administration du D-Link DES-3326s :

Nous constatons qu'ici, il n'existe pour l'instant qu'un seul VLAN, de VID 1. Tous les ports de 1 à 24 lui sont assignés de façon « untagged ».
Nous allons commencer par créer un second VLAN de démonstration, puis nous nous occuperons des ports laissés libres (25 et 26). Comme nous le voyons, le second VLAN est créé, mais pour l'instant, aucun port ne lui est assigné.
Enfin, nous assignons le port 25 au VLAN 2 de façon « untagged », puis le port 26 aux deux VLANs. Ici, il faudra utiliser les tags : * « untagged » dur le VLAN 1, * « tagged » sur le VLAN 2

Au final, si nous relions le port 26 à notre Debian Sarge sur son interface physique eth0, nous aurons la possibilité de router les paquets entre les VLANs 1 et 2.