Eu tenho uma VM (VM1) com uma interface (eth0). A VM1 tem uma ponte linux (br1) e a interface eth0 está conectada a ela. Através do eth0, pacotes com dois intervalos de ip diferentes chegam (192.168.122.0/24 e 10.10.10.0/24). Na verdade, br1 tem dois ips:
- 192.168.122.2/24
- 10.10.10.1/24
O primeiro ip pertence à rede mgmt que permite acessar a internet através do gateway 192.168.122.1. O segundo ip pertence a uma rede virtual (10.10.10.0/24) onde a VM1 é o gateway. Se eu quiser acessar a internet da VM1, a rota é
default via 192.168.122.1 dev br1
e funciona corretamente.
Como esta VM é o gateway, criei uma regra "MASQUERADE" no iptables para que os pacotes com o IP de origem 10.10.10.0/24 obtenham o IP de origem da VM1 para acessar a Internet (192.168.122.2):
-A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
No entanto, algo não funciona bem. Quando tento executar o ping 8.8.8.8 de outra VM com IP:
- 10.10.10.16
Isso é o que eu vejo ao fazer o tcpdump em br1:
08:56:19.498107 IP 10.10.10.16 > 8.8.8.8: ICMP echo request, id 58113, seq 0, length 64
08:56:19.498265 IP 192.168.122.2 > 8.8.8.8: ICMP echo request, id 58113, seq 0, length 64
08:56:19.509490 IP 8.8.8.8 > 10.10.10.16: ICMP echo reply, id 58113, seq 0, length 64
E isso é o que eu vejo ao fazer o tcpdump em eth0:
08:57:19.331692 IP 10.10.10.16 > 8.8.8.8: ICMP echo request, id 58369, seq 0, length 64
08:57:19.331804 IP 192.168.122.2 > 8.8.8.8: ICMP echo request, id 58369, seq 0, length 64
08:57:19.343085 IP 8.8.8.8 > 192.168.122.2: ICMP echo reply, id 58369, seq 0, length 64
No eth0 eu posso ver o 'echo reply' indo para 192.168.122.2 e então no br1, eu posso ver que, devido ao MASQUERADE, o ip do destino mudou para 10.10.10.16. No entanto, eu também deveria ver esse pacote (fonte: 8.8.8.8; destino 10.10.10.16) em eth0, já que é a interface para alcançar 10.10.10.16, mas não está lá. Parece-me como se br1 não está encaminhando o pacote para a interface eth0, por que isso está acontecendo?
09:01:54.502894 IP 10.10.10.1 > 10.10.10.16: ICMP echo request, id 26878, seq 1, length 64
09:01:54.503829 IP 10.10.10.16 > 10.10.10.1: ICMP echo reply, id 26878, seq 1, length 64
port no mac addr is local? ageing timer
2 52:54:00:33:82:d0 yes 0.00
2 52:54:00:33:82:d0 yes 0.00
2 52:54:00:bd:6b:e5 no 0.00
2 fa:16:3e:8c:0d:68 no 19.47
2 fe:54:00:33:82:d0 no 1.20
Tags networking iptables linux bridge