Problema no Linux QEMU com interface de rede de ponte

1

Estou tentando configurar uma interface de ponte para um dos meus QEMU em execução no CentOS 7. Tenho abaixo os scripts para a interface TAP em execução

$ cat /etc/qemu-ifup
ifconfig ens192 down
ifconfig ens192 0.0.0.0 promisc up
openvpn --mktun --dev tap0
ifconfig tap0 0.0.0.0 up
brctl addbr br0
brctl addif br0 ens192
brctl addif br0 tap0
brctl stp br0 off
ifconfig br0 192.168.42.201 netmask 255.255.255.0

Agora, antes de executar a máquina QEMU, eu corro este script para que possamos ter a interface em ponte instalada e funcionando. Eu sou capaz de pingar essa interface de outro host. Abaixo está a saída

$ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.42.201  netmask 255.255.255.0  broadcast 192.168.42.255
        inet6 fe80::646a:f6ff:fe1e:42ce  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1f:e0:db  txqueuelen 0  (Ethernet)
        RX packets 314  bytes 15522 (15.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 4803 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens192: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        ether 00:0c:29:1f:e0:db  txqueuelen 1000  (Ethernet)
        RX packets 258  bytes 16020 (15.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 92  bytes 8269 (8.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 7404  bytes 108578604 (103.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7404  bytes 108578604 (103.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e8d9:3ff:fedf:85d3  prefixlen 64  scopeid 0x20<link>
        ether ea:d9:03:df:85:d3  txqueuelen 100  (Ethernet)
        RX packets 69  bytes 4722 (4.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 193  bytes 12111 (11.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 02:a1:9f:a4:81:bc  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 90 (90.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Abaixo está a saída do ping de outro host, ou seja, 192.168.42.12

# ping 192.168.42.201
PING 192.168.42.201 (192.168.42.201) 56(84) bytes of data.
64 bytes from 192.168.42.201: icmp_seq=1 ttl=64 time=1.19 ms
64 bytes from 192.168.42.201: icmp_seq=2 ttl=64 time=0.369 ms

Agora abaixo está o comando que eu disparei para executar o QEMU

/home/test/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-arm -kernel /home/test/yocto/poky/build/tmp/deploy/images/qemuarm/zImage-qemuarm.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no -M versatilepb -hda /home/test/yocto/poky/build/tmp/deploy/images/qemuarm/core-image-minimal-dev-qemuarm-20141124054625.rootfs.ext3 -no-reboot -show-cursor -usb -usbdevice wacom-tablet -no-reboot -m 128 --append "root=/dev/sda rw console=ttyAMA0,115200 console=tty mem=128M highres=off "

Além disso, parei o iptables e tentei fazer o ping do host da máquina QEMU (192.168.42.202) ou de outro host, mas não consigo alcançá-lo.

# ping 192.168.42.202
PING 192.168.42.202 (192.168.42.202) 56(84) bytes of data.
^C
--- 192.168.42.202 ping statistics ---
670 packets transmitted, 0 received, 100% packet loss, time 669735ms

Qualquer pensamento para corrigir esse problema.

    
por Abhinav 24.11.2014 / 18:53

1 resposta

0

Por fim, consegui resolver esse problema por meio do mecanismo de encapsulamento OpenVPN. Então, para referência, estou colocando a solução. Esta poderia ser uma delas, pois poderia haver mais.

  1. Instale o RPM do Epel e instale o pacote openvpn como yum install openvpn .
  2. Agora modifique o script de início de ponte de exemplo (pode ser encontrado em / usr / share / doc / openvpn / scripts de amostra como abaixo

    //! / bin / bash

    // Define Bridge Interface br="br0"

    // Define a lista de interfaces TAP a serem conectadas, // por exemplo, toque em="tap0 tap1 tap2". tap="tap0"

    // Defina a interface Ethernet física para ser conectada // com interface (s) TAP acima. eth="eth0" < == Altere-o com seu dispositivo de rede física.

    eth_ip="192.168.8.4" < == Atualize isto com o endereço que você deseja usar.

    eth_netmask="255.255.255.0" eth_broadcast="192.168.8.255" < == Similarmente atualize isto.

    para t em $ tap; Faz     openvpn --mktun --dev $ t feito

    brctl addbr $ br brctl addif $ br $ eth

    para t em $ tap; Faz     brctl addif $ br $ t feito

    para t em $ tap; Faz     ifconfig $ t 0.0.0.0 promisc up feito

    ifconfig $ eth 0.0.0.0 promisc up

    ifconfig $ br $ eth_ip netmask $ eth_netmask transmitido $ eth_broadcast

P.S. Substitua // por # como um problema para definir a fonte.

  1. Similiary existe um script de parada de ponte. Pode ser usado para remover o dispositivo de derivação e a ponte.

  2. Agora torne-o executável e execute como ./bridge-start. Antes de executar o início do Qemu.

  3. Agora inicie o Qemu com o dispositivo TAP, ou seja, tap0. Ele poderá se comunicar com outros hosts e dispositivos.

Para mais informações, dê uma olhada em OpenVPN Ethernet Bridge Networking

    
por 01.12.2014 / 16:14

Tags