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.
Sur une machine, on peut configurer plusieurs routes statiques et une seule route par défaut.
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 :
- 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 passerelle112.65.123.3
. Pour cela, on peut utiliser la commanderoute
:
$ route add -net 192.168.0.0/24 gw 112.65.123.3
- 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 passerelle192.168.0.1
; pour cela, on peut utiliser la commanderoute
:
$ route add -net 112.0.0.0/8 gw 192.168.0.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
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
.
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 de10.0.2.0/24
ne sont valides que sur l’interface réseauenp0s3
, -
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>