Вопрос или проблема
Я пытался настроить виртуальную машину с Windows 10 на своем текущем хосте Arch Linux (5.13.12-arch1-1). Я настроил виртуальную машину с использованием libvirt и KVM/QEMU через virt-manager в качестве графического интерфейса.
Сетевая карта была настроена с использованием “Виртуальная сеть ‘По умолчанию’ NAT” и настроек “virtio”. Тем не менее, даже после обновления драйверов в Windows она не может подключиться к интернету и показывает “Неопознанная сеть – Нет доступа в интернет”.
Вывод команды ipconfig /all
в Windows 10
Вывод команды ip link
в Arch
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: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
altname wlp0s20f3
10: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether bb:bb:bb:bb:bb:bb brd ff:ff:ff:ff:ff:ff
11: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN mode DEFAULT group default qlen 1000
link/ether cc:cc:cc:cc:cc:cc brd ff:ff:ff:ff:ff:ff
Вывод команды virsh net-dumpxml default
в Arch
<network connections="1">
<name>default</name>
<uuid>a145acdf-7624-40c5-af1f-b88bfc33bcc6</uuid>
<forward mode="nat">
<nat>
<port start="1024" end='65535'/>
</nat>
</forward>
<bridge name="virbr0" stp='on' delay='0'/>
<mac address="dd:dd:dd:dd:dd:dd"/>
<ip address="192.168.122.1" netmask='255.255.255.0'>
<dhcp>
<range start="192.168.122.2" end='192.168.122.254'/>
<host name="Windows10" ip='192.168.122.2'/>
</dhcp>
</ip>
</network>
Уже сделано-
sudo pacman -S iptables-nft nftables dhclient
sudo systemctl enable/start libvirt.service
sudo systemctl enable/start dnsmasq.service
virsh net-autostart default
virsh net-start default
virsh net-dhcp-leases default
показывает, что виртуальной машине не выделен IP-адрес. В данный момент я не знаю, как это исправить.
*MAC-адреса были изменены
Та же проблема здесь, похоже, это проблема с драйверами. Это решило мою проблему:
-
Если вы еще этого не сделали, загрузите ISO-образ драйвера Windows VirtIO (ISO ‘Stable virtio-win’ сработал для меня) и прикрепите его к CD-приводу гостевой ОС: https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
-
В гостевой Windows 10 откройте Диспетчер устройств и найдите сетевой адаптер с желтым треугольником. Если он отображается как ‘Ethernet Controller’, перейдите к шагу 3. В противном случае, если его распознали как ‘Red Hat VirtIO Ethernet Adapter’ с желтым треугольником: щелкните правой кнопкой мыши -> Удалить устройство и установите флажок ‘удалить драйверы’. Обновите Диспетчер устройств. Теперь он должен появиться просто как “Ethernet Controller”, вероятно, в верхней части списка.
-
Все еще в Диспетчере устройств, щелкните правой кнопкой мыши “Ethernet Controller” -> Обновить драйвер -> Найти на этом компьютере. Когда будет предложен путь, перейдите к вашему CD-приводу -> NetKVM -> w10 -> выберите архитектуру, которую вы можете иметь (в моем случае полный путь был
D:\NetKVM\w10\amd64
).
Теперь должен установиться правильный драйвер для сетевого адаптера virtio и дать доступ в интернет. Для справки, смотрите:
https://access.redhat.com/articles/2470791
По всей видимости, libvirt не очень хорошо работает с nftables [1].
Вам нужно использовать устаревший бэкенд [2]. Это необходимые пакеты
iptables ebtables dnsmasq firewalld
Мне также пришлось включить firewalld, чтобы сеть заработала.
В virt-manager убедитесь, что virbr0 активен и выбрано автозапуск при загрузке
Для более подробной информации проверьте это VirtualNetworking
Я знаю, что это старая проблема и она решена, но у меня была такая же проблема, и ни одно из вышеупомянутых решений не помогло мне, возможно, я нашел ответ на Форумах Arch Linux:
Вам нужно установить
firewall_backend = "iptables"
в
/etc/libvirt/network.conf
На всякий случай перезапустите службу:
$ sudo systemctl restart libvirtd
Ответ или решение
Проблема с отсутствием подключения к интернету в виртуальной машине Windows 10, запущенной на хосте Arch Linux с использованием KVM/QEMU, может быть связана с несколькими факторами. Ниже приведены детальные шаги и рекомендации для устранения этой проблемы.
1. Проверка конфигурации сети
Настройки сетевого интерфейса
Вы используете виртуальную сеть с настройками NAT (Network Address Translation), которая обычно подходит для большинства пользователей. Убедитесь, что виртуальный сетевой адаптер правильно настроен:
- В
virt-manager
проверьте, что контроллер сети настроен на использование"virtio"
. - Убедитесь, что виртуальный интерфейс
virbr0
активен с помощью команды:ip link show virbr0
DHCP настройки
Согласно выходным данным вашей команды virsh net-dumpxml default
, диапазон DHCP настроен правильно. Проблема может заключаться в том, что DHCP-сервер не выделяет IP-адрес для вашей виртуальной машины.
2. Установка драйверов VirtIO
Драйверы VirtIO позволяют Windows 10 взаимодействовать с виртуальным оборудованием на хост-системе. Если драйвера отсутствуют или неверно установлены, возникнут проблемы с сетевым подключением.
Шаги по установке драйверов:
-
Загрузите образ драйверов VirtIO: Скачайте последнюю версию образа драйверов VirtIO для Windows (можно найти на сайте VirtIO-win).
-
Прикрепите образ к вашей виртуальной машине: В настройках
virt-manager
добавьте скачанный ISO как CD/DVD-привод. -
Обновите драйвер в Windows:
- Откройте Диспетчер устройств в Windows 10.
- Найдите ваш сетевой адаптер. Если он отображается как
Ethernet Controller
с желтым треугольником, щелкните правой кнопкой мыши и выберитеОбновить драйвер
. - Выберите
Искать драйверы на этом компьютере
, укажите путь к вашему ISO-диску. Например, если ваш ISO смонтирован как D:, путь будет:D:\NetKVM\w10\amd64
.
3. Настройки брандмауэра
Проблемы с подключением могут быть также связаны с настройками брандмауэра на хост-системе. Если вы используете nftables
, возможно, потребуется переключиться на использование iptables
, поскольку libvirt не всегда корректно работает с nftables
.
Шаги проверки брандмауэра:
-
Убедитесь, что у вас установлены необходимые пакеты:
sudo pacman -S iptables ebtables dnsmasq firewalld
-
Установите конфигурацию брандмауэра на использование
iptables
. Для этого внесите следующие изменения в файл/etc/libvirt/network.conf
:firewall_backend = "iptables"
-
После внесения изменений перезапустите libvirt:
sudo systemctl restart libvirtd
4. Проверка DHCP-шлюза
Если IP-адрес для виртуальной машины не выделяется, оно может быть связано с проблемой в DHCP-сервере:
-
Убедитесь, что служба
dnsmasq
запущена:sudo systemctl start dnsmasq.service
-
Убедитесь, что виртуальная сеть включена и работает:
virsh net-autostart default virsh net-start default
5. Проверка состояния сети в Windows
После выполнения всех вышеуказанных действий проверьте состояние сети в вашей виртуальной машине:
- Откройте командную строку и выполните:
ipconfig /all
Убедитесь, что микросхема сети имеет корректно установленный IP-адрес из диапазона: 192.168.122.2 – 192.168.122.254
.
Заключение
Если все вышеперечисленные шаги не помогли, стоит просмотреть журналы libvirt
и dnsmasq
для диагностики проблемы:
journalctl -xe | grep libvirt
journalctl -xe | grep dnsmasq
Они могут дать дополнительные подсказки о том, что именно идет не так в процессе настройки сети.
Следуя этим рекомендациям, вы сможете устранить проблемы с подключением к интернету в вашей виртуальной машине Windows 10, запущенной на базе KVM/QEMU.