3. Etude d'une configuration type

La configuration type étudiée ici est une maquette réduite qui comprend un routeur et un commutateur physique. Pour les besoin des l'illustration, on dissocie l'équipement responsable de la commutation de paquets de l'équipement en charge de la commutation de trames.

Le routeur unique correspond bien à la réalité des réseaux modernes. Du réseau d'agence d'une centaine d'hôtes au réseau de campus de plusieurs milliers d'hôtes, seule la capacité de traitement de l'équipement varie.

Le commutateur unique correspond beaucoup moins à la réalité. Même dans un réseau d'agence, on dépasse très vite le cap des 48 ports connectés. On utilise alors un équipement avec une bonne capacité de commutation qui assure la distribution vers des commutateurs dédiés aux accès des hôtes. Tous ces commutateurs sont reliés entre eux à l'aide de trunks qui véhiculent les flux marqués des réseaux virtuels.

Dans l'illustration présentée ici, les deux couches distribution et accès sont «synthétisées» sur un seul équipement. Un trunk sur un lien gigabit relie le routeur au commutateur. En véhiculant les flux marqués entre le routeur et le commutateur il assure la liaison entre routage et commutation de trames. Les hôtes directement connectés au commutateur n'ont aucune connaissance des balises IEEE 802.1q. Ils ne nécessitent donc aucune configuration particulière.

Cette infrastructure type comprend 2 périmètres reliés au réseau public Internet. Un premier périmètre de services utilisé pour l'hébergement des services accessibles depuis le réseau public : DNS, Web, courrier électronique, etc. Un second périmètre pour les postes de travail qui ne doivent pas être accessibles depuis le réseau public.

On ajoute aux deux périmètres classiques, un réseau particulier dédié à la gestion de l'infrastructure : configuration des équipements, métrologie, journalisation, etc.

Tableau 1. Plan d'adressage des périmètres

Nom VLAN numéro Adresse IP
Management 1 192.168.2.0/24
Services 100 192.168.100.0/24
Accès 200 192.168.200.0/24

Le tableau ci-dessus établit la correspondance entre les périmètres, les réseaux virtuels et les réseaux IP à interconnecter.

3.1. Configuration du trunk

Communications réseau dans le périmètre Management

Du point de vue configuration, ce réseau est très particulier. Il véhicule les trames sans balises IEEE 802.1q entre le routeur et le commutateur. On associe à ce périmètre le VLAN natif du trunk.

Côté routeur GNU/Linux, on configure l'interface de façon classique puisqu'il s'agit de traiter des trames Ethernet standard.

# ip addr add 192.168.2.2/24 brd + dev eth0

Côté commutateur, on utilise la notion de VLAN «natif» pour configurer l'interface en mode trunk.

!
interface GigabitEthernet0/1
 switchport trunk native vlan 1
 switchport mode trunk
 no cdp enable

<snipped/>
!
interface Vlan1
 ip address 192.168.2.1 255.255.255.0
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 no ip route-cache

La configuration du trunk est la suivante :

#sh int gi0/1 trunk

Port        Mode         Encapsulation  Status        Native vlan
Gi0/1       on           802.1q         trunking      1

Port      Vlans allowed on trunk
Gi0/1       1-4094

Port        Vlans allowed and active in management domain
Gi0/1       1,100,200

Port        Vlans in spanning tree forwarding state and not pruned
Gi0/1       1,100,200

Les règles d'utilisation des trames sans balises IEEE 802.1q sont les suivantes :

  • Toute trame appartenant au VLAN natif peut être émise sans balise IEEE 802.1q sur un port en mode trunk par le commutateur.

  • Toute trame reçue sans balise IEEE 802.1q sur un port en mode trunk du commutateur appartient au VLAN natif.

On complétera la configuration du commutateur de façon à ce que toutes les opérations de gestion de l'équipement passent par ce VLAN natif.

À ce niveau, les tests de communication réseau sont très simples.

  • Côté routeur :

    RouterA:~$ ping -c 2 192.168.2.1
    PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
    64 bytes from 192.168.2.1: icmp_seq=1 ttl=255 time=19.4 ms
    64 bytes from 192.168.2.1: icmp_seq=2 ttl=255 time=1.22 ms
    
    --- 192.168.2.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 1.226/10.355/19.484/9.129 ms
  • Côté commutateur :

    Switch#ping 192.168.2.2
    
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
    !!!!!
    Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms

3.2. Configuration IEEE 802.1Q sur le Routeur GNU/Linux

