Estou tentando testar alguns softwares em um sistema big endian para garantir compatibilidade. Meu plano é usar o qemu no Ubuntu 12.04 para emular um sistema MIPS. Até agora consegui criar o sistema de missões com sucesso, mas não consegui conectá-lo ao sistema host. Posso acessar o mundo externo a partir do sistema convidado (por exemplo, wget ou apt-get), mas minhas tentativas de configurar o samba falharam.
De acordo comesse, no QEmu 1.1 e mais recente, o auxiliar de ponte de rede pode configurar tun/tap para você sem a necessidade de scripts adicionais. Estou tentando usar isso porque vi diferentes versões dos scripts. Neste momento qemu-system-mips -version
relata o seguinte:
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
Compilei a partir da fonte 1.4.1 e usei a versão do apt-get
. Ambos relatam a mesma coisa. Estou presumindo que tenho a versão 1.1 ou posterior, apesar do que -version
me dizem. De qualquer forma, a próxima instrução foi ativar o atributo setuid para o auxiliar de rede padrão:
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
Em seguida, criei um bridge.conf
arquivo in /etc/qemu/
e /usr/local/etc/qemu
with -rw-r--r--
para permissões. O conteúdo do arquivo é:
allow br0
Se eu iniciar o QEmu com o seguinte comando:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba
ou com
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
ou com
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
Estou tendo o erro a seguir:
failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized
É justo, não criei a ponte br0. Tentei criar um com um script que não entendo, mas meu sistema Quest MIPS QEmu não se conecta mais a nada. Ele vê br0, mas não obtém um endereço IP. Claramente estou fazendo algo errado aqui:
ifconfig br0 down
brctl delbr br0
ifconfig eth2 0.0.0.0 promisc up
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
dhclient br0
ifconfig br0 up
Existe uma maneira mais fácil de fazer isso? Pessoalmente, eu ficaria bem apenas usando o servidor SMB em \10.0.2.4\qemu descritoaqui, mas isso também não funcionou para mim (115 erros quando tento montar o compartilhamento, provavelmente devido a problemas de rede).
Atualizar
Depois de criar a ponte, vejo a seguinte saída do ifconfig na máquina host:
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:10.2.32.101 Bcast:10.2.32.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8235 (8.2 KB) TX bytes:9227 (9.2 KB)
eth2 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:139517339 (139.5 MB) TX bytes:3365206 (3.3 MB)
Verificando a brctl show
saída, vejo o seguinte:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
Agora inicio o sistema de missões no QEmu. Se eu executar o ifconfig, vejo o seguinte:
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536 errors:1 dropped:51 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55083 (53.7 KiB) TX bytes:2862 (2.7 KiB)
Interrupt:10 Base address:0x1020
E a ponte fica assim:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
tap0
Infelizmente com esta configuração, o sistema de missões perdeu a rede limitada de "modo de usuário" que tinha antes (ou seja, wget e apt-get não funcionam mais). O único endereço IP que vejo é da ponte, então não tenho certeza de como a missão aparecerá na rede. O host ainda aparece, no mesmo endereço IP de br0.
Atualizar
Aqui está a saída de iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Responder1
Quando você está executando uma ponte, os membros da ponte (eth2) não devem mais ter um endereço IP atribuído a eles. br0 deve estar recebendo o IP agora.
Exemplo
Esta é a saída de um sistema que usa KVM. Ele usa qemu-kvm nos bastidores, portanto deve ser semelhante na configuração ao que você está tentando fazer.
$ ifconfig -a
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1992305504701 (1.8 TiB) TX bytes:3609403664141 (3.2 TiB)
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2735097151685 (2.4 TiB) TX bytes:4313257594064 (3.9 TiB)
Interrupt:177
Veja como a eth0 não tem um endereço IP? Também aqui está a aparência do meu dispositivo br0:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no vnet2
vnet1
vnet0
eth0
Eu tenho três VMs localizadas em cima do dispositivo br0, para que possam participar totalmente da minha rede como um verdadeiro sistema físico. Isso significa que eles podem fornecer serviços como executar o Samba, etc. Não acredito que você possa servir o Samba por trás da rede NAT.