qemu - dois clientes (tap0 e tap1) via br0 não podem pingar um ao outro, mas o servidor pinga ok

5

Eu tenho:

  • Um sistema host executando o Ubuntu com o KVM (funcional)
  • Dois clientes, um Ubuntu e um Windows 7, nada extravagante.

Eu também configurei (veja abaixo) uma ponte via br0 para os clientes:

  • br0: 192.168.2.1 (com o DHCP em execução)
  • eth0 - > br0
  • tap0 - > br0
  • tap1 - > br0

br0 pode dar IP aos clientes, eles recebem:

  • Windows 7: 192.168.2.29
  • Ubuntu: 192.168.2.30

Aqui está o meu problema:

  • Windows ICMP - > br0: funciona
  • Ubuntu ICMP - > br0: funciona
  • Ubuntu ICMP - > Windows: falha

link

Eu brinquei com algum NAT (que eu estou pegando o jeito de via iptables) e que funciona como um encanto! Sem problemas, os clientes podem fazer o ping em www.google.se e buscar dados, etc, mas não entre eles ?!

Aqui estão os comandos que estou executando do começo ao fim:

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

Neste ponto, estou tentando fazer ping entre os clientes sem sucesso, então fecho os sistemas e executo:

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
    
por Torxed 19.12.2012 / 17:53

1 resposta

2
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

No seu cenário atual, o toque está sendo usado.
Se todas as VMs puderem acessar outras VMs, assim como o host de virtualização, deixar br0 agir como um switch é uma opção.

Outra maneira seria usar o macvtap no modo bridge ou até mesmo usando openvswitch .

    
por 22.12.2012 / 09:59