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 2
especifica 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 lan
a 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
local
es una tabla reservada que se usa para que el kernel pueda verificar si una dirección IP es su propia dirección IP, lan
es nuestra tabla, main
es la tabla de enrutamiento habitual que usted conoce y default
es 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 main
tabla. 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.yourhost
hará que el kernel solo pruebe la tabla si la dirección IP de origen en el paquete es 192.168.2.yourhost. iif
permite 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 lo
significa que el tráfico se generó localmente.
Ahora puedes comprobar si funciona probando o usando ip route get
comandos 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