VLAN tagging on Linux & Cisco

VLAN quoi ?

Le VLAN tagging est une technique consistant à étiqueter le trafic afin d’opérer un filtrage et une séparation entre les flux. Linux est depuis longtemps capable de gérer par lui-même cette séparation, qui était à l’origine le privilège des équipements d’intercommunication. Petite démonstration avec un nunux et un switch Cisco.

Prérequis et configuration du Linux

Pour utiliser le VLAN tagging, il faut :

  • un Linux avec le support du VLAN tagging. Normalement, tout kernel au-dessus de 2.4 supporte 802.1q
  • des switches qui les supportent également

Tout d’abord, il faut activer le packet forwarding au sein du Linux. Il est possible de l’activer sans avoir à rebooter, même s’il faut tout de même le fixer pour ne pas perdre l’option au reboot en mettant net.ipv4_forward à 1 dans /etc/sysctl.conf.

# echo 1 > /proc/sys/net/ipv4/ip_forward

Si vous avez plusieurs interfaces réseaux, choisissez celle qui supportera le vlan tagging. Dans mon cas, je n’en ai qu’une, eth0, d’où justement l’intérêt de tagguer différemment le flux en fonction de l’ip.

L’idée est de s’appuyer sur la conf existante pour créer une interface fictive s’appuyant sur la même interface physique (eth0). A ceci-près que le fichier de conf sera affublé d’un . suivi du numéro de VLAN que l’on souhaite tagger sur cette interface. Il est possible de le forcer également avec la directive VLAN_ID.

# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.21}
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.11.255
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=192.168.11.7
NETMASK=255.255.255.0
NETWORK=192.168.11.0
ONBOOT=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth0.21
DEVICE=eth0.21
BOOTPROTO=none
BROADCAST=192.168.21.255
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=192.168.21.7
NETMASK=255.255.255.0
NETWORK=192.168.21.0
ONBOOT=yes
VLAN=yes

La configuration de ifcfg-eth0.21 va permettre de créer une interface ethernet virtuelle qui  sera en charge d’exploiter les packets taggués pour le VLAN 21.

Il reste à recharger le service réseau afin de remonter les interfaces réseaux tout bien comme il faut.

# service network restart
Shutting down interface eth0:    [ OK ]
Shutting down loopback interface:    [ OK]
Disabling IPv4 packet forwarding: net.ipv4.ip_forward = 0 [ OK ]
Bringing up loopback interface:    [ OK ]
Bringing up interface eth0:        [ OK ]
Bringing up interface eth0.21: Added VLAN with VID == 21 to IF -:eth0:- [ OK ]

Configuration du switch Cisco

On veut que la conf du switch soit comme suit :

  • port fa0/1 pour le linux
  • port fa0/2 sera assigné au VLAN 21
  • port fa0/3 sera assigné au VLAN 22.

Maintenant, de la conf. Pour attaquer le sswitch Cisco, il faut l’attraper par un telnet ou une connexion en console. Passez en mode enable.

# conf t
(config)# vlan 21
(config-vlan)# exit
(config)# vlan 22
(config-vlan)# exit
(config)# exit
# wr me
#sh vlan brief
VLAN Name             Status    Ports --------- --------- -------------------------------
1    default          active    Fa0/2, Fa0/3, Fa0/4, Fa0/5
                                Fa0/6, Fa0/7, Fa0/8, Fa0/9
                                Fa0/10, Fa0/11, Fa0/12, Fa0/13
                                Fa0/14, Fa0/15, Fa0/16, Fa0/17 
                                Fa0/18, Fa0/19, Fa0/20, Fa0/21
                                Fa0/22, Fa0/23, Fa0/24, Gi0/1 Gi0/2
21    VLAN0021        active    
22    VLAN0022        active
[...]

Pour attribuer les ports du switch aux différents VLAN, il suffit alors de le lui dire.

# conf t
(config)# int fa0/2
(config-if)# switchport mode access
(config-if)# switchport access vlan 21
(config-if)# spanning-tree portfast
(config-if)# exit
(config)# exit
# wr me
# sh run
[...]
interface FastEthernet0/2
switchport access vlan 21
switchport mode access
spanning-tree portfast

# conf t
(config)# int fa0/3
(config-if)# switchport mode access
(config-if)# switchport access vlan 22
(config-if)# spanning-tree portfast
(config-if)# exit
(config)# exit
# wr me
# sh run
[...]
interface FastEthernet0/3
switchport access vlan 22
switchport mode access
spanning-tree portfast

A cela, il faut enrichir le trunk afin qu’il accepte de supporter et de router les VLAN 21 et 22 :

# conf t
(config)# int fa0/1
(config-if)# switchport mode trunk
(config-if)# switchport trunk allowed vlan 21,22
(config-if)# exit
(config)# exit
# wr me

Le résultat doit donner :

# sh vlan brief
VLAN Name             Status    Ports --------- --------- -------------------------------
1    default          active    Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8,
                                Fa0/9, Fa0/10, Fa0/11, Fa0/12,
                                Fa0/13, Fa0/14, Fa0/15, Fa0/16,
                                Fa0/17, Fa0/18, Fa0/19, Fa0/20,
                                Fa0/21, Fa0/22, Fa0/23, Fa0/24,
                                Gi0/1 Gi0/2    
21   VLAN0021         active    Fa0/2
22   VLAN0022         active    Fa0/3
[...]

And voila ! Votre conf est prête, vous pouvez normalement router sur chacun des VLANs.

Vus : 1977
Publié par K-Tux : 59