Me gustaría tener varias NIC (eth0 y wlan0) en la misma subred y servir como respaldo para las aplicaciones en el host si falla una de las NIC. Por esta razón, he creado una tabla de enrutamiento adicional. Así es como se /etc/network/interfaces
ve:
iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
post-up ip route add default via 192.168.178.1 dev eth0
post-up ip rule add from 192.168.178.2/32
post-up ip rule add to 192.168.178.2/32
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.3/32 table rt2
post-up ip rule add to 192.168.178.3/32 table rt2
Eso funciona para conectarse al host: todavía puedo usar SSH en él si falla una de las interfaces. Sin embargo, las aplicaciones en el host no pueden inicializar una conexión con el mundo exterior si eth0
está inactivo. Ese es mi problema
Investigué ese tema y encontré la siguiente información interesante:
Cuando un programa inicia una conexión saliente, es normal que use la dirección de origen comodín (0.0.0.0), lo que indica que no hay preferencia en cuanto a qué interfaz se utiliza siempre que se pueda acceder a la dirección de destino relevante. Esto no se reemplaza por una dirección de origen específica hasta que se haya tomado la decisión de enrutamiento. Por lo tanto, el tráfico asociado con tales conexiones no coincidirá con ninguna de las reglas de política anteriores y no se dirigirá a ninguna de las tablas de enrutamiento recientemente agregadas. Suponiendo una configuración normal, caerá a la tabla de enrutamiento principal. http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html
Lo que quiero es que la tabla de ruta principal tenga más de una puerta de enlace predeterminada (una encendida eth0
y otra encendida wlan0
) y que vaya a la puerta de enlace eth0
predeterminada por defecto y por wlan0
si eth0
está inactiva.
¿Es eso posible? ¿Qué necesito hacer para lograr tal funcionalidad?
Respuestas:
Lo resolví yo mismo. Parece que hay muy poca información sobre las cosas de redes que puede hacer con Linux, por lo que he decidido documentar y explicar mi solución en detalle. Esta es mi configuración final:
Primer paso : crear una nueva tabla de ruta para cada interfaz en
/etc/iproute2/rt_tables
. Llamémoslos rt1, rt2 y rt3Segundo paso : configuración de red en
/etc/network/interfaces
. Esta es la parte principal y trataré de explicar todo lo que pueda:Si escribe
ip rule show
, debería ver lo siguiente:Esto nos dice que el tráfico entrante o saliente de la dirección IP "192.168.178.99" usará la tabla de ruta rt1. Hasta aquí todo bien. Pero el tráfico que se genera localmente (por ejemplo, desea hacer ping o ssh desde la máquina a otro lugar) necesita un tratamiento especial (vea la gran cita en la pregunta).
Las primeras cuatro líneas posteriores
/etc/network/interfaces
son sencillas y se pueden encontrar explicaciones en Internet, la quinta y última línea posterior es la que hace que la magia suceda:Tenga en cuenta que no hemos especificado una tabla de ruta para esta línea posterior. Si no especifica una tabla de ruta, la información se guardará en la
main
tabla de ruta que vimos enip rule show
. Esta línea posterior coloca una ruta predeterminada en la tabla de rutas "principal" que se utiliza para el tráfico generado localmente que no es una respuesta al tráfico entrante. (Por ejemplo, un MTA en su servidor que intenta enviar un correo electrónico).Las tres interfaces ponen una ruta predeterminada en la tabla de rutas principal, aunque con diferentes métricas. Echemos un vistazo a la
main
tabla de rutas conip route show
:Podemos ver que la tabla de rutas principales tiene tres rutas predeterminadas, aunque con diferentes métricas. La prioridad más alta es eth0, luego wlan1 y luego wlan0 porque los números métricos más bajos indican una prioridad más alta. Dado que
eth0
tiene la métrica más baja, esta es la ruta predeterminada que se utilizará mientraseth0
esté activa. Sieth0
baja, el tráfico saliente cambiará awlan1
.Con esta configuración podemos escribir
ping 8.8.8.8
en una terminal yifdown eth0
en otra.ping
todavía debería funcionar porque porqueifdown eth0
eliminará la ruta predeterminada relacionada coneth0
, el tráfico saliente cambiará awlan1
.Las líneas posteriores aseguran que las tablas de rutas relacionadas se eliminen de la base de datos de políticas de enrutamiento (
ip rule show
) cuando la interfaz deja de funcionar, para mantener todo ordenado.El problema que queda es que cuando desconecta el enchufe de
eth0
la ruta predeterminadaeth0
todavía está allí y el tráfico saliente falla. Necesitamos algo para monitorear nuestras interfaces y ejecutarlasifdown eth0
si hay un problema con la interfaz (es decir, falla de NIC o alguien que desconecta).Último paso : entrar
ifplugd
. Es un demonio que mira las interfaces y se ejecutaifup/ifdown
si desconectas o si hay un problema con la conexión wifi/etc/default/ifplugd
:Ahora puede conectar el enchufe
eth0
, el tráfico saliente cambiará awlan1
y si vuelve a enchufarlo, el tráfico saliente volverá a cambiareth0
. Su servidor permanecerá en línea mientras funcione cualquiera de las tres interfaces. Para conectarse a su servidor, puede usar la dirección IP de eth0 y, si eso falla, la dirección IP de wlan1 o wlan0.fuente
scp
sesión se interrumpirá porque la dirección IP cambia. Puede intentar usarwithsctp
para mantener viva la conexión en tal caso o usar enrsync
lugar descp
cancelar la transferencia desde el punto donde se detuvo.withsctp
También funcionará para una sola ruta predeterminada.Linux ofrece una solución mejor que su solución alternativa con guión: enlace de respaldo activo.
De esta manera, su máquina tendrá solo una dirección IP (y una dirección MAC) y cambiará de forma automática y transparente las interfaces si una de ellas no está disponible. Sin interrupción de ninguna conexión TCP (ni a su LAN interna ni a Internet).
Estoy usando esta configuración para realizar una conmutación por error automática de eth0 a wlan0 en mi computadora portátil Debian cuando la desconecto de la estación de acoplamiento.
Mi / etc / network / interfaces:
Puede ampliar fácilmente esta configuración para incluir múltiples dispositivos wlan. Establecer la
primary_reselect
opción parabetter
(seleccionar automáticamente el enlace más rápido) debería ayudar aquí.Para obtener más información, consulte https://wiki.linuxfoundation.org/networking/bonding y https://wiki.debian.org/Bonding
Y (por supuesto) la documentación del kernel de Linux en https://www.kernel.org/doc/Documentation/networking/bonding.txt
fuente