事实上我有以下配置:
extrouter(192.168.1.1) <- wifi -> [eth2 (192.168.1.11) 基于 Centos 6/6 的主机 br0 (172.22.5.254)]
br0 包含来自虚拟机 (kvm) 的两个 Tap 接口 (tap0/172.22.5.1 tap1/172.22.5.2),VM 内的 gw 是 172.22.5.254。
如果只有一个虚拟机连接到 br0,则一切正常。我无法从 VM 192.168.1.1 执行 ping 操作,eth2 的 tcpdump 显示 192.168.1.11 作为传出地址,伪装按预期工作。但是,如果我添加第二个虚拟机(虚拟机的顺序并不重要),传出地址将更改为 172.22.5.254。从桥接器中删除其中一台虚拟机后,所有虚拟机都会返回并重新开始工作。
Bridge 有自己的 MAC 地址,因此添加接口不会改变任何内容。
有什么想法可能是错误的吗?
更新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
更新2
现在我明白为什么我会得到这样的传出地址:
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
看起来像是路由问题。但是哪里 ...