Communications réseau dans les périmètres Services et Accès

Cette fois ci, il est indispensable de traiter les flux marqués avec les balises IEEE 802.1q. Aujourd'hui, tous les noyaux fournis avec les distributions Linux comme Debian GNU/Linux disposent d'un module appelé 8021q.

$ find /lib/modules/`uname -r` -name 8021q
/lib/modules/4.13.0-1-amd64/kernel/net/8021q

Le chargement de ce module se fait automatiquement dès qu'une opération relative aux étiquettes IEEE 802.1q est effectuée. Il suffit alors de consulter la liste des modules pour vérifier sa présence. Il est toujours possible de charger manuellement ce module. Voici un exemple.

# modprobe -v 8021q
modprobe -v 8021q
insmod /lib/modules/4.13.0-1-amd64/kernel/net/llc/llc.ko
insmod /lib/modules/4.13.0-1-amd64/kernel/net/802/stp.ko
insmod /lib/modules/4.13.0-1-amd64/kernel/net/802/mrp.ko
insmod /lib/modules/4.13.0-1-amd64/kernel/net/802/garp.ko
insmod /lib/modules/4.13.0-1-amd64/kernel/net/8021q/8021q.ko

# grep 8021q /var/log/kern.log
kernel: [  439.345617] 8021q: 802.1Q VLAN Support v1.8
kernel: [  439.345723] 8021q: adding VLAN 0 to HW filter on device eth0

Une fois la partie kernelspace traitée, on passe logiquement à la partie userspace. La commande ip du paquet iproute2 dispose de toutes les options utiles pour créer les sous-interfaces associées aux étiquettes IEEE 802.1q.

Dans notre exemple, la syntaxe pour les deux sous-interfaces des deux périmètres définis est la suivante :

# ip link add link eth0 name eth0.100 type vlan id 100
# ip link add link eth0 name eth0.200 type vlan id 200

On visualise aussi le résultat avec la commande ip :

$ ip addr ls
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ba:ad:00:ca:fe:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.2/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::b8ad:ff:feca:fe00/64 scope link
       valid_lft forever preferred_lft forever
3: eth0.100@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
    link/ether ba:ad:00:ca:fe:00 brd ff:ff:ff:ff:ff:ff
4: eth0.200@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
    link/ether ba:ad:00:ca:fe:00 brd ff:ff:ff:ff:ff:ff

Les deux nouvelles sous-interfaces se configurent manuellement de façon classique.

# ip addr add 192.168.100.1/24 brd + dev eth0.100
# ip addr add 192.168.200.1/24 brd + dev eth0.200

Sur un système de la famille Debian GNU/Linux, il est possible de rendre cette configuration permanente en éditant le fichier /etc/network/interfaces comme suit :

<snipped/>
auto eth0
iface eth0 inet static
        address 192.168.2.2/24

auto eth0.100
iface eth0.100 inet static
        address 192.168.100.1/24

auto eth0.200
iface eth0.200 inet static
        address 192.168.200.1/24

Une fois la configuration des interfaces en place, on obtient la table de routage suivante :

# ip route ls
default via aaa.bbb.ccc.1 dev eth11
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.22
192.168.100.0/24 dev eth0.100  proto kernel  scope link  src 192.168.100.13
192.168.200.0/24 dev eth0.200  proto kernel  scope link  src 192.168.200.14
aaa.bbb.ccc.0/24 dev eth1  proto kernel  scope link  src aaa.bbb.ccc.75

1

L'interface eth1 a la possibilité d'acheminer le trafic issu des deux périmètres vers l'Internet via la passerelle par défaut.

2

L'interface physique eth0 sert de trunk entre le routeur et le commutateur. Sa configuration réseau correspond au périmètre Management. Le réseau auquel appartient l'interface utilise des trames sans balises IEEE 802.1q. Dans le jargon, ce VLAN est qualifié de natif.

3

La sous-interface eth0.100 est associée au VLAN numéro 100. Sa configuration réseau correspond au périmètre Services. Les trames de ce réseau qui circulent sur le trunk sont complétées avec une balise IEEE 802.1q qui comprend l'identificateur de VLAN 100.

4

La sous-interface eth0.200 est associée au VLAN numéro 200. Sa configuration réseau correspond au périmètre Accès. Les trames de ce réseau qui circulent sur le trunk sont complétées avec une balise IEEE 802.1q qui comprend l'identificateur de VLAN 200.

5

