Не удается подключиться к интернету в виртуальной машине Windows 10 с использованием KVM/QEMU

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

Я пытался настроить виртуальную машину с Windows 10 на своем текущем хосте Arch Linux (5.13.12-arch1-1). Я настроил виртуальную машину с использованием libvirt и KVM/QEMU через virt-manager в качестве графического интерфейса.

Сетевая карта была настроена с использованием “Виртуальная сеть ‘По умолчанию’ NAT” и настроек “virtio”. Тем не менее, даже после обновления драйверов в Windows она не может подключиться к интернету и показывает “Неопознанная сеть – Нет доступа в интернет”.

Вывод команды ipconfig /all в Windows 10
output

Вывод команды 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-адреса были изменены

Та же проблема здесь, похоже, это проблема с драйверами. Это решило мою проблему:

  1. Если вы еще этого не сделали, загрузите ISO-образ драйвера Windows VirtIO (ISO ‘Stable virtio-win’ сработал для меня) и прикрепите его к CD-приводу гостевой ОС: https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md

  2. В гостевой Windows 10 откройте Диспетчер устройств и найдите сетевой адаптер с желтым треугольником. Если он отображается как ‘Ethernet Controller’, перейдите к шагу 3. В противном случае, если его распознали как ‘Red Hat VirtIO Ethernet Adapter’ с желтым треугольником: щелкните правой кнопкой мыши -> Удалить устройство и установите флажок ‘удалить драйверы’. Обновите Диспетчер устройств. Теперь он должен появиться просто как “Ethernet Controller”, вероятно, в верхней части списка.

  3. Все еще в Диспетчере устройств, щелкните правой кнопкой мыши “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, чтобы сеть заработала.

  1. https://blog.zentria.company/posts/its-2021-nftables-still-does-not-integrate/
  2. libvirt: “Не удалось инициализировать действительный бэкенд брандмауэра”

В virt-manager убедитесь, что virbr0 активен и выбрано автозапуск при загрузке

enter image description here

Для более подробной информации проверьте это 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 взаимодействовать с виртуальным оборудованием на хост-системе. Если драйвера отсутствуют или неверно установлены, возникнут проблемы с сетевым подключением.

Шаги по установке драйверов:

  1. Загрузите образ драйверов VirtIO: Скачайте последнюю версию образа драйверов VirtIO для Windows (можно найти на сайте VirtIO-win).

  2. Прикрепите образ к вашей виртуальной машине: В настройках virt-manager добавьте скачанный ISO как CD/DVD-привод.

  3. Обновите драйвер в 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.

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

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