web-dev-qa-db-ja.com

qemu-br0を介した2つのクライアント(tap0とtap1)は相互にpingを実行できませんが、サーバーは正常にpingを実行します

私が持っている:

  • KVM(機能的)でUbuntuを実行しているホストシステム
  • 2つのクライアント、1つはUbuntu、もう1つはWindows 7で、何も凝っていません。

また、クライアント用にbr0を介してブリッジをセットアップしました(以下を参照)。

  • br0:192.168.2.1(DHCPが実行されている場合)
  • eth0-> br0
  • tap0-> br0
  • tap1-> br0

br0はクライアントにIPを与えることができ、クライアントは次のようになります。

  • Windows 7:192.168.2.29
  • Ubuntu:192.168.2.30

これが私の問題です:

  • Windows ICMP-> br0:動作します
  • Ubuntu ICMP-> br0:動作します
  • Ubuntu ICMP-> Windows:失敗

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



これが私が最初から最後まで実行しているコマンドです:

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

この時点で、クライアント間でpingを実行しようとして成功しなかったため、システムを閉じて次のコマンドを実行します。

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
6
Torxed
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 を使用するか、 openvswitch を使用することです。

2
rhasti