Si vous avez (sous Linux) ces deux routes:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Je m'attendrais à ce que le premier soit utilisé, mais ce n'est pas le cas: le second est utilisé à la place.
Si je change cela en ceci:
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Ensuite, cela fonctionne comme prévu. Il semble que "aucune métrique" soit une métrique pire (plus élevée) que n'importe quel nombre, au lieu de la métrique 0.
Qu'est-ce qui se passe? Est-ce spécifique à Linux ou à une norme de mise en réseau?
Merci d'avance.
Êtes-vous sûr de votre première observation? Qu'est-ce que ip route show
ou route -n
montrer alors? Le résultat change-t-il si vous ajoutez proto static
dans le premier cas?
J'ai trouvé au moins deux ressources qui disent explicitement que 0
est la valeur par défaut sous Linux:
iproute2
mais l'analyse de ces sources ne montre pas ce que c'est)Un pirate du noyau Linux serait sûrement nécessaire pour résoudre ce problème.
Quel que soit le choix par défaut, il est clairement spécifique au système d'exploitation. Cet article ( https://support.Microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes ) par exemple montre que Windows choisit la métrique par défaut en fonction de la bande passante du lien.
Étant donné que ces itinéraires se trouvent sur différents sous-réseaux, il y a plus à faire ici que la seule métrique. Si le trafic d'origine est sur le sous-réseau 192.168.1.1, par exemple, et il y a une route non par défaut correspondante dans votre table de routage, alors cette route sera correspondance via correspondance de préfixe la plus longue avant que la métrique ne soit prise en compte.
En supposant qu'une route non par défaut ne correspond pas, alors n'avoir aucune métrique devrait être interprété par le noyau comme ayant une métrique de 0, et donc la priorité la plus élevée route. Bien que ce soit une vue simpliste car certains démons de routage traduiront plus tard cette métrique par défaut en une autre valeur comme 1024. Je m'attends à ce que ce soit ce qui vous arrive à vous et à votre distribution sans nom.
Si ip route
ne montre aucune métrique du tout, vous pouvez confirmer qu'il s'agit bien de 0 en utilisant l'ancienne route -n
commande du package net-tools ou cat /proc/net/route
. Cependant, cette sortie ne correspond pas nécessairement à ce que le démon de routage utilisera en interne lorsqu'il rencontrera une valeur de métrique 0.
De plus, la façon dont vous créez l'itinéraire est également importante. ip route
utilise l'API netlink, tandis que route
utilise ioctl. Le code de création des métriques par défaut entre les deux approches entraîne des valeurs de métrique différentes. Par exemple: création d'une route IPv6 par défaut via ip route
entraînera une valeur métrique de 1024 sur RHEL 7, tandis que la création du même itinéraire via route
entraînera une métrique de 1.
De RedHat :
- si rien n'est transmis à la commande route comme métrique de route, la valeur 1 est utilisée par la commande elle-même.
- Si rien n'est transmis à la commande ip en tant que métrique de route, l'attribut n'est pas créé du tout et le noyau le comprend comme 0, qui est ensuite traduit 1024 par défaut.