Aliases de IP local roteados por meio de local em vez de eth0

1

Estou me perguntando uma coisa. Estou jogando com uma instância do EC2 e gostaria de usar alguma sub-rede local no intervalo 192.168.1.0/29. Então, eu configurei aliases no eth0 da seguinte forma:

[root@server jvehent]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 12:25:8B:0a:B1:EB  
          inet addr:10.28.118.95  Bcast:10.28.118.255  Mask:255.255.254.0
[...]
eth0:1    Link encap:Ethernet  HWaddr 12:25:8B:0a:B1:EB    
          inet addr:192.168.1.1  Bcast:192.168.1.7  Mask:255.255.255.248
[...]
eth0:2    Link encap:Ethernet  HWaddr 12:25:8B:0a:B1:EB    
          inet addr:192.168.1.2  Bcast:192.168.1.7  Mask:255.255.255.248
[...]
eth0:3    Link encap:Ethernet  HWaddr 12:25:8B:0a:B1:EB    
          inet addr:192.168.1.3  Bcast:192.168.1.7  Mask:255.255.255.248
[...]
eth0:4    Link encap:Ethernet  HWaddr 12:25:8B:0a:B1:EB  
          inet addr:192.168.1.4  Bcast:192.168.1.7  Mask:255.255.255.248
[...]
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

Muito bem, então eu recebo a seguinte tabela de roteamento

[root@server jvehent]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0    0.0.0.0         255.255.255.248 U     0      0        0 eth0
10.28.118.0     0.0.0.0         255.255.254.0   U     0      0        0 eth0
0.0.0.0         10.28.118.1     0.0.0.0         UG    0      0        0 eth0

Agora, se eu quiser que dois serviços conversem entre si usando os aliases locais, posso configurar o netcat da seguinte forma:

ouvindo o netcat:

nc -l 192.168.1.4 1664

conectando o netcat:

nc -s 192.168.1.1 192.168.1.4 1664

E, pelo que vejo, esse tráfego passa pela interface do host local. Estou verificando com tcpdump -i lo e vejo pacotes passando. Nada na eth0.

Meu conhecimento básico do kernel me diz que, como o kernel possui todo o ip, ele faz todas as operações internamente e copia os pacotes de um soquete para outro sem passá-lo para o NIC. correto?

Existe uma maneira de forçar o kernel a enviar esses pacotes para a rede?

    
por Julien Vehent 26.05.2011 / 02:59

1 resposta

1

Sim, não. Sim, o kernel faz um curto-circuito passando-o para a interface de loopback. Não, você não poderia enviá-los para a rede porque a rede não os enviaria de volta. A NIC pode enviar ou receber um pacote, não pode enviar o pacote e recebê-lo de volta ao mesmo tempo. (Talvez um switch possa ser programado para simular isso, mas você está em uma instância do EC2 e não há switch em primeiro lugar; não há NIC)

    
por 26.05.2011 / 03:09