Conectando a máquina Linux ao roteador/ISP secundário: como configurar o roteamento corretamente?

Conectando a máquina Linux ao roteador/ISP secundário: como configurar o roteamento corretamente?

Abstrato:

Tenho (presumo roteamento) problemas ao adicionar um ISP secundário à minha configuração de rede existente: o tráfego de entrada Router1não é respondido, mas o tráfego local e de entrada Router0estão funcionando bem.

Como posso manter as partes que atualmente funcionam bem funcionando, enquanto faço o tráfego de entrada Router1funcionar?

Elaboração:

Esbocei um diagrama abaixo com o essencial da situação (na prática, há mais dispositivos em cada LAN, mas isso não importa).

Esta é a situação:

  • Tenho duas redes internas: LAN0is 192.168.x.0/24e LAN1is 192.168.y.0/24. Ambos funcionam bem para tráfego interno (por exemplohttpusandoondulação).
  • LAN0sempre esteve conectado através Router0e ISP0com o Internet.
  • LAN1sempre teve Router1, mas agora está conectado ISP1ao Internet.
  • Máquinas apenas ligadas LAN0e com uma rota padrão Router0funcionam bem para tráfego de entrada e saída.
  • Máquinas apenas ligadas LAN1e com uma rota padrão Router1funcionam bem para tráfego de entrada e saída.
  • O tráfego interno está ativo LAN0e LAN1sempre funcionou bem.
  • O tráfego de entrada Router1chega WindowsBcorretamente: posso me conectar a ele por RDP de WindowsC.
  • Tráfego de entrada Router1para LinuxBchegadas (de acordo comtcpdump), mas não respondeu como uma curl http://e.f.g.hfrente LinuxCmostra com umtcpdump ativado LinuxBmostra:

Mostra apenas pacotes que - de acordo com oformato de saída tcpdump- tenha umSINconjunto de bandeiras:

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 é a LinuxBtabela de rotas:

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

Como a conexão via RDP de WindowsCpara WindowsBfunciona bem, repito que este é realmente um problema de roteamento. Esta é a WindowsBtabela de rotas:

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

Então, como posso fazer com que o roteamento LinuxBseja assim:

  • mantenha a rota padrão ativada LinuxBpara 192.168.x.1que o tráfego de saída continue usando Router0/ISP0
  • continue respondendo às solicitações recebidas LAN0deLAN0
  • continue respondendo às solicitações recebidas LAN1deLAN1
  • continue respondendo às solicitações recebidas através de Router0( a.b.c.d/ 192.168.x.1) via192.168.x.1
  • comece a responder solicitações recebidas através de Router1( e.f.g.h/ 192.168.y.1) via192.168.y.1
  • bônus: tenha Router1failover ou balanceamento de carga comRouter0

Pós-escrito:

OImagem PNG abaixoé gerado emUMLtexto através do online grátisPlanta UMLmotor. Se você quiser ver o texto UML original, cole oLink da imagem PNGnissoFormulário PlantUML, então aperte Submit.

insira a descrição da imagem aqui

Responder1

Eu tinha um script de shell para fazer algo assim há muito tempo, mas, desculpe, consegui encontrá-lo. Portanto, só posso fornecer dicas sobre as soluções que implementei naquela época. Estou escrevendo principalmente de memória, então faltam alguns exemplos:

  1. Eu tinha uma tabela de roteamento por uplink (ip route... table 101, ip route... table 102). Isso vai para /etc/iproute2/rt_tables.

    101 isp1 102 isp2

    Você também precisa configurar essas tabelas:

    rota ip adicionar padrão via $Gateway1 dev $Interface1 tabela isp1 ip rota adicionar padrão via $Gateway2 dev $Interface2 tabela isp2

    #Não se esqueça da tabela padrão:

    rota ip adicionar padrão via $DefaultGateway dev $DefaultInterface

  2. Habilitar rastreamento de conexão iptables (modprobe nf_conntrack)

  3. Defina uma regra iptables para NOVAS conexões de entrada para -j MARCAR os pacotes de alguma forma (ou seja: 0x201, 0x202)
  4. Defina uma regra de IP que garanta que o tráfego que sai através de uma interface use a tabela de roteamento correta

    adição de regra de ip da tabela $Ip1 isp1 adição de regra de ip da tabela isp2 de $Ip2

  5. Defina uma regra ip (ip rule add ...) informando que "pacotes marcados como 0x201 devem consultar a tabela de roteamento 201", uma regra para cada uplink.

Com tudo pronto, você poderá receber e iniciar conexões com qualquer uplink wan e até mesmo equilibrar conexões de saída.

Esses seriam o básico. Iptables + "ip route" + "ip rule" e pronto.

informação relacionada