Retour au cours

infra / reseaux-tcp-ip

Routage (tables de routage, passerelle)

Leçon 71 exercice

Explication

Ce que vous allez apprendre

  • Lire une table de routage Linux avec ip route show et comprendre chacune de ses lignes
  • Trouver quelle route serait utilisée pour atteindre une destination avec ip route get
  • Ajouter, modifier et rendre permanente une route statique
  • Comprendre le rôle du forwarding IP pour transformer une machine Linux en routeur
  • Départager deux routes concurrentes vers une même destination grâce à la métrique

Dans quel contexte ?

Un serveur applicatif 10.0.1.10 doit atteindre une base de données hébergée sur un réseau distant 10.20.0.0/16, relié via une passerelle secondaire 192.168.1.254 distincte de la passerelle par défaut. Sans une route statique explicite ajoutée sur ce serveur, tout le trafic vers 10.20.0.0/16 partirait par défaut vers la mauvaise passerelle et n'atteindrait jamais sa destination — un cas très courant en environnement multi-réseaux d'entreprise.

Trouver son chemin sans carte globale

Aucune machine sur Internet ne connaît le chemin complet vers toutes les autres. Chaque équipement réseau ne connaît que le "prochain saut" à emprunter pour une destination donnée, et fait confiance à la machine suivante pour continuer le trajet. Le routage, c'est exactement cette succession de décisions locales, prise étape par étape, qui finit par acheminer un paquet à destination — un peu comme demander son chemin de proche en proche plutôt que d'avoir une carte complète.

CommandeRôle
ip route showAffiche la table de routage complète
ip route get <ip>Montre la route qui serait réellement utilisée
ip route addAjoute une route statique (temporaire)
traceroute / mtrVisualise chaque saut jusqu'à la destination

Prérequis

Cette leçon suppose que tu es à l'aise avec l'adressage IP et les sous-réseaux (leçons 2 et 3) : une route ne fait que dire "pour atteindre ce sous-réseau, passe par cette passerelle".

La table de routage : une liste de décisions déjà prises

Concrètement, cette logique de "prochain saut" est stockée dans une table de routage, consultée pour chaque paquet sortant. Une route par défaut sert de filet de sécurité : quand aucune règle plus précise ne correspond, le paquet part vers cette passerelle par défaut, qui elle-même saura peut-être où continuer.

Pourquoi une machine peut devenir un routeur

Par défaut, une machine Linux ne transmet pas le trafic qui n'est pas destiné à elle-même. Activer le "forwarding IP" change ce comportement et transforme la machine en véritable routeur, capable de faire transiter du trafic entre plusieurs réseaux auxquels elle est connectée. C'est un interrupteur simple, mais qui change complètement le rôle de la machine sur le réseau.

Piège fréquent

Activer net.ipv4.ip_forward=1 sur un serveur sans réfléchir à ses règles de pare-feu peut transformer, sans le vouloir, une simple machine en passerelle ouverte entre deux réseaux qui n'étaient pas censés communiquer. Combine toujours l'activation du forwarding avec des règles de filtrage explicites sur la chaîne FORWARD.

Départager plusieurs chemins possibles

Quand plusieurs routes mènent à une même destination, un critère de priorité (la métrique) départage lequel utiliser en premier, l'autre servant de secours. C'est un mécanisme de résilience simple mais efficace, qui prépare la compréhension de sujets plus avancés comme le routage multi-liens ou BGP, vus plus loin dans le cours.

Commandes & code

Routage

bash
# Table de routage locale
ip route show
# default via 192.168.1.1 dev eth0                <- route par défaut (passerelle)
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10   <- réseau directement connecté
# 10.0.0.0/8 via 192.168.1.254 dev eth0             <- route statique vers un autre réseau

# Quelle route serait utilisée pour atteindre une destination précise ?
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10

# Ajouter / supprimer une route statique (temporaire, perdue au reboot)
sudo ip route add 10.20.0.0/16 via 192.168.1.254 dev eth0
sudo ip route del 10.20.0.0/16
sudo ip route add default via 192.168.1.1              # définit/change la passerelle par défaut

# Rendre une route permanente (Debian/Ubuntu avec netplan)
cat /etc/netplan/01-netcfg.yaml
# network:
#   ethernets:
#     eth0:
#       routes:
#         - to: 10.20.0.0/16
#           via: 192.168.1.254
sudo netplan apply

# Routage entre plusieurs interfaces sur une même machine (ex: serveur multi-réseaux)
sudo sysctl -w net.ipv4.ip_forward=1        # active le forwarding IP (fait de la machine un routeur)
# Permanent : ajouter "net.ipv4.ip_forward = 1" dans /etc/sysctl.conf

# Métrique : détermine la route préférée quand plusieurs routes mènent à la même destination
ip route add 10.0.0.0/8 via 192.168.1.1 metric 100
ip route add 10.0.0.0/8 via 192.168.2.1 metric 200      # route de secours, moins prioritaire

# Routage multi-WAN avec des tables séparées (ip rule) : cas expert
sudo ip route add default via 192.168.1.1 table 10       # table de routage dédiée
sudo ip rule add from 192.168.1.10 table 10                # trafic issu de cette IP utilise la table 10
ip rule show                                                  # liste les règles de routage par politique

# Traceroute : visualise chaque saut (routeur) traversé jusqu'à la destination
traceroute exemple.com
traceroute -I exemple.com        # utilise ICMP plutôt qu'UDP (parfois nécessaire selon le pare-feu)
mtr exemple.com                    # traceroute "vivant", combine ping + traceroute en continu

Résumé

  • La table de routage détermine, pour chaque paquet sortant, quelle interface et quelle passerelle utiliser.
  • ip route get <ip> répond directement "quelle route serait utilisée" sans avoir à lire toute la table.
  • ip_forward=1 transforme une machine Linux en routeur ; les métriques départagent des routes concurrentes.

Exercices pratiques

1 disponible
1

Mission : départager deux routes concurrentes et activer le forwarding

Objectif : Déterminer quelle route un serveur multi-homed utilisera réellement, et comprendre pourquoi le routage inter-réseaux reste bloqué sans forwarding IP.

Contexte

Un serveur possède deux routes vers 10.20.0.0/16 : l'une via 192.168.1.254 avec une métrique de 100, l'autre via 192.168.2.254 avec une métrique de 50. Ce même serveur a aussi deux interfaces connectées à 192.168.1.0/24 et 192.168.2.0/24, avec net.ipv4.ip_forward à 0.

Résoudre l’exercice →