GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible tener varias puertas de enlace predeterminadas para las conexiones salientes?

Lo resolví yo mismo. Parece que hay muy poca información sobre las cosas de red que puede hacer con Linux, así que he decidido documentar y explicar mi solución en detalle. Esta es mi configuración final:

  • 3 NIC:eth0 (cable), wlan0 (wifi integrado, débil), wlan1 (adaptador wifi usb, señal más fuerte que wlan0)
  • Todos ellos en una sola subred,cada uno de ellos con su propia dirección IP.
  • eth0 debe usarse para el tráfico entrante y saliente de forma predeterminada.
  • Si eth0 falla, se debe usar wlan1.
  • Si wlan1 falla, se debe usar wlan0.

Primer paso :Cree una nueva tabla de rutas para cada interfaz en /etc/iproute2/rt_tables . Llamémoslos rt1, rt2 y rt3

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1  inr.ruhep
1 rt1
2 rt2
3 rt3

Segundo paso :Configuración de red en /etc/network/interfaces . Esta es la parte principal y trataré de explicar todo lo que pueda:

auto eth0 wlan0
allow-hotplug wlan1

iface lo inet loopback

iface eth0 inet static
address 192.168.178.99
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.99 table rt1
    post-up ip route add default via 192.168.178.1 dev eth0 table rt1
    post-up ip rule add from 192.168.178.99/32 table rt1
    post-up ip rule add to 192.168.178.99/32 table rt1
    post-up ip route add default via 192.168.178.1 metric 100 dev eth0
    post-down ip rule del from 0/0 to 0/0 table rt1
    post-down ip rule del from 0/0 to 0/0 table rt1

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
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.97 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.97/32 table rt2
    post-up ip rule add to 192.168.178.97/32 table rt2
    post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
    post-down ip rule del from 0/0 to 0/0 table rt2
    post-down ip rule del from 0/0 to 0/0 table rt2

iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
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 wlan1 src 192.168.178.98 table rt3
    post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
    post-up ip rule add from 192.168.178.98/32 table rt3
    post-up ip rule add to 192.168.178.98/32 table rt3
    post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
    post-down ip rule del from 0/0 to 0/0 table rt3
    post-down ip rule del from 0/0 to 0/0 table rt3

Si escribe ip rule show deberías ver lo siguiente:

0:  from all lookup local 
32756:  from all to 192.168.178.98 lookup rt3 
32757:  from 192.168.178.98 lookup rt3 
32758:  from all to 192.168.178.99 lookup rt1 
32759:  from 192.168.178.99 lookup rt1 
32762:  from all to 192.168.178.97 lookup rt2 
32763:  from 192.168.178.97 lookup rt2 
32766:  from all lookup main 
32767:  from all lookup default 

Esto nos dice que el tráfico entrante o saliente de la dirección IP "192.168.178.99" utilizará la tabla de rutas rt1. Hasta aquí todo bien. Pero el tráfico que se genera localmente (por ejemplo, si desea hacer ping o ssh desde la máquina a otro lugar) necesita un tratamiento especial (vea la cita grande en la pregunta).

Las primeras cuatro líneas posteriores en /etc/network/interfaces son sencillos y se pueden encontrar explicaciones en Internet, la quinta y última línea de publicación es la que hace que suceda la magia:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

Tenga en cuenta que no hemos especificado una tabla de rutas para esta línea de publicación. Si no especifica una tabla de rutas, la información se guardará en el main tabla de rutas que vimos en ip rule show . Esta línea posterior coloca una ruta predeterminada en la tabla de rutas "principal" que se usa 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 colocan una ruta predeterminada en la tabla de rutas principal, aunque con diferentes métricas. Echemos un vistazo al main tabla de rutas con ip route show :

default via 192.168.178.1 dev eth0  metric 100 
default via 192.168.178.1 dev wlan1  metric 101 
default via 192.168.178.1 dev wlan0  metric 102 
192.168.178.0/24 dev wlan0  proto kernel  scope link  src 192.168.178.97 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.99 
192.168.178.0/24 dev wlan1  proto kernel  scope link  src 192.168.178.98

Podemos ver que la tabla de rutas principal 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. Desde eth0 tiene la métrica más baja, esta es la ruta predeterminada que se utilizará hasta eth0 depende. Si eth0 se cae, el tráfico saliente cambiará a wlan1 .

Con esta configuración podemos escribir ping 8.8.8.8 en una terminal y ifdown eth0 en otro. ping todavía debería funcionar porque porque ifdown eth0 eliminará la ruta predeterminada relacionada con eth0 , el tráfico saliente cambiará a wlan1 .

Las líneas post-down 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 se cae, para mantener todo ordenado.

El problema que queda es que cuando sacas el enchufe de eth0 la ruta predeterminada para eth0 todavía está allí y el tráfico saliente falla. Necesitamos algo para monitorear nuestras interfaces y ejecutar ifdown eth0 si hay un problema con la interfaz (es decir, una falla de la NIC o alguien desconectando el enchufe).

Último paso :ingresa ifplugd . Ese es un demonio que observa las interfaces y ejecuta ifup/ifdown si tiras del enchufe o si hay un problema con la conexión wifi /etc/default/ifplugd :

INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

Ahora puede desconectar eth0 , el tráfico saliente cambiará a wlan1 y si vuelves a conectarlo, el tráfico saliente volverá a eth0 . Tu servidor permanecerá en línea siempre que cualquiera de las tres interfaces funcione. 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.


Linux proporciona una mejor solución que su solución alternativa programada:vinculación de copias de seguridad activas.

De esta manera, su máquina tendrá solo uno dirección ip (y una dirección mac) y cambiar de interfaz de forma automática y transparente si una interfaz deja de estar disponible. Sin interrupción de ninguna conexión TCP (ni a su LAN interna ni a Internet).

Yo mismo uso esta configuración para realizar una conmutación por error automática de eth0 a wlan0 en mi computadora portátil Debian cuando desconecto mi computadora portátil de la estación de acoplamiento.

Mi /etc/red/interfaces:

# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0

# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
        pre-up sleep 5
        wpa-conf /etc/wpa_supplicant.conf
        bond-master bond0
        bond-primary eth0

# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
        bond-slaves eth0 wlan0
        bond-primary eth0
        bond-mode active-backup
        bond-miimon 10
        bond_downdelay 10
        bond_updelay 4000

Puede ampliar fácilmente esta configuración para incluir varios dispositivos WLAN. Configuración del primary_reselect opción a better (seleccione 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


Linux
  1. Linux – ¿Software similar a Deep Freeze para Fedora?

  2. ¿Esperar a que terminen de descargarse varios archivos?

  3. ¿Realmente no es posible establecer opciones de montaje predeterminadas para Udisks?

  4. Incluya en la lista blanca una IP en CSF para conexiones MySQL remotas

  5. ¿Es posible tener un historial de bash consciente del directorio?

Cómo buscar múltiples cadenas, patrones o palabras

¿Resolver la dirección Mac desde la dirección IP en Linux?

¿Cómo configuro un nick predeterminado para nuevas conexiones irssi?

¿Cómo montar varias carpetas con nfs4 en centos?

¿Cómo puedo encontrar el número total de conexiones TCP para un puerto determinado y un período de tiempo por IP?

Gran cantidad de conexiones TIME_WAIT dice netstat