Debian logo [inetdoc.LINUX]

4. Etude d'une configuration type

La configuration type étudiée ici correspond à un scénario classique d'exploitation d'une infrasctructure de taille moyenne. Pour les besoin des l'illustration, on n'utilise qu'un équipement de chaque type : un routeur et un commutateur.

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 (voir Section 3.3, « Augmentation des débits »).

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. Tout ces commutateurs sont reliés entre eux à l'aide de trunks qui véhiculent les flux marqués des réseaux virtuels. Voir Section 2.1, « Définitions ».

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. Les hôtes directement connectés au commutateur n'ont aucune connaissance des trames IEEE 802.1Q (voir Section 2.3, « Balise IEEE 802.1Q »). Ils ne nécessitent donc aucune configuration particulière.

        __         Routeur
    ___/  \_      GNU/Linux 
  _/        \__     .---.     gi0/1 fa0/4       fa0/23
 /             \eth1| ==|eth0   _|___|_____ / /__|sw1
| Internet      |___| ==|_     |_=_=_=_=_=_/ /_=_=_=_|
\_           __/    |  -| `-O----'   |    / /    |
  \__     __/       |   |  trunk     |           |périmètre
     \___/         -------           |           |accès
                        .------------'           |
                        | périmètre              |.....
                  .__.  | services              .------,~
           serveur| .|,-'                       |client|'
               Web| =|                          |      ||
                  |  |                          \------ /
                 ------                          ======/

Cette infrastructure type comprend 2 périmètres (ou réseaux privés) reliés au réseau public Internet. Un périmètre de services utilisé pour l'hébergement des services accessibles depuis le réseau public : DNS, Web, courrier électronique, etc. et un périmètre pour les postes de travail qui doivent être inaccessibles 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 n° VLAN Adresse IP
Management 2 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.

4.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.

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

# ifconfig eth0 192.168.2.2 broadcast 192.168.2.255 netmask 255.255.255.0

Côté commutateur, on utilise la notion de VLAN «natif» pour configurer le trunk.

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

<snipped/>
!
interface Vlan2
 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      2

Port      Vlans allowed on trunk
Gi0/1       1-4094

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

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

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

  • Toute trame appartenant au VLAN natif du trunk est émise sans balise IEEE 802.1Q par le commutateur.

  • Toute trame reçue sans balise IEEE 802.1Q par le 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 d'une grande trivialité !

  • 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
    

4.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.

Côté routeur GNU/Linux, il faut s'assurer que le noyau à la capacité à traiter les balises IEEE 802.1Q. Tous les noyaux de distributions tels que ceux fournis par Debian ont un module IEEE 802.1Q appelé 8021q.

# find /lib/modules/`uname -r` -name 8021q
/lib/modules/2.6.12-rc5/kernel/net/8021q
# modprobe 8021q

Le résultat du chargement du module se retrouve dans les messages système :

# dmesg
<snipped/>
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>

Avec un noyau récent (version 2.6.12 par exemple), ce module est chargé automatiquement lors d'une opération de configuration sur un VLAN.

Une fois la partie kernelspace traitée, on passe logiquement à la partie userspace : les outils de configuration utilisateur avec le paquet Debian vlan.

# dpkg -l vlan
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: maj=mauvais)
||/ Nom      Version    Description
+++-========-==========-===========================================================
ii  vlan     1.9-2      User mode programs to enable VLANs on your ethernet devices

Tous les outils sont en place ; il ne reste plus qu'à configurer les 2 VLANs correspondant aux 2 périmètres.

# vconfig add eth0 100
Added VLAN with VID == 100 to IF -:eth0:-
# vconfig add eth0 200
Added VLAN with VID == 200 to IF -:eth0:-

Ces 2 opérations ont ajouté 2 sous-interfaces à l'interface physique eth0. On visualise le résultat avec la commande «historique» ifconfig et|ou la commande ip :

# ifconfig -a
eth0      Lien encap:Ethernet  HWaddr 00:0C:6E:B7:09:46
          inet adr:192.168.2.2  Bcast:192.168.2.255  Masque:255.255.255.0
          adr inet6: fe80::20c:6eff:feb7:946/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:2456 (2.3 KiB)  TX bytes:3180 (3.1 KiB)
          Interruption:185

eth0.100  Lien encap:Ethernet  HWaddr 00:0C:6E:B7:09:46
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 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:0 (0.0 b)  TX bytes:0 (0.0 b)

eth0.200  Lien encap:Ethernet  HWaddr 00:0C:6E:B7:09:46
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 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:0 (0.0 b)  TX bytes:0 (0.0 b)
# ip addr ls
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:6e:b7:09:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.2/24 brd 192.168.2.255 scope global eth0
    inet6 fe80::20c:6eff:feb7:946/64 scope link
    valid_lft forever preferred_lft forever
7: eth0.100: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
    link/ether 00:0c:6e:b7:09:46 brd ff:ff:ff:ff:ff:ff
8: eth0.200: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
    link/ether 00:0c:6e:b7:09:46 brd ff:ff:ff:ff:ff:ff

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

# ifconfig eth0.100 192.168.100.1 broadcast 192.168.100.255 netmask 255.255.255.0
# ifconfig eth0.200 192.168.200.1 broadcast 192.168.200.255 netmask 255.255.255.0

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

<snipped/>
auto eth0
iface eth0 inet static
        address 192.168.2.2
        netmask 255.255.255.0
        broadcast 192.168.2.255

auto eth0.100
iface eth0.100 inet static
        address 192.168.100.1
        netmask 255.255.255.0
        broadcast 192.168.100.255

auto eth0.200
iface eth0.200 inet static
        address 192.168.200.1
        netmask 255.255.255.0
        broadcast 192.168.200.255

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

# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0.1001
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth02
aaa.bbb.ccc.0   0.0.0.0         255.255.255.0   U     0      0        0 eth13
192.168.200.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0.2004
0.0.0.0         aaa.bbb.ccc.1   0.0.0.0         UG5    0      0        0 eth1
# ip route ls
192.168.100.0/24 dev eth0.100  proto kernel  scope link  src 192.168.100.1
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.2
aaa.bbb.ccc.0/24 dev eth1  proto kernel  scope link  src aaa.bbb.ccc.7
192.168.200.0/24 dev eth0.200  proto kernel  scope link  src 192.168.200.1
default via aaa.bbb.ccc.1 dev eth1

1

L'interface eth0.100 est associée au VLAN n°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 comprenant l'identificateur de VLAN 100.

2

L'interface 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.

3

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.

4

L'interface eth0.200 est associée au VLAN n°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 comprenant l'identificateur de VLAN 200.

5

L'interface eth1 a la possibilité d'acheminer le trafic issu du Routeur GNU/Linux vers l'Internet via une passerelle par défaut.

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 :

vlan 2
 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#sh vlan

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active
2    management                       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

4.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 réseaux.

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 une copie 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 -p.

# /etc/sysctl.conf - Configuration file for setting system variables
# See sysctl.conf (5) for information.
#
# Refuser la prise en charge des requêtes ARP pour d'autres hôtes
net.ipv4.conf.all.proxy_arp = 0

# Ignorer les mauvais messages d'erreurs ICMP
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignorer les messages de diffusion ICMP
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Journaliser les adresses sources falsifiées ou non routables
net.ipv4.conf.all.log_martians = 1

# Refuser les adresses sources falsifiées ou non routables
net.ipv4.conf.all.rp_filter = 1

# Refuser les messages ICMP redirect
net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

# Refuser le routage source
net.ipv4.conf.all.accept_source_route = 0

# Activer le routage
net.ipv4.ip_forward = 1

Les tests de communications 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 2 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.