Пожалуйста, рассмотрите следующий сценарий.
Хост: Рабочий стол 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
Проблема: Я не могу получить работающее сетевое соединение с хостом. Ни qemu-bridge-helper, ни руководство по работе с сервером Ubuntu , ни какие-либо предложения, которые я читал здесь в StackExchange, не дали работающего решения.
Сообщение об ошибке при запуске виртуальной машины:
qemu-system-x86_64: не удалось настроить / dev / net / tun: операция не разрешена
blockquote>Запуск Виртуальная машина как root предоставляет:
W: / etc / qemu-ifup: мост для гостевого интерфейса не найден
blockquote>Несмотря на это предупреждение, виртуальная машина запускается и получает 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-адреса и, следовательно, нет подключения к Интернету.
Чего мне не хватает?
Любой совет высоко ценится!
если вы не укажете -nic ...
, тогда qemu добавит значения по умолчанию, которые для man-страницы :
Если опция -net не указана, создается один NIC .
blockquote>Что эквивалентно
-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.