¿Cómo configurar rutas estáticas en Ubuntu Server?

51

He usado Ubuntu desde Ubuntu 8.10; hoy estoy trabajando con Ubuntu 12.04 Server.

Tengo dificultades para mantener rutas estáticas en el arranque. Normalmente ponía los comandos de ruta

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

en /etc/rc.localo crearía un archivo (llamado routes) dentro del directorio /etc/network/if-up/, pero noto que en Ubuntu 12.04 no funciona.

Si escribo los comandos en el shell, funcionan, pero los mismos comandos no funcionan cuando están en el archivo especificado.

Ya intenté cambiar el nombre del archivo a otros nombres pensando que mi nombre de archivo ( routes) podría ser erróneo en Ubuntu 12.04, pero eso tampoco funcionó.

Noto también que el comando /sbin/ifconfigfunciona, menos el /sbin/route.

¿Qué cambió en la configuración de la red?

¿Cómo puedo definir rutas estáticas en Ubuntu 12.04?

Frank Allan
fuente
Solo para verificar: ¿rc.local es ejecutable y comienza con la línea shebang? Tal vez sea un problema con tu comando. Puede intentar redirigir stderr a un archivo ( your_command > stderr.txt 2>&1) e inspeccionar su salida ...
Salem
Debe establecer rutas en / etc / network / interfaces, no en /etc/rc.local. Y los nuevos comandos que debes usar son ip addy ip route. Un comando para gobernar la red. :)
Anders
Definitivamente leídoman 5 interfaces
David Tonhofer

Respuestas:

64

Puedes poner rutas estáticas en /etc/network/interfaces:

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1
Eric Carvalho
fuente
13
Sintaxis para / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t
1
¿Podría explicar amablemente sus dos últimas líneas en la respuesta o proporcionar un enlace a la fuente de conocimiento? ¡Gracias!
itsols
Puede ver -net 192.68.0.0 como comodín, indicando que todos los paquetes destinados a 192.168. *. * Deben enrutarse a través de la puerta de enlace predeterminada 192.168.1.1. El kernel intentará resolver esa puerta de enlace predeterminada, pero si ya tiene una entrada ARP, enviará el paquete a la interfaz que ha aprendido que la puerta de enlace reside en el MAC de destino para el próximo salto. Espero que esto ayude un poco.
Neil McGill
También hay /etc/network/interfaces.d/ que puede ser un mejor lugar para colocar la ruta.
Elijah Lynn
Esto funciona, pero no se describe en las páginas del manual para las interfaces de red. ¿Es esto estándar?
B 4овић
18

Muy a menudo descubrí que el lugar correcto para definir una ruta estática es en / etc / network / interfaces, está bien si va a reiniciar globalmente la red con /etc/init.d/networking restart, por ejemplo. Pero si va a usar ifdown y ifup para cerrar una interfaz individualmente, ifup terminará con el error:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Por eso intenta definir una ruta pero ya está definida. La interfaz estará activa de todos modos, pero ifup no se actualizará / ejecutará / network / ifstate, así que la próxima vez que nos desconecte no podrá hacerlo a menos que use el indicador --force.

Para hacer que ifup continúe configurando incluso si las rutas ya están definidas, puede usar este formato al definir rutas en / etc / network / interfaces

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

De esta forma, aparecerá la advertencia en la salida, pero la configuración de la interfaz se completará.

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553
mseisdedos
fuente
1
¿Por qué no simplemente agregar un "down ip route del 192.168.0.0/16 via 192.168.10.1" a la configuración?
w00t
Debido a que las personas hacen cosas como usarlas ifconfigmanualmente, en lugar de correr ifdown, quieren poder recuperarse usando las herramientas correctas. Por lo tanto, es útil si esas herramientas son resistentes a un estado inesperado mientras intentan arreglar el estado. La || truesugerencia es buena. Agregar una línea descendente también es útil.
Phil P
55
De un usuario aleatorio: use "reemplazar" en lugar de "agregar" en el comando ip. Por ejemplo: up ip route replace 172.16.0.0/24 via 192.168.10.1"reemplazar" agregaría la ruta si aún no existe, pero si existe una ruta con el mismo selector, sería reemplazada por la actual, incluso si tienen el mismo destino.
Xen2050
9

Puede probar esto (agregarlo a /etc/network/interfaces), esta es una forma casi completa de configurar rutas:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/
mmehboobhan
fuente
6

Hay un paquete ifupdown-extra disponible en Ubuntu.
Proporciona scripts automáticos (instalados en /etc/network/*/), uno de los cuales se utiliza para agregar rutas estáticas.

El archivo de configuración para esto es /etc/network/routes

La parte superior de este archivo de configuración tiene una buena descripción:

Este archivo de configuración se lee mediante el script if-updown de static-routes y el script /etc/init.d/networking-routes para configurar una lista de rutas asociadas con una interfaz dada o rutas globales.

Un ejemplo de ruta que uso es:

192.168.240.0 255.255.255.0 192.168.130.3 em3
NGRhodes
fuente
1

lo que funcionó para nosotros fue

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

Solía ​​correr en una Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

pero en un ubuntu faltaba el "gw" entre las IP y la última parte de "máscara de red" (tampoco se requiere -n en ubuntu)

Peter Perháč
fuente
10
esto funciona perfectamente para rutas temporales (no persistentes), la pregunta es acerca de cómo conseguir rutas persistentes
anneb
0

Yo prefiero usar nmcli.

nmcli device modify <device-name> ipv4.routes "<ip>/<mask> <gw>" ipv4.route-metric 25

Por ejemplo:

nmcli device modify wlp2s0 ipv4.routes "1.1.1.0/24 192.168.0.1" ipv4.route-metric 25

Después de eso, aplique los cambios reiniciando el servicio NetworkManager:

sudo systemctl restart NetworkManager.service
isapir
fuente
0

Utilizando nmclipude ejecutar una solución persistente (la solución @isapir no funcionó en mi dispositivo).

sudo nmcli connection modify <conection-name> +ipv4.routes "<ip>/<mask> <gw> <mt>"

Por ejemplo:

sudo nmcli connection modify ssid-name +ipv4.routes "1.1.1.0/24 192.168.0.1 100"

Después de eso, es posible aplicar los cambios configurando la conexión hacia abajo y hacia arriba nuevamente (no es necesario reiniciar completamente NetworkManager):

sudo nmcli con down ssid-name ; sudo nmcli con up ssid-name

Para ver las conexiones actuales, ejecute:

sudo nmcli connection
ofirule
fuente