Я пытаюсь протестировать некоторое программное обеспечение на системе big endian, чтобы убедиться в совместимости. Я планирую использовать qemu на Ubuntu 12.04 для эмуляции системы MIPS. Пока что мне удалось успешно создать систему quest, но мне не удалось подключить ее к хостовой системе. Я могу получить доступ к внешнему миру из гостевой системы (например, wget или apt-get), но мои попытки настроить samba потерпели неудачу.
В соответствии сэтот, в QEmu 1.1 и более новых версиях сетевой мостовой помощник может настроить tun/tap up без необходимости в дополнительных скриптах. Я пытаюсь использовать это, так как видел разные версии скриптов. Сейчас qemu-system-mips -version
сообщается следующее:
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
Я скомпилировал из исходников 1.4.1 и использовал версию из apt-get
. Оба сообщают одно и то же. Я работаю, предполагая, что у меня версия 1.1 или более поздняя, несмотря на то, что -version
мне говорят. В любом случае, следующая инструкция заключалась в том, чтобы включить атрибут setuid для сетевого помощника по умолчанию:
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
Далее я создал bridge.conf
файл в /etc/qemu/
и /usr/local/etc/qemu
с -rw-r--r--
для разрешений. Содержимое файла следующее:
allow br0
Если я запущу QEmu с помощью следующей команды:
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
или с
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
или с
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
Я получаю следующую ошибку:
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
Честно говоря, я не создавал мост br0. Я пытался создать его с помощью скрипта, который я не понимаю, но тогда моя система quest MIPS QEmu больше ни к чему не подключается. Она видит br0, но не получает IP-адрес. Очевидно, я делаю что-то не так:
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
Есть ли более простой способ сделать это? Лично я бы просто использовал SMB-сервер на \10.0.2.4\qemu, который описанздесь, но это тоже не сработало (при попытке смонтировать общий ресурс возникает ошибка 115, предположительно из-за проблем с сетью).
Обновлять
После создания моста я вижу следующий вывод ifconfig на хост-машине:
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)
Проверяя brctl show
вывод, я вижу следующее:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
Теперь я запускаю систему квестов в QEmu. Если я запускаю ifconfig, то вижу следующее:
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
А мост выглядит вот так:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
tap0
К сожалению, при такой настройке система квестов потеряла ограниченный сетевой режим "пользовательского режима", который у нее когда-то был (т. е. wget и apt-get больше не работают). Единственный IP-адрес, который я вижу, принадлежит мосту, поэтому я не уверен, как квест будет отображаться в сети. Хост все еще отображается, с тем же IP-адресом, что и br0.
Обновлять
Вот вывод 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
решение1
При запуске моста членам моста (eth2) больше не должен быть назначен IP-адрес. Теперь IP-адрес должен получить br0.
Пример
Это вывод из системы, которая использует KVM. Он использует qemu-kvm под капотом, поэтому его настройка должна быть похожа на то, что вы пытаетесь сделать.
$ 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
Видите, у eth0 нет IP-адреса? А вот как выглядит мое устройство br0:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no vnet2
vnet1
vnet0
eth0
У меня есть 3 виртуальные машины, которые находятся поверх устройства br0, поэтому они могут полноценно участвовать в моей сети, как настоящая физическая система. Это означает, что они могут предоставлять такие услуги, как запуск Samba и т. д. Я не верю, что вы можете обслуживать Samba из-за сети NAT.