Na verdade, tenho a seguinte configuração:
extrouter (192.168.1.1) < - wifi - > [eth2 (192.168.1.11) Host baseado em Centos 6/6 br0 (172.22.5.254)]
br0 contém duas interfaces de toque (tap0 / 172.22.5.1 tap1 / 172.22.5.2) das máquinas virtuais (kvm), o gw dentro das VMs é 172.22.5.254.
Se apenas uma única máquina virtual estiver conectada a br0, tudo funcionará bem. Eu não consigo ping de VM 192.168.1.1 e tcpdump para eth2 mostra 192.168.1.11 como endereço de saída, o mascaramento funciona como o esperado. Mas se eu adicionar a segunda VM (a ordem das VMs não é importante), o endereço de saída será alterado para 172.22.5.254. Depois de remover uma das VMs da bridge, tudo volta e começa a funcionar novamente.
O Bridge tem seu próprio endereço MAC, portanto, adicionar uma interface não deve alterar nada.
Alguma idéia do que pode estar errado?
Atualização 1
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.026adbaf3564 no tap0
tap1
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
172.22.5.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
Atualização 2
Agora vejo por que recebo esse endereço de saída:
POSTR: IN= OUT=br0 PHYSIN=tap0 PHYSOUT=tap1 SRC=172.22.5.1 DST=192.168.1.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59404 SEQ=1
Parece um problema de roteamento. Mas onde ...