Como o Linux escolhe qual interface de rede usar?

6

Digamos que eu tenha uma máquina com dois adaptadores de rede em diferentes sub-redes, eth0 (10.0.100.5) e eth1 (10.0.200.5). Supondo que ambas as sub-redes tenham rotas para a internet (apesar de seus próprios NATs) e para o resto da rede local (apesar de seus próprios switches):

  1. Como o Linux escolherá qual interface de rede usar ao fazer uma solicitação para 10.0.150.5 ou 173.194.43.102?
  2. Existe alguma maneira de influenciar isso no nível da rede? Remover as rotas das sub-redes influenciaria isso? Estou em um ambiente da AWS e trabalhando com uma Appliance AMI que não consigo acessar, então algo como isso não funcionará.

Ambiente AWS VPC, outras máquinas que executam o Ubuntu 12.04, não faço ideia do que a máquina que estou tentando influenciar está em execução (já que não consigo fazer logon).

Esclarecimentos:

  • As duas sub-redes estão configuradas como /24 s
por Dan 16.11.2014 / 00:11

2 respostas

5

A sub-rede é definida por rede e máscara , por exemplo

rede: 10.0.100.5 mascarar: / 8

Isso significa que sua sub-rede é: 10. 0.100.5 / 8

Basicamente, qualquer IP válido da família 10.xxx.xxx.xxx pertence a essa sub-rede. Apenas uma interface pode ser usada para acessar hosts nessa sub-rede. Então é eth0 ou eth1 no seu caso. Outra interface pode ter IP na mesma sub-rede, mas não funcionará corretamente.

Aqui está o que acontece se você tiver uma situação como a descrita com eth0 e eth1 conectados à mesma rede com IPs na mesma sub-rede.

  • eth0 10.0.100.5/8
  • eth1 10.0.200.5/8

Agora, apenas uma dessas interfaces tem rota (digamos que é eth0 ), que diz to access subnet 10.0.100.0/8 use eth0 . Assim, o pacote que sai desta interface terá o endereço de origem 10.0.100.5

! AVISO - 10.0.100.5/8 e 10.0.200.5/8 são da mesma sub-rede (porque máscaras de máscara duram 3 occets, também podemos escrevê-lo como 10.0.0.0/8)

Portanto, considere agora que temos host nessa sub-rede que tenta se comunicar com 10.0.200.5 O pacote entra no sistema através de eth1 , mas não pode retornar de eth1 , pois eth0 é apenas um com rota para a rede 10.0.0.0/8 e as respostas da eth0 têm IPs diferentes; então a única conexão inicial para 10.0.200.5 não será capaz de entender a resposta vinda de alguma outra fonte.

EDITAR

Para determinar qual interface será usada, você precisa examinar sua tabela de roteamento. Como a pergunta não contém tabela de roteamento, tentarei explicar com a seguinte tabela de roteamento

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

saída de tabela de roteamento alternativa

$ ip route show
default via 192.168.0.1 dev wlan0  proto static 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.5 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.14 

Portanto, temos duas interfaces no exemplo acima.

  • eth0 com IP 10.0.0.5 na sub-rede 10.0.0.5/255.255.255.0 ou na notação CIDR 10.0.0.5/24
  • wlan0 com o IP 192.168.0.14 na sub-rede 192.168.0.14/255.255.255.0 ou na notação CIDR 192.168.0.0/24

Agora, o que a tabela de roteamento nos diz; interpretação linha por linha, de baixo para cima:

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14

Para acessar hosts na sub-rede 192.168.0.0/24 use interface wlan0 e src IP 192.168.0.14

10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5

Para acessar hosts na sub-rede 10.0.0.0/24 use interface eth0 e src IP 10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

Para acessar qualquer outro host não coberto pelas regras acima, use default route, que pode ser acessado usando a interface wlan0 e o gateway para outras redes é 192.168.0.1

    
por 16.11.2014 / 00:20
0

Olhe para a sua tabela de roteamento - o comando é rota. Com o novo comando ip, use ip route show. Você pode consultar a ajuda de qualquer uma dessas opções sobre como adicionar / excluir entradas de roteamento na tabela.

    
por 16.11.2014 / 08:33