(Combinant divers commentaires en une réponse)
Actuellement, il n'est pas possible de modifier la métrique d'une route. Comme l'indique un message de 2005 sur LKML :
[...] La métrique/priorité ne peut pas être modifiée car nous n'avons pas de champs séparés pour les champs à faire correspondre et les nouvelles valeurs, donc si vous spécifiez une métrique, l'entrée ne sera tout simplement pas trouvée et la demande échoue avec ENOENT car NLM_F_CREATE n'est pas spécifié. C'est une limitation du protocole actuel et il serait peut-être judicieux de changer cela, cependant ce n'est pas anodin [...]
Cela semble s'appliquer à la fois à ip route change
et ip route replace
- le premier entraîne une erreur pour moi, tandis que le second crée une route supplémentaire comme annoncé (sa page de manuel indique que replace
remplacera ou créer un itinéraire). Ceci est cohérent avec le noyau répondant avec ENOENT, et ip route replace
suivi d'une demande de création de route.
La solution consiste donc à supprimer l'itinéraire existant et à en ajouter un nouveau, par exemple
ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234
Comme indiqué dans un commentaire à la question, citant un message sur la liste de diffusion linux-net :"La métrique/priorité ne peut pas être modifiée [...] Ceci est une limitation du protocole actuel [...]."
Le seul moyen est de supprimer l'itinéraire et d'en ajouter un nouveau.
Ceci est fait en utilisant le route
commande, exemple :
sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
Page de manuel Debian pour la commande route
ifmetric
vous permettra de modifier votre métrique d'itinéraire à la volée, en fonction de l'interface par laquelle les itinéraires que vous souhaitez modifier passent.
Utilisation
ifmetric <iface> [<metric>]
Par exemple, utilisez ifmetric tun0 12
pour changer la métrique à 12 pour toutes les routes passant par tun0
.