qemu - br0을 통한 두 클라이언트(tap0 및 tap1)가 서로 ping할 수 없지만 서버에서는 ping이 잘 됩니다.

qemu - br0을 통한 두 클라이언트(tap0 및 tap1)가 서로 ping할 수 없지만 서버에서는 ping이 잘 됩니다.

나는 가지고있다:

  • KVM을 사용하여 Ubuntu를 실행하는 호스트 시스템(기능)
  • 클라이언트 두 개(Ubuntu용 클라이언트 하나, Windows 7용 클라이언트 하나)는 특별한 것이 없습니다.

또한 br0을 통해 클라이언트에 대한 브리지를 설정했습니다(아래 참조).

  • br0:192.168.2.1(DHCP 실행)
  • eth0 -> br0
  • 0 -> br0을 클릭하세요.
  • 1 -> br0을 클릭하세요.

br0은 클라이언트에게 IP를 제공할 수 있으며 클라이언트는 다음을 얻습니다.

  • 윈도우 7: 192.168.2.29
  • 우분투: 192.168.2.30

내 질문은 다음과 같습니다.

  • Windows ICMP -> br0: 유효함
  • 우분투 ICMP -> br0: 유효함
  • 우분투 ICMP -> Windows: 실패

http://www.youtube.com/watch?v=5C1VvJezouI


NAT를 사용해 보았는데(iptables를 사용하여 익숙해졌습니다) 정말 매력적으로 작동했습니다! 문제 없이 두 클라이언트 모두 www.google.se를 핑하고 데이터 등을 얻을 수 있지만 서로는 그렇지 않습니까? !


처음부터 끝까지 내가 실행한 명령은 다음과 같습니다.

tc qdisc del dev wlan0 root 2>/dev/null
tc qdisc del dev wlan0 ingress 2>/dev/null
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -t nat -F POSTROUTING
iptables -t nat -F
iptables -t mangle -F
ip route flush table main
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark

modprobe ifb numifbs=1
modprobe ip_conntrack
modprobe xt_mark
modprobe iptable_nat

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/bridge/bridge-nf-call-arptables
echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
echo "0" > /proc/sys/net/bridge/bridge-nf-call-ip6tables

ifconfig br0 192.168.2.1 netmask 255.255.255.0
route add -net 192.168.2.0 netmask 255.255.255.0 dev br0
ip route add default via 192.168.2.1 dev wlan0

kpartx -av win7.img
kpartx -av ubuntu.img

tunctl -u `whoami` -t tap0
ip link set tap0 up
brctl addif br0 tap0

tunctl -u `whoami` -t tap1
ip link set tap1 up
brctl addif br0 tap1

kvm -no-reboot -m 1300 -hda /dev/mapper/loop0p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B6" -net tap,ifname=tap0,script=/etc/qemu-dummy

kvm -no-reboot -m 1300 -hda /dev/mapper/loop1p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B7" -net tap,ifname=tap1,script=/etc/qemu-dummy

이 시점에서 클라이언트 간 핑을 시도했지만 성공하지 못했습니다. 그래서 시스템을 종료하고 다음을 실행했습니다.

brctl delif br0 tap0
brctl delif br0 tap1
ifconfig tap0 down
ifconfig tap1 down
tunctl -d tap0
tunctl -d tap1
kpartx -dv win7.img
kpartx -dv ubuntu.img

답변1

brctl delif br0 tap0
brctl delif br0 tap1

kvm -no-reboot -m 1300 -hda /dev/mapper/loop0p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B6" -net bridge,br=br0
kvm -no-reboot -m 1300 -hda /dev/mapper/loop1p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B7" -net bridge,br=br0

현재 시나리오에서는 수도꼭지가 사용되고 있습니다.
모든 VM이 가상화 호스트는 물론 다른 VM에도 액세스할 수 있어야 하는 경우 br0을 스위치로 작동하도록 선택할 수 있습니다.

또 다른 방법은브리지 모드의 macvtap아니면 심지어 사용오픈 스위치.

관련 정보