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

Вопрос или проблема

Я пытаюсь протестировать программное обеспечение на системе с порядком байтов big endian, чтобы убедиться в совместимости. Мой план — использовать qemu на Ubuntu 12.04 для эмуляции системы MIPS. До сих пор мне удалось успешно создать систему гостя, но я не смог соединить её с хостовой системой. Я могу получить доступ к внешнему миру из системы гостя (например, с помощью wget или apt-get), но мои попытки настроить samba оказались неудачными.

Согласно этому, в QEmu 1.1 и новее помощник для сетевого моста может настроить tun/tap для вас без необходимости в дополнительных скриптах. Я пытаюсь использовать это, так как видел разные версии скриптов. На данный момент 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. Я пытался создать его с помощью скрипта, который не понимаю, но тогда моя система 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   

Когда вы запускаете мост, участникам моста (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 из-за маршрутизируемой сети.

Ответ или решение

Для успешной настройки сети и использования Samba на вашей системе QEMU с эмуляцией MIPS в Ubuntu 12.04, необходимо выполнить несколько шагов. Вы упомянули, что не можете подключиться к сети, после того как создали мост и запустили QEMU. Рассмотрим более подробно, как правильно настроить сетевой мост и обеспечить корректную работу Samba.

Шаг 1: Создание сетевого моста

  1. Создайте мост br0:

    Убедитесь, что у вас есть установленный пакет bridge-utils:

    sudo apt-get install bridge-utils

    Далее выполните следующие команды в терминале:

    sudo brctl addbr br0            # Создаем мост
    sudo ip addr flush dev eth2     # Убираем IP-адрес с интерфейса eth2 (или вашего актуального интерфейса)
    sudo brctl addif br0 eth2       # Добавляем интерфейс eth2 в мост
    sudo ip link set dev br0 up     # Активируем мост
  2. Назначьте IP-адрес мосту:

    Примените новый IP-адрес к вашему мосту:

    sudo ip addr add 10.2.32.101/24 dev br0   # Пример IP-адреса, измените по необходимости
  3. Запустите DHCP-сервер или настройте статику:

    Если вы хотите, чтобы ваши виртуальные машины (VM) получали IP-адреса через DHCP, убедитесь, что DHCP-сервер работает в вашей сети. В противном случае вы можете назначить статический IP-адрес каждой из VM после их старта.

Шаг 2: Запуск QEMU с использованием сетевого моста

Теперь мы перейдем к запуску вашей VM с использованием настроенного моста. Используйте следующую команду для запуска QEMU:

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,br=br0 -device virtio-net-pci,netdev=hn0

Убедитесь, что используете правильные параметры для вашего виртуального сетевого устройства.

Шаг 3: Настройка Samba

На вашей гостевой системе:

  1. Установите Samba:

    sudo apt-get install samba
  2. Настройте файл конфигурации Samba. Откройте /etc/samba/smb.conf и добавьте или измените следующие настройки:

    [qemu]
    path = /home/uli/samba       # Проверяйте, что директория существует
    available = yes
    valid users = uli            # Имя пользователя
    read only = no
    browsable = yes
    public = yes
    writable = yes
  3. Создайте пользователя Samba:

    sudo smbpasswd -a uli
  4. Перезапустите услуги Samba:

    sudo service smbd restart
    sudo service nmbd restart

Шаг 4: Проверка соединения

На вашем хосте:

  1. Проверьте IP-адрес гостевой VM:
    Внутри виртуальной машины выполните:

    ip addr

    Убедитесь, что VM получает корректный IP-адрес из вашей сети.

  2. Проверьте, доступны ли ресурсы Samba:
    С хоста попробуйте подключиться к ресурсу Samba:

    smbclient -L //10.2.32.101 -U uli

    Здесь 10.2.32.101 — это IP-адрес вашей VM.

Шаг 5: Устранение неполадок

Если после выполнения всех этих шагов возникают проблемы, проверьте следующее:

  • Убедитесь, что iptables не блокирует доступ к Samba:

    sudo iptables -L
  • Проверьте логи Samba на гостевой системе (обычно в /var/log/samba/), чтобы выяснить, нет ли ошибок при подключении.

  • Убедитесь, что мост активен и работает:

    brctl show

Следуя этим шагам, вы должны установить работоспособную сетевую конфигурацию с QEMU и обеспечить доступность сервиса Samba. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...