Interfaces Ethernet múltiplas

6

Eu tenho duas placas de rede, configuradas assim:

eth0      Link encap:Ethernet  HWaddr 00:19:d1:31:08:e8  
          inet addr:192.168.5.104  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::219:d1ff:fe31:8e8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4564126 errors:590 dropped:0 overruns:0 frame:329
          TX packets:9707383 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1151788275 (1.0 GiB)  TX bytes:189318786 (180.5 MiB)
          Interrupt:20 Memory:e0300000-e0320000 

eth1      Link encap:Ethernet  HWaddr 00:e0:4c:51:0d:55  
          inet addr:85.255.103.4  Bcast:85.255.103.255  Mask:255.255.255.0
          inet6 addr: fe80::2e0:4cff:fe51:d55/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5466 errors:0 dropped:0 overruns:0 frame:0
          TX packets:499 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:518961 (506.7 KiB)  TX bytes:34236 (33.4 KiB)
          Interrupt:22 Base address:0x1000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:136 errors:0 dropped:0 overruns:0 frame:0
          TX packets:136 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:15556 (15.1 KiB)  TX bytes:15556 (15.1 KiB)

A rota do ip:

$ ip route
192.168.5.0/24 dev eth0  proto kernel  scope link  src 192.168.5.104 
85.255.103.0/24 dev eth1  proto kernel  scope link  src 85.255.103.4 
default via 192.168.5.1 dev eth0 
default via 85.255.103.1 dev eth1

Quando faço ping no endereço IP da eth1, não obtenho resposta.

Com o tcpdump, percebi que todas as solicitações de eco ICMP enviadas para a eth1 são respondidas através da interface eth0.

Como posso conseguir que as duas interfaces funcionem corretamente? Se eu pingar eth1, ele também deve retornar a resposta na eth1.

O eth0 tem uma conexão de internet mais rápida, eu só quero manter a eth1 por perto e passar por isso quando o aplicativo for ligado ao ip específico.

    
por Andrius Bentkus 10.10.2014 / 18:16

3 respostas

6

Remova o gateway definido para eth0 (192.168.5.1). Se você precisar de múltiplas rotas padrão, você precisará usar iproute2 para criar uma política para isso.

    
por 10.10.2014 / 18:20
3

Parece que você precisa remover um segundo gateway padrão:

  • route del default 192.168.5.1

Depois disso, o IP 85.255.103.4 funcionará, mas você terá problemas com a sub-rede 192.168.5.0/24. Para corrigir isso, você precisa rotear todos os pacotes com um IP de origem 192.168.5.10 via 192.168.5.1. Para isso, use o roteamento de políticas:

  • echo '300 eth0tbl' >> /etc/iproute2/rt_tables
  • ip route add default via 192.168.5.1 table eth0tbl
  • ip rule add from 192.168.5.10 table eth0tbl
por 10.10.2014 / 18:26
1

Em situações como esta, é melhor ser explícito.

Existem muitos motivos pelos quais você pode não conseguir fazer ping ou ssh para o IP na eth1, mas para iniciantes você deve configurar o roteamento baseado em política que força o tráfego a usar a mesma interface para TX usada para RX.

Você quer que o tráfego use a eth0 para a conexão mais rápida, então deixaremos isso para a rota padrão.

Em seguida, vamos definir as tabelas, criar as regras e criar as rotas.

  1. Defina duas tabelas em / etc / iproute2 / rt_tables da seguinte forma:

    100 eth0if
    101 eth1if
    
  2. Crie duas regras (o tráfego TX de 192.168.5.104 é forçado a usar a tabela eth0if, etc ...):

    from 192.168.5.104 table eth0if
    from 85.255.103.4 table eth1if
    
  3. Em seguida, crie as rotas para cada interface:

    • Para eth0:

      default via 192.168.5.1 dev eth0 table eth0if
      192.168.5.0/24 via 192.168.5.104 dev eth0 table eth0if
      192.168.5.0/24 via 192.168.5.104 dev eth0 table main
      
    • Para a eth1:

      default via 85.255.103.1 dev eth1 table eth1if
      85.255.103.0/24 via 85.255.103.4 dev eth1 table eth1if
      85.255.103.0/24 via 85.255.103.4 dev eth1 table main
      

Agora, qualquer conexão de soquete feita com eth1 deve responder a partir de eth1 e ser bem-sucedida. No entanto, qualquer conexão remota feita a partir de esta caixa que não é destinada a 85.255.103.0/24 ainda usará a rota padrão (eth0).

REGRA: (Se uma rota não existe, o padrão é usado)

Se você precisar usar a eth1 para conexões de saída onde estiver usando software que não permite definir a interface / IP de origem, será necessário criar rotas para ela.

  • Por exemplo, se você precisar de uma rota de host para um servidor do Google específico, use:

    74.125.224.194/32 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if
    
  • Ou se você quiser fazer o mesmo com a sub-rede, faça o seguinte:

    74.125.224.0/24 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if
    
por 02.11.2014 / 17:31