Como um host roteia pacotes IP se obtiver dois endereços IP?

1

Para esclarecer minha dúvida ...

Eu estou querendo saber como o kernel do Linux roteia os pacotes em um host multi-home ?

Com 'multi-home', quero dizer que o host tem vários NICs para enviar pacotes, por exemplo, meu Debian no Virtualbox tem dois NICs.

eth0 fornece o suporte NAT. Eu não sei como o Virtualbox consegue fazer isso. Quer dizer, não há nenhuma NIC virtual no meu host do Windows cujo IP é 10.0.2.x.

eth1 fornece o suporte somente para host. Eu uso essa pequena rede para aprender o protocolo TCP / IP e fazer algumas pequenas experiências. Eu configuro manualmente para o endereço IP 192.168.56.2, gateway 192.168.56.1, o último endereço IP é o endereço IP VirtualBox NIC.

sistema operacional host Eu uso o ADSL para me conectar à Internet e obter um endereço IP aleatório, por exemplo, 118.249.xxx.113.

Então a pergunta é lançada, como os pacotes IP da rota do kernel Linux? Quer dizer, se eu executei os seguintes comandos, não consigo me conectar à Internet.

ifup eth0
ifup eth1
ping www.google.com

esse ping não retornaria resposta.

Então é assim que após a configuração da eth1, o kernel usaria eth1 como a NIC default , que está na rede somente host, para enviar pacotes IP? Como resultado, no Debian, não consigo me conectar à Internet externa?

Outra questão simples é, como eth1 agora é a NIC padrão, o kernel do Linux tentará usar a NIC eth1 para enviar pacotes se a eth0 não encontrar uma entrada de rota disponível?
Se for, então como configurá-lo?

Aqui está minha configuração de rede do Debian Linux no Virtualbox.

eth0  Link encap:Ethernet  HWaddr 08:00:27:ec:d9:bb  
              inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:feec:d9bb/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1690 errors:2 dropped:0 overruns:0 frame:0
              TX packets:1129 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2276172 (2.1 MiB)  TX bytes:62647 (61.1 KiB)
              Interrupt:11 Base address:0xd020 


eth1      Link encap:Ethernet  HWaddr 08:00:27:ae:e1:69  
          inet addr:192.168.56.2  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feae:e169/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:48 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5985 (5.8 KiB)  TX bytes:1334 (1.3 KiB)
          Interrupt:10 Base address:0xd240 

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:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

e a tabela de rotas segue:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         192.168.56.1    0.0.0.0         UG        0 0          0 eth1
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0

obrigado.
jcyang.     
por Jichao 25.10.2009 / 02:53

4 respostas

0

Não sei se entendi corretamente o problema, mas faço um 'echo 1 > / proc / sys / net / ipv4 / ip_forward 'para ativar o roteamento. Torne-o permanente editando o /etc/sysctl.conf. Quando isso é definido como 1 (habilitado), o Linux encaminhará os pacotes recebidos de uma interface Ethernet para outra - ele atuará como um roteador. Se você tem uma máquina dual-home - duas maneiras de sair na internet - você não pode usar os dois uplinks com apenas dois gateways padrão instalados ... O que você pode fazer é selecionar o gateway padrão primário, digamos 192.168.56.1 e selecione algumas redes que você deseja obter pelo link secundário:
ip route add default via 192.168.56.1
ip route add 221.x.x.x/24 via 10.10.10.2 e ip route add 99.99.99.99/32 via 10.10.10.2

    
por 25.10.2009 / 02:31
1

Sua pergunta é meio confusa, mas deixe-me tentar.

Primeiro, se você quiser ter um simples roteador NAT / mascarador, existem alguns tutoriais simples e adaptáveis sobre como fazer isso com o netfilter ( iptables ). Pode ser enganadoramente simples ativar esse comportamento. No google "linux nat" ou "linux masquerade" ajudará .

edite : jogando os comandos básicos para uma boa medida. Certifique-se de saber qual interface é qual!

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Caso contrário, você deve apenas poder usar o comando route para excluir os gateways 'extras' e forçar todo o tráfego para fora através da eth1 se esse for seu objetivo (não precisa de eth0 neste cenário se eu entendi direito).

route del gw 10.0.2.2 eth0 

Deve fazer o truque no último cenário. (Se eu entendi corretamente, o que eu não posso.)

Espero que ajude.

    
por 25.10.2009 / 02:33
1

Você tem duas rotas padrão. Eu usei apenas um de cada vez, mas imagino que dois não seriam um problema - até onde eu sei, a tabela de roteamento é classificada por especificidade (número de bits na máscara de sub-rede de destino, ascendente) e talvez MTU (embora eu não pense assim no Linux). A primeira rota padrão correspondente na lista classificada seria então usada.

Tente remover uma das rotas padrão (route del ... como outras pessoas mencionaram, ou ip route del ...).

Caso contrário ... por que seu ping está recebendo "nenhuma resposta"? Isso parece um problema de firewall. Pode ser que o Linux esteja automaticamente fazendo um balanceamento de carga / round-robin com as duas rotas padrão, mas eu nunca ouvi falar de Linux fazendo isso, e isso poderia criar problemas para alguns protocolos, então duvido.

Se você está tendo problemas de roteamento, o ping provavelmente deve dizer "não há rota para hospedar" ou algo assim. Nenhuma resposta é diferente. Certifique-se de ping está descobrindo o IP do nome do host OK. Se não, é um problema de DNS. Se assim for, olhe para o seu firewall - iptables -L -n -v lhe dará quaisquer regras, e quantas vezes as regras foram atingidas. Se uma regra aumenta com a mesma frequência dos seus pings, esse é provavelmente o problema. Caso contrário, examine os pacotes que saem e entram na máquina com o wireshark.

    
por 25.10.2009 / 09:38
0

Então, deixe-me explicar algumas noções básicas sobre o seu exemplo. Você tem 2 Nics (virtual ou não é importante). Ambos estão em redes separadas. 10.0.2.0 e 192.168.56.0

As duas primeiras entradas em sua tabela de roteamento mostram que elas não têm nenhum gateway especial (0.0.0.0) e a última coluna mostra em qual NIC elas estão conectadas.

Depois, há um erro na tabela de roteamento. Você tem duas entradas para o gateway padrão. Você só pode ter um gateway padrão real. Normalmente, os pacotes IP são enviados para o primeiro gw padrão encontrado na tabela de roteamento. (Eu acho que no seu caso é o errado)

Eu não sei exatamente como funciona o NAT (eu já usei Networking em ponte). Então você tem duas opções. Defina o gateway padrão para o Endereço IP do endereço IP de suas máquinas REAL. Por exemplo. se a sua máquina fora da sua caixa virtual tiver o IP 10.0.2.254, configure o seu gateway padrão para 10.0.2.254. (No ambiente NAT você tem que configurar sua máquina fora de sua caixa virtual para suportar isso, o ipfilter deve ser configurado corretamente e o roteamento de pacotes entre interfaces deve ser ativado echo 1 > /proc/sys/net/ipv4/ip_forward ).

Se você usa uma configuração em ponte, sua máquina tem conexão direta com seu roteador, que está conectado à Internet. Do que você só tem que configurar um endereço IP é esta rede e configurar o seu gateway padrão para o ip do seu roteador. por exemplo. VBOX 10.0.2.2 ------- MÁQUINA FORA DA VBOX 10.0.2.254 ------ Roteador conectado à Internet 10.0.2.1

O seu gateway será 10.0.2.1

    
por 25.10.2009 / 02:32