Modificar entrada de ruta existente en Linux

11

¿Cuál es el comando para modificar la métrica de una entrada de ruta existente en Linux? Puedo cambiar la puerta de enlace de una entrada existente usando el comando "ip route change" como se muestra a continuación, pero no puedo cambiar las métricas. ¿Hay algún otro comando para eso?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1
usuario1762571
fuente
Aquí hay una página web que tiene los comandos para editar direcciones IP usando el comando ifconfig. No conozco todos los comandos de mi cabeza, pero espero que esta página te ayude. tecmint.com/ifconfig-command-examples
Nicholas Awesomepants
1
Elimine la ruta y luego agréguela nuevamente, a menos que hayan solucionado desde lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
thrig

Respuestas:

7

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 routecomando, 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

ene
fuente
44
La pregunta no era cómo agregar una ruta con una métrica dada; OP quería cambiar la métrica en una ruta existente (sin eliminar y volver a agregar la ruta).
András Korn
44
Es obvio que no ha leído el comentario en la cuestión que enlaza con la proyección de correo electrónico que no la lata métrica ser modificados: The metric/priority cannot be changed [...] This is a limitation of the current protocol[...]. La única forma es eliminar la ruta y agregar una nueva.
Jan
77
Sé que la métrica no se puede cambiar. Su respuesta aún no responde la pregunta: ¿tal vez señale, en la respuesta, que la métrica solo se puede cambiar eliminando y volviendo a agregar la ruta?
András Korn
16

(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 está especificado 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 changecomo ip route replace: el primero resulta en un error para mí, mientras que el segundo crea una ruta adicional como se anuncia (su página de manual indica que replacereemplazará o creará una ruta). Esto es consistente con la respuesta del núcleo con ENOENT y el ip route replaceseguimiento con una solicitud de creación de ruta.


Entonces, la solución es eliminar la ruta existente y agregar una nueva. p.ej

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
marca
fuente
Sí, me mordió este problema en los últimos meses ... como Brian Cantrill sigue diciendo sobre Linux: es algo en evolución con el síndrome NIH (no inventado aquí) ...
Hvisage
@Hvisage puedes elaborar? ¿Existe alguna herramienta que permita cambiar la métrica sin tener que eliminarla?
Braiam el
@Braiam Eso es negativo, como en: NO existe tal herramienta. según la respuesta Si hace referencia a mis citas de Bryan Cantrill, fue en algún lugar en el que creo en youtube.com/watch?v=wTVfAMRj-7E
Hvisage
2

ifmetric le permitirá cambiar su métrica de ruta sobre la marcha, dada la interfaz por la que están pasando las rutas que desea cambiar.

Uso

ifmetric <iface> [<metric>]

Por ejemplo, use ifmetric tun0 12para cambiar la métrica a 12 para todas las rutas que pasan tun0.

AeroClassics
fuente
44
¡Hola! Sería mejor dar un ejemplo práctico de cómo usar el comando para obtener los resultados que pide la pregunta.
dhag
Sí, realmente lo haría. Gracias.
AeroClassics