Mapee y reenvíe el tráfico desde múltiples PC a múltiples enrutadores con iptables

Mapee y reenvíe el tráfico desde múltiples PC a múltiples enrutadores con iptables

¿Es posible configurar un servidor Linux con iptables para hacer esto?

PC (192.168.1.11) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.12) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.13) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
...
PC (192.168.1.21) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.22) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.23) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
...
PC (192.168.1.31) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.32) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.33) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
...

Respuesta1

iptablesno es una herramienta para enrutar. Aunque a veces se puede utilizar para complementar la configuración de enrutamiento marcando paquetes, esto ni siquiera es necesario aquí.

Lo que se requiere esenrutamiento basado en políticas: usar algo más que solo la dirección de destino para elegir una ruta: la dirección de origen.

Suponiendo o afirmando que:

  • se llamará al servidor Linuxservidor
  • Las 9 piezas,servidory los 3 enrutadores ya están configurados según el esquema del OP
    • En particular, los PC no necesitan ninguna configuración especial. Sólo necesitan tenerservidorcomo puerta de enlace predeterminada.
  • Todas las direcciones en el esquema de OP usan un /24CIDR/máscara de red.
  • servidorusos:
    • eth0con dirección 192.168.1.1/24
    • eth1con dirección 192.168.0.100/24
    • servidorPuede que tenga o no una puerta de enlace predeterminada, no importa. El enrutamiento de políticas utilizará su propia configuración separada para el tráfico reenviado, por lo que no depende de la puerta de enlace predeterminada de la tabla de enrutamiento principal, si corresponde.

Si aún no lo ha hecho, los 3 enrutadores necesitarán rutas adicionales para llegar a 192.168.1.0/24 conservidorcomo puerta de entrada. Se necesitaría lo mismo en los sistemas para alcanzar la LAN 192.168.0.0/24. Si estuvieran ejecutando Linux, esto se haría en los 3 enrutadores o en cualquier otro sistema con:

ip route add 192.168.1.0/24 via 192.168.0.100

EDITAR: comopreguntó más tarde, si no se permite reconfigurar otros sistemas en 192.168.0.0/24 LAN,servidorPuede usar NAT en el servidor para ocultar la existencia de 192.168.1.0/24 en esos sistemas, incluidos los 3 enrutadores. Como esto se hace fuera de la fase de enrutamiento, será independiente del resto de la configuración de enrutamiento a continuación.

Entonces, en lugar de lo anterior hecho en enrutadores (o cualquier otro sistema), se puede usar uniptables MASQUERADEobjetivo enservidor:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Ahora enservidor, se crean 3 grupos alternativos de reglas para llegar a tres tablas de enrutamiento adicionales: una por enrutador seleccionado, con este enrutador como puerta de enlace predeterminada. Es correcto que solo puede haber una puerta de enlace predeterminada, pero es una por tabla de enrutamiento.

Como las direcciones IP de la PC no están ordenadas en bloques, se utilizan reglas de 3x3 (con bloques de IP correctamente alineados, 3 reglas serían suficientes con CIDR/máscaras de red adecuadas).

Descrito enip rule(8):

En algunas circunstancias queremos enrutar paquetes de manera diferente dependiendo no sólo de las direcciones de destino, sino también de otros campos del paquete: dirección de origen, protocolo IP, puertos del protocolo de transporte o incluso carga útil del paquete. Esta tarea se denomina "enrutamiento de políticas".

[...]

Cada regla de enrutamiento de políticas consta de un selector y un predicado de acción.

En este caso, el selector seleccionará las direcciones de origen de la PC y la acción será buscar las tablas de enrutamiento adicionales, anulando así la búsqueda habitual de las direcciones de enrutamiento adicionales.principaltabla para elegir una puerta de enlace dedicada.

Reglas de enrutamiento (que podrían simplificarse hasta solo 3 reglas si las direcciones IP de la PC estuvieran alineadas en bloques adecuados):

ip rule add from 192.168.1.11 lookup 10
ip rule add from 192.168.1.12 lookup 10
ip rule add from 192.168.1.13 lookup 10

ip rule add from 192.168.1.21 lookup 20
ip rule add from 192.168.1.22 lookup 20
ip rule add from 192.168.1.23 lookup 20

ip rule add from 192.168.1.31 lookup 30
ip rule add from 192.168.1.32 lookup 30
ip rule add from 192.168.1.33 lookup 30

Descrito enip route(8):

Tablas de ruta: Linux-2.x puede empaquetar rutas en varias tablas de enrutamiento identificadas por un número en el rango de 1 a 2^32-1 o por el nombre del archivo /etc/iproute2/rt_tables De forma predeterminada, todas las rutas normales se insertan en la tabla principal. tabla (ID 254) y el kernel solo usa esta tabla al calcular rutas. [...]

Complete tablas de enrutamiento adicionales con valores arbitrarios 10, 20 y 30. Cada tabla de enrutamiento manejará una vista parcial del enrutamiento adecuada al problema a resolver. Aquí se trata de elegir una puerta de enlace diferente.

ip route add default via 192.168.0.1 dev eth1 table 10
ip route add default via 192.168.0.2 dev eth1 table 20
ip route add default via 192.168.0.3 dev eth1 table 30

Si las PC necesitan acceder a otros sistemas en 192.168.0.0/24, se deben agregar estas rutas LAN (para evitar una horquilla parcial a través de los enrutadores, lo cual nunca es una buena idea):

ip route add 192.168.0.0/24 dev eth1 table 10
ip route add 192.168.0.0/24 dev eth1 table 20
ip route add 192.168.0.0/24 dev eth1 table 30

Se comprobará el resultado.servidorcon ip route get:

root@server:~# ip route get from 192.168.1.11 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.11 via 192.168.0.1 dev eth1 table 10 
    cache iif eth0 
root@server:~# ip route get from 192.168.1.21 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.21 via 192.168.0.2 dev eth1 table 20 
    cache iif eth0 
root@server:~# ip route get from 192.168.1.31 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.31 via 192.168.0.3 dev eth1 table 30 
    cache iif eth0 

Otros sistemas en 192.168.1.0/24 LAN siguen lasprincipaltabla de enrutamiento sin enrutamiento basado en políticas. Por ejemplo siservidorno tiene ruta predeterminada enprincipaltabla pero solo sus dos rutas LAN, entonces nada más se enrutará más allá de 192.168.0.0/24 LAN:

root@server:~# ip route get from 192.168.1.41 iif eth0 to 8.8.8.8
RTNETLINK answers: Network is unreachable

Notas

Los 3 enrutadores podrían ser, por ejemplo, puertas de enlace de Internet que realizan NAT y acceden a Internet en una configuración económica utilizando cada uno una dirección IP pública diferente (posiblemente usando un ISP diferente), lo que hace que los 3 grupos de PC que se ven en Internet tengan 3 direcciones IP públicas diferentes.

La configuración anterior deberá integrarse con la herramienta de configuración de red enservidor. Existen muchas herramientas de este tipo según la distribución, comosi arriba abajo,Gerente de Redes,systemd-red,plan de redy probablemente muchos otros, cada uno con su método de configuración específico. También es posible utilizar un script con los comandos indicados anteriormente.

información relacionada