실제로 다음과 같은 구성이 있습니다.
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이 하나만 있으면 모든 것이 잘 작동합니다. VM 192.168.1.1에서 ping을 실행할 수 없습니다. eth2의 tcpdump는 발신 주소로 192.168.1.11을 표시하며 가장 무도회는 예상대로 작동합니다. 그러나 두 번째 가상 머신을 추가하면(가상 머신의 순서는 중요하지 않음) 나가는 주소가 172.22.5.254로 변경됩니다. 브리지에서 VM 중 하나를 제거한 후 모든 VM이 반환되어 다시 작업을 시작합니다.
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
라우팅 문제인 것 같습니다. 그런데 어디...