Aqui está o meu problema de roteamento um tanto intrigante.
Aqui está a descrição, em palavras. Eu tenho um laptop windows (azul) em que eu corro VMWare Workstation (laranja). O VMWare Workstation possui uma única VM Ubuntu 14.04 (verde). Tem um único NIC que é uma interface do VMWare NAT. O VMWare possui uma interface na rede, conforme vista do windows (saída ipconfig). O VMWare VM (verde) tem um IP de 192.168.115.10/24. A interface do Windows (gateway) é 192.168.115.1.
Dentro da VM Verde, eu tenho uma VM vermelha (KVM). Tem um endereço IP de 10.0.0.2.
Aqui estão as coisas que funcionam.
No Windows:
Do VM Verde (192.168.115.10) o seguinte trabalho.
Do Red VM (10.0.0.2) o seguinte trabalho.
O que não funciona é isto:
Na VM verde (192.168.115.10), habilitei o encaminhamento de IP.
cat /proc/sys/net/ipv4/ip_forward
1
Na máquina Windows, eu tenho uma entrada na tabela de roteamento que lê:
Active Routes: Network Destination Netmask Gateway
Interface Metric
0.0.0.0 0.0.0.0 10.40.2.1 10.40.2.192 10
0.0.0.0 0.0.0.0 10.40.2.1 10.40.2.186 25
10.0.0.0 255.255.255.0 192.168.115.10 192.168.115.1 21 [...]
Eu também fiz isso.
No Green VM e Red VM, execute simultaneamente o tcpdump.
tcpdump -n -vvv -i eth0 icmp
Enquanto isso, o Windows executa:
ping 10.0.0.2
Na VM verde (192.168.115.10), vejo
21:48:45.985686 IP (tos 0x0, ttl 128, id 9541, offset 0, flags [none], proto ICMP (1), length 60)
192.168.115.1 > 10.0.0.2: ICMP echo request, id 1, seq 145, length 40 21:48:50.987085 IP (tos 0x0, ttl 128, id 9543, offset 0, flags [none], proto ICMP (1), length 60)
192.168.115.1 > 10.0.0.2: ICMP echo request, id 1, seq 146, length 40
Na Red VM (10.0.0.2) não vejo nada.
Por outro lado, se eu executar o ping em 192.168.115.10 (ping 10.0.0.2), vejo o seguinte no tcpdump.
Na VM verde (192.168.115.10), vejo o seguinte na interface br100, aquela com um IP de 10.0.0.1 e o gateway para a VM aninhada.
tcpdump -n icmp -vvvv -i br100
tcpdump: listening on br100, link-type EN10MB (Ethernet), capture size 65535 bytes
22:16:35.310287 IP (tos 0x0, ttl 64, id 43787, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.1 > 10.0.0.2: ICMP echo request, id 30901, seq 1, length 64
22:16:35.310678 IP (tos 0x0, ttl 64, id 26368, offset 0, flags [none], proto ICMP (1), length 84)
10.0.0.2 > 10.0.0.1: ICMP echo reply, id 30901, seq 1, length 64
Na VM vermelha (10.0.0.2) eu vejo
tcpdump -vvv -n icmp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
02:16:14.710411 IP (tos 0x0, ttl 64, id 42447, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.1 > 10.0.0.2: ICMP echo request, id 30888, seq 1, length 64
02:16:14.710690 IP (tos 0x0, ttl 64, id 21880, offset 0, flags [none], proto ICMP (1), length 84)
10.0.0.2 > 10.0.0.1: ICMP echo reply, id 30888, seq 1, length 64
Portanto, por algum motivo, ao fazer ping do Windows, os pacotes chegam a 192.168.115.10 (VM verde) e não chegam a 10.0.0.2 (Red VM).
Não sei o que procurar no iptables, ou talvez em outro lugar.