Después de hacer una configuración normal de solo eth0, volví y agregué config para eth1. Con solo eth0 arriba, la tabla de rutas era:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Pero una vez que mencioné eth1, el orden de las instrucciones de ruta predeterminadas determinó qué interfaz se usaba siempre. Como se muestra a continuación, sucede que elige la ruta eth1 a la puerta de enlace 192.168.1.65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
solo una declaración de puerta de enlace
El primer problema puede ser la ruta predeterminada adicional 'vía 192.168.1.65'. Aparece allí si la definición eth1 en / etc / network / interfaces tiene una declaración "gateway 192.168.1.65". Elimine cualquier declaración de puerta de enlace adicional y devuelva la interfaz:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
configurar una nueva tabla de enrutamiento
Cree una nueva tabla de enrutamiento separada que contenga una ruta predeterminada apropiada para todo el tráfico que sale de eth1. El número de la tabla aquí no es importante; 101 simplemente no es la tabla de enrutamiento principal. Haga esto con un comando 'post-up' en la configuración de eth1 en / etc / network / interfaces. Agregue solo una publicación en eth1; No lo agregue a ninguna de las eth1: subinterfaces.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Rebote eth1. La tabla de enrutamiento principal no cambia, y la tabla 101 contendrá la ruta predeterminada vía 192.168.1.65 si eth1 está activo.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
nueva regla de enrutamiento
Agregue una regla de enrutamiento para usar la tabla 101 para seleccionar una ruta predeterminada para los paquetes que deberían salir eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Agregue la regla al /etc/network/interfaces
archivo también:
post-up ip rule add from 192.168.1.64/27 lookup 101
Ahora asegúrese de agregar limpieza para eliminar la ruta y la regla cuando la interfaz se caiga:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDITAR para ubuntu 16.04+] Como se indica aquí y de la prueba que hice con esta ayuda, ip route2 ha cambiado su estructura de comandos. Para hacer el trabajo tendrás que adaptarte solo un poco para hacer en el orden cómo van los man ip
puntos .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
O terminará después de un comando ifdown - ifup con un mensaje de error @ifdown (mensaje estándar para indicar que los periféricos no están configurados correctamente), y @ifup la ausencia de una ruta en la tabla 101.