La table de routage est utilisée dans l'ordre du plus spécifique au moins spécifique.
Cependant, sous Linux, c'est un peu plus compliqué que vous ne le pensez. Premièrement, il existe plusieurs tables de routage et le moment où la table de routage utilisée dépend d'un certain nombre de règles.
Pour obtenir l'image complète:
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ 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.0.0 dev eth0 proto kernel scope link src 192.168.1.27
local 192.168.1.27 dev eth0 proto kernel scope host src 192.168.1.27
broadcast 192.168.1.255 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table main
default via 192.168.1.254 dev eth0
192.168.0.0/23 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table default
$
La local
table est la table de routage spéciale contenant des routes de contrôle de haute priorité pour les adresses locales et de diffusion.
La main
table est la table de routage normale contenant toutes les routes non liées aux règles. C'est également le tableau que vous obtenez pour voir si vous exécutez simplement ip route show
(ou ip ro
pour faire court). Je recommande de ne plus utiliser l'ancienne route
commande, car elle ne montre que le main
tableau et son format de sortie est quelque peu archaïque.
La table default
est vide et réservée au post-traitement si les règles par défaut précédentes n'ont pas sélectionné le paquet.
Vous pouvez ajouter vos propres tables et ajouter des règles pour les utiliser dans des cas spécifiques. Par exemple, si vous avez deux connexions Internet, mais qu'un hôte ou un sous-réseau doit toujours être acheminé via une connexion Internet particulière.
Le livre Policy Routing with Linux explique tout cela dans des détails exquis.