Работающий доступ в интернет / сетевой мост на Ubuntu под управлением виртуальной машины?

Пожалуйста, рассмотрите следующий сценарий.

Хост: Рабочий стол Ubuntu 18.04 LTS с последними обновлениями. Версия QEMU 3 .1.

Сеть управляется сетевым администратором с работающим беспроводным подключением к Интернету.

$ ifconfig
enp0s25: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 234  bytes 47490 (47.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 362  bytes 86199 (86.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf3b00000-f3b20000  

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 1000  (Lokale Schleife)
        RX packets 120821  bytes 896665929 (896.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 120821  bytes 896665929 (896.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.5  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 xxxx::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether yy:yy:yy:yy:yy:yy  txqueuelen 1000  (Ethernet)
        RX packets 3098974  bytes 3223048745 (3.2 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2259694  bytes 909739966 (909.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Виртуальная машина KVM: Недавно установленный и обновленный Ubuntu Server 18.04 LTS со стеком LAMP с именем uslamp.img.

Виртуальная машина запускается с qemu-system-x86_64 -enable-kvm -m 6G -smp cores=3 -cpu host -drive file=uslamp.img,if=virtio,aio=native,cache.direct=on -vga virtio -usb -device usb-tablet -nic tap,model=virtio-net-pc


Обратите внимание, что не следует использовать ни libvirt, ни такие инструменты, как uvtool или multipass.


Проблема: Я не могу получить работающее сетевое соединение с хостом. Ни qemu-bridge-helper, ни руководство по работе с сервером Ubuntu , ни какие-либо предложения, которые я читал здесь в StackExchange, не дали работающего решения.

Сообщение об ошибке при запуске виртуальной машины:

qemu-system-x86_64: не удалось настроить / dev / net / tun: операция не разрешена

Запуск Виртуальная машина как root предоставляет:

W: / etc / qemu-ifup: мост для гостевого интерфейса не найден

Несмотря на это предупреждение, виртуальная машина запускается и получает IP4-адрес , только если опция -nic отброшена из команды запуска QEMU . Адрес виртуальной машины можно пропинговать внутри виртуальной машины, на которой работает сервер Ubuntu. Однако соединение с сетью отсутствует, т. Е. Проверка DNS на 10.0.0.1 приводит к 100% потере пакетов.


Изменен /etc/netplan файл yaml согласно справочным страницам :

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
# MW
  ethernets:
    wlp3s0:
      dhcp4: no
  bridges:
    br0:
      dhcp4: yes
      interfaces:
        - wlp3s0

QEMU запускается с помощью:

 sudo qemu-system-x86_64 -enable-kvm -m 6G -smp cores=3 -cpu host -drive file=uslamp.img,if=virtio,aio=native,cache.direct=on -vga virtio -usb -device usb-tablet -nic tap,model=virtio-net-pci,script=no

VM запускается и останавливается в течение ~ 2 минут с A start job is running Wait for Network to be Configured.

На хосте:

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether f0:de:f1:ad:44:0a brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 08:11:96:e6:a2:ac brd ff:ff:ff:ff:ff:ff
26: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
     link/ether 6a:1b:be:e2:9f:ec brd ff:ff:ff:ff:ff:ff
28: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
     link/ether ea:d6:20:c8:e2:b5 brd ff:ff:ff:ff:ff:ff

ВМ не имеет назначенного IP-адреса и, следовательно, нет подключения к Интернету.

Чего мне не хватает?


Любой совет высоко ценится!

1
задан 22 May 2019 в 16:43

1 ответ

если вы не укажете -nic ..., тогда qemu добавит значения по умолчанию, которые для man-страницы :

Если опция -net не указана, создается один NIC .

Что эквивалентно -net nic -net user

Итак, вы указали nic, что означает, что вы создали виртуальное HW , но еще не подключили это ни к чему .

Предполагая, что уже настроили мост для него, вам нужно указать qemu для подключения к нему.

Но позвольте мне предупредить вас, мост IIRC для беспроводных устройств не всегда работал великолепно. Это должно было измениться в наше время, но помните, что в зависимости от того, какой документ / блог вы читаете, вы можете получить устаревшую информацию.

Чтобы подключиться к мосту, вы найдете на тех же страницах man-страниц, как -net nic -net tap,"helper=/path/to/qemu-bridge-helper" или -net bridge[,vlan=n][,name=name][,br=bridge][,helper=helper]

-netdev, новее и позволяет вам делать то же самое, но сразу - но вы все еще нужно соединить это с устройством. См. Здесь для больше об этом .

Для некоторых действий по созданию сети крана для привязки к мосту необходимы права доступа root, что вы и видели. Таким образом, вы можете запускать от имени пользователя root (не рекомендуется) или настраивать скрипт qemu-ifup для своих нужд. Значение по умолчанию для этого сценария уже в /etc/qemu-ifup пакетом qemu-system-common.

Это должно помочь вам решить проблему с настройкой, но я действительно хочу упомянуть, что libvirt сделает всю эту путаницу с командной строкой qemu и net prep для вас? А если вы ненавидите XML-файлы, пусть uvtool сделает это за вас. Или, если вам не нравится libvirt, рассмотрите multipass , который также сделает все это за вас (но по умолчанию без libvirt).

P.S. даже если вы просто хотели запустить qemu вручную, рассмотрите возможность использования инструментов, которые я упомянул выше, и проверьте, как они настраивают сеть в командной строке qemu.

0
ответ дан 22 May 2019 в 16:43

Другие вопросы по тегам:

Похожие вопросы: