Сетевое взаимодействие и Samba из ОС Quest, работающей на QEMU

Сетевое взаимодействие и Samba из ОС Quest, работающей на QEMU

Я пытаюсь протестировать некоторое программное обеспечение на системе 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.

Связанный контент