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?