Après avoir fait une configuration normale de juste eth0, je suis revenu et j'ai ajouté la configuration pour eth1. Avec juste eth0, la table de routage était:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Mais une fois que j'ai apporté eth1, l'ordre des instructions de route par défaut a déterminé quelle interface était toujours utilisée. Comme indiqué ci-dessous, il arrive de choisir la route eth1 vers la passerelle 192.168.1.65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
une seule instruction de passerelle
Le premier problème peut être la route par défaut supplémentaire «via 192.168.1.65». Il y apparaît si la définition eth1 dans / etc / network / interfaces a une instruction "gateway 192.168.1.65". Supprimez donc toute instruction de passerelle supplémentaire et faites rebondir l'interface:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
configurer une nouvelle table de routage
Créez une nouvelle table de routage séparée contenant une route par défaut appropriée pour tout le trafic sortant de eth1. Le numéro de table ici n'est pas important; 101 n'est tout simplement pas la table de routage principale. Faites-le avec une commande «post-up» sur la configuration eth1 dans / etc / network / interfaces. Ajoutez un seul post-up sur eth1; Ne l'ajoutez à aucune des sous-interfaces eth1 :.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. La table de routage principale est inchangée et la table 101 contiendra la route par défaut via 192.168.1.65 si eth1 est actif.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
nouvelle règle de routage
Ajoutez une règle de routage pour utiliser le tableau 101 pour sélectionner une route par défaut pour les paquets qui doivent sortir eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Ajoutez également la règle au /etc/network/interfaces
fichier:
post-up ip rule add from 192.168.1.64/27 lookup 101
Assurez-vous maintenant d'ajouter du nettoyage pour supprimer l'itinéraire et la règle lorsque l'interface tombe en panne:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDIT pour ubuntu 16.04+] Comme indiqué ici et d'après le test que j'ai fait depuis cette aide, ip route2 a changé sa structure de commandes. Pour faire du travail, vous devrez vous adapter un peu pour faire dans l'ordre comment les man ip
points .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
Ou vous vous retrouverez après une commande ifdown - ifup avec un message d'erreur @ifdown (message standard pour dire que les périphériques ne sont pas correctement configurés), et @ifup l'absence d'une route dans le tableau 101.