(Combinando varios comentarios en una respuesta)
Actualmente, no es posible modificar la métrica de una ruta. Como dice un mensaje de 2005 en LKML:
[...] La métrica/prioridad no se puede cambiar porque no tenemos campos separados para que coincidan los campos y los nuevos valores, por lo que si especifica una métrica, la entrada simplemente no se encontrará y la solicitud falla con ENOENT porque NLM_F_CREATE no se especifica Esta es una limitación del protocolo actual y podría ser una buena idea cambiar esto, sin embargo, no es trivial [...]
Esto parece aplicarse tanto a ip route change
y ip route replace
- el primero da como resultado un error para mí, mientras que el segundo crea una ruta adicional como se anuncia (su página de manual indica que replace
reemplazará o crear una ruta). Esto es coherente con la respuesta del núcleo con ENOENT y ip route replace
siguiendo con una solicitud de creación de ruta.
Entonces, la solución es eliminar la ruta existente y agregar una nueva, por ejemplo,
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
Como se señaló en un comentario a la pregunta, citando un mensaje en la lista de correo de linux-net:"La métrica/prioridad no se puede cambiar [...] Esta es una limitación del protocolo actual [...]".
La única forma es eliminar la ruta y agregar una nueva.
Esto se hace usando el route
comando, ejemplo:
sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
Página de manual de Debian para el comando de ruta
ifmetric
le permitirá cambiar la métrica de su ruta sobre la marcha, dada la interfaz por la que pasan las rutas que desea cambiar.
Uso
ifmetric <iface> [<metric>]
Por ejemplo, use ifmetric tun0 12
para cambiar la métrica a 12 para todas las rutas que pasan por tun0
.