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


8

Resumo:

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 peças que atualmente funcionam bem funcionando, enquanto faz o tráfego de entrada através do Router1trabalho?

Elaboração:

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

Esta é a situação:

  • Eu tenho duas redes internas: LAN0é 192.168.x.0/24e LAN1é 192.168.y.0/24. Ambos funcionam bem para o tráfego interno (por exemplo, http usando cURL ).
  • LAN0sempre foi conectado através Router0e ISP0ao Internet.
  • LAN1sempre teve Router1, mas agora está conectado ISP1ao Internet.
  • As máquinas apenas ativam LAN0e têm uma rota padrão através do Router0trabalho bem para o tráfego de saída e entrada.
  • As máquinas apenas ativam LAN1e têm uma rota padrão através do Router1trabalho bem para o tráfego de saída e entrada.
  • Tráfego interno ativado LAN0e LAN1sempre funcionou bem.
  • O tráfego de entrada Router1para o WindowsBchega corretamente: posso conectar-me a ele pelo RDP a partir de WindowsC.
  • O tráfego de entrada através Router1de LinuxBchega (de acordo com tcpdump ), mas não é respondido de volta como um curl http://e.f.g.hfron LinuxCmostra com um tcpdump nos LinuxB shows:

Ele mostra apenas pacotes que - de acordo com o formato de saída tcpdump - têm um sinalizador SYN definido:

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 pelo RDP da WindowsCpara WindowsBfunciona bem, retomei que esse é 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 obter o roteamento LinuxBpara ficar assim:

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

Postscript:

A imagem PNG abaixo é gerada no texto UML através do mecanismo PlantUML online gratuito . Se você quiser ver o texto UML original, cole o link da imagem PNG neste formulário PlantUML e pressione Submit.

insira a descrição da imagem aqui


Acabei de encontrar uma resposta interessante em unix.stackexchange.com/a/23345/69111, que estou investigando para ver se ela se aplica ao meu caso e como implementá-lo usando yast.
Jeroen Wiert Pluimers

1
Yastparece fazer roteamento complexo e routeparece ter sido preterido em favor de ip. Veja opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html e suse.com/documentation/sles11/book_sle_admin/data/...
Jeroen Wiert Pluimers

1
Sua solução vinculada no unix.stackexchange está indo na direção certa e resolveria o problema do linux - o nó linux possui duas tabelas de roteamento separadas e usa a tabela apropriada, dependendo da interface em que a conexão foi iniciada. Não conheço nenhuma dessas soluções para o Windows. A menos que haja uma necessidade real de duas sub-redes, eu me livraria de uma e usaria um roteador para os dois ISPs. Você pode comprar roteadores que possam lidar com duas WANs corretamente ou usar outro sistema Linux para fazê-lo, o que simplificaria o roteamento nos sistemas por trás dele.
David Mackintosh

@DavidMackintosh no futuro eu irei. Isso é temporário: a fibra é realmente DSL e será movida para um endereço de fibra diferente. A máquina é DNS e MX, portanto, desejo que ela seja acessível a partir de dois ISPs para ter continuidade, pois não tenho certeza se o DSL será encerrado antes ou depois que a fibra estiver ativa.
Jeroen Wiert Pluimers

Respostas:


1

Eu tinha um script de shell para fazer algo assim há muito tempo, mas, desculpe, consegui encontrá-lo. Então, só posso lhe dar as dicas para as soluções que implementei na época. Como estou escrevendo principalmente de memória, alguns exemplos estão faltando:

  1. Eu tinha uma tabela de roteamento por uplink (rota ip ... tabela 101, rota ip ... tabela 102). Isso entra em / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Você precisa configurar essas tabelas também:

    rota ip adicionar padrão via $ Gateway1 dev $ interface1 tabela isp1 rota ip adicionar padrão via $ Gateway2 dev $ interface2 tabela isp2

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

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

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

  3. Defina uma regra do iptables para NOVAS conexões de entrada para -j MARQUE 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

    regra de ip adicionar de $ ip1 tabela isp1 regra de ip adicionar de $ ip2 tabela isp2

  5. Defina uma regra ip (ip rule add ...) informando que "os pacotes marcados com 0x201 devem procurar a tabela de roteamento 201", uma regra para cada ligação ascendente.

Com tudo instalado, você poderá receber e iniciar conexões com qualquer ligação à rede e até equilibrar as conexões de saída.

Esses seriam os princípios básicos. Iptables + "rota ip" + "regra ip" e você está pronto para ir.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.