3.4 - Routage

Introduction au routage

Qu’est-ce que le routage?

Le routage permet de faire communiquer plusieurs sous-réseaux.

Le routage est un processus qui permet de sélectionner des chemins (routes) dans un réseau pour transmettre des données depuis un expéditeur jusqu’à un ou plusieurs destinataires. (src : https://www.futura-sciences.com).

Donnez des exemples de domaine où peut s’appliquer la fonction de routage.

EQUIPEMENTS QUI IMPLÉMENTENT LA FONCTION DU ROUTAGE

La fonction du routage est implémenté au niveau de la couche 3 du modèle OSI ou de la couche 2 du modèle TCP/IP. C’est-à-dire au niveau des couches réseau (OSI) et internet (TCP/IP).

Les équipements capable de faire le routage sont des équipements appelés de couche 3 (couche réseau OSI) et plus. On peut citer :

  • Routeur

  • Ordinateur

  • Smartphone

  • Switch multicouches

Linux, un routeur

La fonction de routage est implémenté sur tous les systèmes d’exploitation Windows, Linux et autres.

Pour vérifier sous Linux si la fonction du routage est implémentée, on peut utiliser la commande :

$ ip route

Cette commande permet d’afficher la table de routage.

Principes fondamentaux de la fonction de routage

Chaque ordinateur (machine Linux) doit être dotée :

  • d’une seule route par défaut afin de pouvoir sortir vers l’extérieur.

Ou

  • d’une route statique identifiée vers chaque sousréseau.
Note

Sur une machine, on peut configurer plusieurs routes statiques et une seule route par défaut.

Route

Route Route

Route Route

Une route définie sur une station est un chemin que doivent emprunter les paquets à destination d’un autre sous-réseau.

Soit l’exemple (en image) d’une station, appelée station 1, d’adresse IP 112.65.77.8 sur un réseau 112.0.0.0/8.

Elle est connectée à une passerelle qui a pour IP dans ce réseau 112.65.123.3 sur son interface eth0.

La passerelle est aussi connectée au réseau 192.168.0.0/24 via son interface eth1 qui a pour IP 192.168.0.1. Si la station 1 veut communiquer directement avec la station 6, d’adresse IP 192.168.0.2 sur le réseau 192.168.0.0/24, trois condition doivent être réunies :

  1. Une route doit être définie sur la station 1 indiquant que les paquets à destination du réseau 192.168.0.0/24 doivent passer par la passerelle 112.65.123.3. Pour cela, on peut utiliser la commande route :
$ route add -net 192.168.0.0/24 gw 112.65.123.3
  1. Une route doit être définie sur la station 6 indiquant que les paquets à destination du réseau 112.0.0.0/8 doivent passer par la passerelle 192.168.0.1 ; pour cela, on peut utiliser la commande route :
$ route add -net 112.0.0.0/8 gw 192.168.0.1
  1. La passerelle doit être configurée pour transmettre (ou forwarder) les paquets IP d’un réseau à l’autre, ce qui se fait par la commande :
# echo 1 > /proc/sys/net/ipv4/ip_forward

ou

$ sysctl -w net.ipv4.ip_forward=1

ou de façon permanente en ajoutant dans le fichier

/etc/sysctl.conf la ligne : net.ipv4.ip_forward=1

Route Route

Toute la configuration précédente est à refaire si on redémarre la machine. Afin d’éviter qu’à chaque redémarrage on doit retaper à nouveau toutes les commandes précédentes, on peut les mettre dans des scripts d’initialisation au démarrage avec la commande update-rc.d (sous debian) ou chkconfig (Redhat).

Pour ajouter un script my_ script à l’initialisation :

$ mv my_script /etc/init.d
$ update-rc.d my_script defaults (sous debian)
$ chkconfig --add my_script (sous Redhat)

Dans le cas de cette topologie, on aurait pu remplacer la route statique définie précédemment dans les stations 1, 2 et 3 par une route par défaut.

La configuration d’une route par défaut peut se faire par l’une des méthodes suivantes :

  • Définir une passerelle par défaut (gateway)
$ ip route add default via 112.65.123.3

Ou

  • Rajouter la route en utilisant la commande :
$ route add -net 0.0.0.0/0 gw 112.65.123.3

De même du coté des stations 4, 5 et 6 vers la gateway 192.168.0.1.

Route Route

Table de routage (sous Linux)

Une étape importante du voyage d’un datagramme (paquet) IPv4 à l’intérieur du noyau Linux est la recherche de la route à utiliser via la fonction fib_lookup().

À partir des informations essentielles concernant le datagramme (adresses IP source et destination, interfaces, …), cette fonction doit fournir rapidement une décision.

Quelques unes des options (décisions) possibles sont :

  • Livraison locale (RTN_LOCAL),

  • Routage via un intermédiaire fourni (RTN_UNICAST),

  • Destruction sans notification (RTN_BLACKHOLE).

Interprétation

Plusieurs commandes sont utilisées pour consulter la table de routage sous Linux :

$ ip route show (ou ip route list)

default via 10.0.2.2 dev enp0s3 proto dhcp metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

La première ligne indique que la route par défaut pour n’importe quel paquet (c’est-à-dire la route empruntée par un paquet lorsqu’aucune autre route n’est appliquée) passe par le périphérique réseau enp0s3 via la passerelle par défaut (le routeur) dont l’adresse IP est 10.0.2.2.

  • default = 0.0.0.0/0 (correspond à n’importe quel réseau), 10.0.2.0/24 correspond au réseau de destination (à atteindre),

  • via 10.0.2.2 : adresse IP du tronçon suivant via lequel on peut joindre le réseau de destination,

  • dev enp0s3 : interface réseau à utiliser pour acheminer le paquet IP,

  • proto (kernel, dhcp ou static) : signifie que cette entrée dans la table de routage a été créée par le noyau lors de la configuration automatique, ou en appliquant le dhcp ou configurée manuellement,

  • scope link src 10.0.2.15 : « lien de portée » signifie que les adresses IP de destination au sein de 10.0.2.0/24 ne sont valides que sur l’interface réseau enp0s3,

  • metric 100 : signifie la mesure locale pour atteindre la destination en empruntant ce chemin.

Plusieurs commandes sont utilisées pour consulter la table de routage sous Linux :

$ netstat -rn

Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic   MSS Fenêtre irtt Iface
0.0.0.0         192.168.130.2   0.0.0.0         UG        0 0          0 ens160
192.168.130.0   0.0.0.0         255.255.255.0   U         0 0          0 ens160

$ ip route
default via 192.168.130.2 dev ens160 proto dhcp src 192.168.130.128 metric 100 
192.168.130.0/24 dev ens160 proto kernel scope link src 192.168.130.128 metric 100 

Exemples de recherches

IP destination Prochain saut
192.0.2.49 203.0.113.3 via out1
192.0.2.50 203.0.113.3 via out1
192.0.2.51 203.0.113.7 via out3
ou
203.0.113.9 via out4 (ECMP)
192.0.2.200 203.0.113.5 via out2

Règles de routage

Linux gère plusieurs tables de routage et dispose d’un système de règles pour choisir la table à utiliser. Ces règles peuvent être configurées avec la commande ip rule.

Par défaut, il en existe trois :

$ ip rule show

0: from all lookup local
32766: from all lookup main
32767: from all lookup default

Linux va d’abord utiliser la table local et en cas d’échec se rabattre sur main puis default.

Table à utiliser par défaut

La table local contient les routes pour la livraison locale :

$ ip route show table local

broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.117.0 dev eno1 proto kernel scope link src 192.168.117.55
local 192.168.117.55 dev eno1 proto kernel scope host src 192.168.117.55
broadcast 192.168.117.63 dev eno1 proto kernel scope link src 192.168.117.55

Cette table est gérée automatiquement par le noyau quand des adresses IP sont configurées.

La table main contient habituellement toutes les autres routes :

$ ip route show table main

default via 192.168.117.1 dev eno1 proto static metric 100
192.168.117.0/26 dev eno1 proto kernel scope link src 192.168.117.55 metric 100

La route default a été mise en place par un démon DHCP. La route connectée (scope link) a été ajoutée automatiquement par le noyau (proto kernel) lors de la configuration de l’adresse IP sur l’interface eno1.

La table default est vide et est rarement utilisée. Elle reste là depuis Linux 2.1.68 en hommage à la première tentative de routage avancé dans Linux 2.1.15.

$ ip route show table default

Commandes utiles

Ajouter une route par défaut (gateway) :

$ route add default gw <ip_passerelle>

Pour supprimer une route par défaut (gateway) :

$ route del default gw < ip_passerelle>

Ajouter une route statique :

$ route add -net <réseau> netmask <masque_décimal> gw <passerelle> [dev <interface_de_sortie>]

Ou

$ ip route add <réseau/masque> via <passerelle>

Interfaces :

Liste d’interfaces :

$ nmcli device

Détails actuels des interfaces:

$ nmcli device show

Activer/désactiver une interface :

$ nmcli device connect <interface>
$ nmcli device disconnect <interface>

Profils (“connections”)

Liste de profils :

$ nmcli connection

Liste pour une interface :

$ nmcli -f CONNECTIONS device show <interface>

Détails :

$ nmcli connection show id <profil>

Activer/désactiver :

$ nmcli connection up <profil>

ou

nmcli connection down <profil>