Conexión de una máquina Linux al enrutador/ISP secundario: ¿cómo configurar el enrutamiento correctamente?

Conexión de una máquina Linux al enrutador/ISP secundario: ¿cómo configurar el enrutamiento correctamente?

Abstracto:

Tengo problemas (supongo que de enrutamiento) al agregar un ISP secundario a mi configuración de red existente: el tráfico entrante Router1no recibe respuesta, pero el tráfico local y el entrante Router0funcionan bien.

¿Cómo puedo mantener funcionando bien las piezas que actualmente funcionan y, al mismo tiempo, hacer que el tráfico entrante Router1funcione?

Elaboración:

He esbozado un diagrama a continuación con lo esencial de la situación (en la práctica hay más dispositivos en cada LAN, pero no importan).

Esta es la situación:

  • Tengo dos redes internas: LAN0is 192.168.x.0/24y LAN1is 192.168.y.0/24. Ambos funcionan bien para el tráfico interno (por ejemplohttpusandorizo).
  • LAN0siempre ha estado conectado a través Router0y ISP0al Internet.
  • LAN1Siempre lo tuve Router1, pero ahora está conectado a través ISP1de Internet.
  • Las máquinas que solo están encendidas LAN0y tienen una ruta predeterminada Router0funcionan bien para el tráfico entrante y saliente.
  • Las máquinas que solo están encendidas LAN1y tienen una ruta predeterminada Router1funcionan bien para el tráfico entrante y saliente.
  • El tráfico interno continúa LAN0y LAN1siempre ha funcionado bien.
  • El tráfico entrante Router1llega WindowsBcorrectamente: puedo conectarme a través de RDP desde WindowsC.
  • El tráfico entrante a través Router1de LinuxBllega (segúntcpdump), pero no respondió como muestra una curl http://e.f.g.hfachada LinuxCcon untcpdump activado LinuxBmuestra:

Muestra sólo paquetes que, según elformato de salida tcpdump- tener unSINCconjunto de banderas:

LinuxB:/tmp/LinuxB.eth1.80 # tcpdump -i eth1 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:35:19.489779 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047182 ecr 0,sackOK,eol], length 0
13:35:19.788841 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047478 ecr 0,sackOK,eol], length 0
13:35:19.888835 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047578 ecr 0,sackOK,eol], length 0
13:35:19.989412 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047678 ecr 0,sackOK,eol], length 0
13:35:20.089685 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047778 ecr 0,sackOK,eol], length 0
13:35:20.190836 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047877 ecr 0,sackOK,eol], length 0
13:35:20.392123 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287048072 ecr 0,sackOK,eol], length 0
13:35:20.693692 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:21.197162 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:22.204134 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:24.115961 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:27.852374 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:31.967049 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0

Esta es la LinuxBtabla de rutas:

LinuxB:/tmp/LinuxB.eth1.80 # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.x.1     0.0.0.0         UG    0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
link-local      *               255.255.0.0     U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth1

Dado que la conexión a través de RDP desde WindowsCa WindowsBfunciona bien, supongo que se trata de un problema de enrutamiento. Esta es la WindowsBtabla de rutas:

C:\temp>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0c 29 35 77 e1 ...... AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
0x3 ...00 0c 29 35 77 eb ...... VMware Accelerated AMD PCNet Adapter - Packet Scheduler Miniport
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.x.1     192.168.x.4      10
          0.0.0.0          0.0.0.0      192.168.y.1     192.168.y.4       5
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.x.0    255.255.255.0      192.168.x.4     192.168.x.4      10
      192.168.x.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.x.255  255.255.255.255      192.168.x.4     192.168.x.4      10
      192.168.y.0    255.255.255.0      192.168.y.4     192.168.y.4      10
      192.168.y.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.y.255  255.255.255.255      192.168.y.4     192.168.y.4      10
        224.0.0.0        240.0.0.0      192.168.x.4     192.168.x.4      10
        224.0.0.0        240.0.0.0      192.168.y.4     192.168.y.4      10
  255.255.255.255  255.255.255.255      192.168.x.4     192.168.x.4       1
  255.255.255.255  255.255.255.255      192.168.y.4     192.168.y.4       1
Default Gateway:       192.168.y.1
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0      192.168.y.1       5
          0.0.0.0          0.0.0.0      192.168.x.1      10

Entonces, ¿cómo puedo hacer que la ruta LinuxBsea así?

  • mantenga la ruta predeterminada activada LinuxBpara 192.168.x.1que el tráfico saliente siga usando Router0/ISP0
  • seguir respondiendo solicitudes entrantes provenientes de LAN0ahoraLAN0
  • seguir respondiendo solicitudes entrantes provenientes de LAN1ahoraLAN1
  • siga respondiendo solicitudes entrantes a través de Router0( a.b.c.d/ 192.168.x.1) vía192.168.x.1
  • comience a responder solicitudes entrantes a través de Router1( e.f.g.h/ 192.168.y.1) vía192.168.y.1
  • ventaja: tener Router1conmutación por error o equilibrio de carga conRouter0

Posdata:

ElImagen PNG a continuaciónse genera enUMLenvía mensajes de texto a través de Internet gratisPlantaUMLmotor. Si desea ver el texto UML original, pegue elEnlace de imagen PNGdentro de estoFormulario PlantUML, entonces presione Submit.

ingrese la descripción de la imagen aquí

Respuesta1

Tenía un script de shell para hacer algo así hace mucho tiempo pero, lo siento, pude encontrarlo. Así que sólo puedo darles algunas indicaciones sobre las soluciones que implementé en aquel entonces. Estoy escribiendo principalmente de memoria, por lo que faltan algunos ejemplos:

  1. Tenía una tabla de enrutamiento por enlace ascendente (ruta IP... tabla 101, ruta IP... tabla 102). Eso va a /etc/iproute2/rt_tables.

    101 isp1 102 isp2

    También necesitas configurar esas tablas:

    ruta ip agregar valor predeterminado a través de $Gateway1 dev $Interface1 tabla isp1 ruta ip agregar valor predeterminado a través de $Gateway2 dev $Interface2 tabla isp2

    #No olvides la tabla predeterminada:

    ruta ip agregar valor predeterminado a través de $DefaultGateway dev $DefaultInterface

  2. Habilitar el seguimiento de conexiones de iptables (modprobe nf_conntrack)

  3. Establezca una regla de iptables para NUEVAS conexiones entrantes para -j MARCAR los paquetes de alguna manera (es decir: 0x201, 0x202)
  4. Establezca una regla de IP que garantice que el tráfico que sale a través de una interfaz utilice la tabla de enrutamiento correcta.

    regla ip agregada desde la tabla $Ip1 isp1 regla ip agregada desde la tabla $Ip2 isp2

  5. Establezca una regla IP (regla IP agregar...) que indique que "los paquetes marcados 0x201 buscarán la tabla de enrutamiento 201", una regla para cada enlace ascendente.

Con todo en su lugar, debería poder recibir e iniciar conexiones con cualquier enlace ascendente wan e incluso equilibrar las conexiones salientes.

Esos serían los básicos. Iptables + "ruta ip" + "regla ip" y listo.

información relacionada