conéctese a múltiples enrutadores Ethernet con un adaptador

conéctese a múltiples enrutadores Ethernet con un adaptador

Posible duplicado:
Cómo unir dos conexiones a Internet diferentes

Estoy buscando el mejor método para conectarme a varios enrutadores mediante un solo adaptador Ethernet y sus efectos secundarios.
Tengo una PC con Linux con un puerto Ethernet, conectada a un conmutador. este conmutador está conectado a varios enrutadores con diferentes redes (por ejemplo, 192.168.1.1, 192.168.2.1, 192.168.3.1). Entonces quiero poder vincular un socket a un "dispositivo" específico, por lo que usaré el enrutador correspondiente para esa conexión.
Creo que esto se puede lograr creando una interfaz eth virtual para cada enrutador y configurando la ip/subred/gw adecuada para cada uno.
las preguntas son: ¿es correcto? , ¿cómo hacerlo? , ¿debo sospechar de efectos secundarios extraños?
* La velocidad total de la red de todos los enrutadores juntos no superará ni siquiera los 10 M.

Respuesta1

Aquí no se necesitan interfaces virtuales. Lo que desea es varias direcciones IP en el mismo dispositivo y buenas tablas de enrutamiento con políticas de enrutamiento para seleccionar qué tabla de enrutamiento usar. Ahora, en la parte de configuración. Configuremos sus direcciones IP con /32, para que podamos crear nuestras rutas de enlace nosotros mismos.

ip addr flush dev eth0
ip addr add 192.168.1.yourhost/32 dev eth0
ip addr add 192.168.2.yourhost/32 dev eth0
ip addr add 192.168.3.yourhost/32 dev eth0

Ahora para la tabla de enrutamiento. La primera tabla de enrutamiento coincidirá con los paquetes que van a su LAN.

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.2.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.3.0/24 dev eth0 src 192.168.1.yourhost table 2

table 2especifica qué tabla de enrutamiento usar. 2 es un número arbitrario. Los números se pueden asignar a nombres editando /etc/iproute2/rt_tables. Agreguemos 2 lana ese archivo, ahora puedes simplemente usar table lan.

Ahora, usemos esa tabla de enrutamiento de forma predeterminada:

ip rule add table lan

Ahora, si observa el resultado de ip rule, verá algo como esto:

0:      from all lookup local 
99:     from all lookup lan
32766:  from all lookup main 
32767:  from all lookup default

locales una tabla reservada que se usa para que el kernel pueda verificar si una dirección IP es su propia dirección IP, lanes nuestra tabla, maines la tabla de enrutamiento habitual que usted conoce y defaultes una tabla especial para paquetes que no podemos enrutar. Básicamente, el núcleo probará estas reglas comenzando desde la primera y, si no puede encontrar una ruta en esa tabla, pasará a la siguiente regla.

Entonces agregamos otra tabla de enrutamiento donde colocamos nuestras rutas a la LAN, que se prueba antes de la maintabla. Ahora agreguemos una ruta predeterminada en principal: cuando no vincules un socket a una dirección IP, solo usarás esta ruta predeterminada. Elijamos 192.168.1.1:

ip route add default via 192.168.1.1 src 192.168.1.yourhost

Ahora, si vincula su socket a 192.168.2.yourhost, no querrá usar esa ruta predeterminada, sino otra. Agreguemos esta ruta predeterminada a otra tabla de enrutamiento:

ip route add default via 192.168.2.1 src 192.168.2.yourhost dev eth0 table 3
# and while we are at it, let's do this for 192.168.3.1 as well
ip route add default via 192.168.3.1 src 192.168.3.yourhost dev eth0 table 4

Ahora desea utilizar esta tabla de enrutamiento, pero solo si su socket está vinculado a estas otras direcciones IP.

ip rule add from 192.168.2.yourhost iif lo table 3
ip rule add from 192.168.3.yourhost iif lo table 4

from 192.168.2.yourhosthará que el kernel solo pruebe la tabla si la dirección IP de origen en el paquete es 192.168.2.yourhost. iifpermite especificar desde qué interfaz se recibió el paquete (lo cual es útil cuando se reenvía tráfico) con una excepción especial, donde iif losignifica que el tráfico se generó localmente.

Ahora puedes comprobar si funciona probando o usando ip route getcomandos para probar tus tablas de enrutamiento:

$ ip route get 192.168.2.5
192.168.2.5 dev eth0  src 192.168.2.yourhost 
    cache
$ ip route get 64.34.119.12
64.34.119.12 via 192.168.1.1 dev eth0 src 192.168.1.yourhost 
    cache
$ ip route get 64.34.119.12 from 192.168.2.yourhost
64.34.119.12 via 192.168.2.1 dev eth0 src 192.168.2.yourhost 
    cache

información relacionada