L'interface eth1 est directement connectée au réseau «public». Elle n'a aucune connaissance du trafic issu des différents périmètres sans configuration spécifique.

Côté commutateur, il faut que la base de données des VLANs connus contienne les mêmes identificateurs que ceux affectés sur le Routeur GNU/Linux.

Le fichier de configuration du commutateur doit contenir les informations suivantes si le protocole VTP a préalablement été configuré en mode transparent :

vlan 1
 name management
!
vlan 100
 name services
!
vlan 200
 name access

Ensuite, on affecte les ports du commutateurs aux différents VLANs ou périmètres.

Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#int range fastEthernet 0/1 - 12
Switch(config-if-range)#switchport access vlan 100
Switch(config-if-range)#exit
Switch(config)#int range fastEthernet 0/13 - 48
Switch(config-if-range)#switchport access vlan 200
Switch(config-if)#^Z
Switch#
07:10:45: %SYS-5-CONFIG_I: Configured from console by console

On visualise le résultat des affectations de ports en mode accès de la façon suivante.

Switch#sh vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active
100  services                         active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9, Fa0/10, Fa0/11, Fa0/12
200  access                           active    Fa0/13, Fa0/14, Fa0/15, Fa0/16
                                                Fa0/17, Fa0/18, Fa0/19, Fa0/20
                                                Fa0/21, Fa0/22, Fa0/23, Fa0/24
                                                Fa0/25, Fa0/26, Fa0/27, Fa0/28
                                                Fa0/29, Fa0/30, Fa0/31, Fa0/32
                                                Fa0/33, Fa0/34, Fa0/35, Fa0/36
                                                Fa0/37, Fa0/38, Fa0/39, Fa0/40
                                                Fa0/41, Fa0/42, Fa0/43, Fa0/44
                                                Fa0/45, Fa0/46, Fa0/47, Fa0/48

3.3. Activation de la fonction routage

Avec la configuration actuelle, le Routeur GNU/Linux ne remplit pas sa fonction. Par exemple, les hôtes du périmètre Accès ne peuvent pas communiquer avec les serveurs du périmètre Services. Il est nécessaire d'activer la fonction routage au niveau du noyau Linux pour que les paquets IP puissent être transmis (ou routés) entre des réseaux différents.

La présentation des fonctions réseau d'une interface pilotée par le noyau Linux sort du cadre de ce document. Il faut consulter le support Configuration d'une interface de réseau local pour obtenir les informations nécessaires.

Voici un extrait du fichier /etc/sysctl.conf comprenant l'ensemble des réglages appliqués au noyau Linux du Routeur de la configuration type. Pour appliquer ces paramètres, il suffit d'utiliser la commande sysctl --system et de valider la valeur de la «clé» ip_forward pour IPv4. Si cette valeur est à 1, le routage est actif au niveau du noyau Linux.

$ egrep -v '(^#|^$)' /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Les tests de communication entre les réseaux des différents périmètres peuvent être effectués depuis le commutateur.

Switch#ping 192.168.2.21

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Switch#ping 192.168.100.12

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.100.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/202/1000 ms
Switch#ping 192.168.200.13

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.200.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
Switch#ping aaa.bbb.ccc.74

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to aaa.bbb.ccc.7, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/202/1004 ms
Switch#ping aaa.bbb.ccc.15

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to aaa.bbb.ccc.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

1

Test de communication ICMP sur le périmètre Management. Ce test n'utilise pas la fonction routage puisqu'il est effectué entre les deux extrémités du trunk.

2

Test de communication ICMP sur le périmètre Services. Ce test utilise la fonction routage entre le réseau 192.168.2.0/24 et le réseau 192.168.100.0/24.

3

Test de communication ICMP sur le périmètre Accès. Ce test utilise la fonction routage entre le réseau 192.168.2.0/24 et le réseau 192.168.200.0/24.

4

Test de communication ICMP vers le réseau public. Ce test utilise la fonction routage entre le réseau 192.168.2.0/24 et le réseau aaa.bbb.ccc.0/24.

5

Test de communication ICMP vers l'Internet. Ce test échoue puisque le Routeur GNU/Linux n'échange pas sa table de routage avec les autres routeurs de l'Internet.

Ces tests montrent qu'il faut compléter la configuration pour que les échanges réseau entre les périmètres et l'Internet soient possibles. Comme ces échanges réseau entre l'Internet et les périmètres ne peuvent pas se faire dans n'importe quelles conditions, il est nécessaire d'introduire la fonction de filtrage pour obtenir une interconnexion satisfaisante.