Вопрос или проблема
Я установил qemu и virt manager на Arch, но продолжаю получать ошибки при установке виртуальных машин:
В системе нет virtbr0 при выполнении ip addr show при первом запуске системы, выполнение virsh net-list –all также ничего не показывает. Я искал решения и нашел, что нужно отключить dnmasq и некоторые другие команды, которые я ввел в chat gpt, чтобы получить сценарий:
#!/bin/bash
# Переменные
NETWORK_XML="/etc/libvirt/qemu/networks/default.xml"
RESOLV_CONF="/etc/resolv.conf"
BRIDGE_NAME="br0"
MAIN_INTERFACE="eth0" # Замените на ваш основной интерфейс (например, eth0, ens33)
# Функция проверки, работает ли сервис
is_service_running() {
systemctl is-active --quiet "$1"
}
# Функция остановки конфликтующих сервисов, если они работают
stop_conflicting_services() {
echo "Проверка конфликтующих сервисов..."
# Остановка systemd-resolved (если работает)
if is_service_running systemd-resolved; then
echo "Остановка systemd-resolved..."
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# Убедиться, что resolv.conf не является символической ссылкой
sudo rm -f "$RESOLV_CONF"
echo "nameserver 8.8.8.8" | sudo tee "$RESOLV_CONF" > /dev/null
fi
# Проверка, запущен ли dnsmasq (если необходим для libvirt)
if is_service_running dnsmasq; then
echo "Остановка конфликтующего dnsmasq..."
sudo systemctl stop dnsmasq
fi
# НЕ отключайте NetworkManager, если это не необходимо
if is_service_running NetworkManager; then
echo "NetworkManager работает. Не отключаем его, чтобы избежать отключения."
fi
}
# Функция создания и определения сети по умолчанию для libvirt
create_default_network() {
echo "Создание файла default.xml для сети virtbr0..."
# Создание содержимого default.xml
cat <<EOF | sudo tee "$NETWORK_XML" > /dev/null
<network>
<name>default</name>
<forward mode="nat"/>
<bridge name="$BRIDGE_NAME"/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254"/>
</dhcp>
</ip>
</network>
EOF
# Определение, запуск и активация сети
sudo virsh net-define "$NETWORK_XML"
sudo virsh net-start default
sudo virsh net-autostart default
}
# Функция обеспечения правильного запуска libvirtd
enable_libvirtd() {
echo "Включение libvirtd для автозапуска..."
sudo systemctl enable --now libvirtd
}
# Функция создания постоянного моста с использованием systemd-networkd
create_persistent_bridge() {
echo "Создание постоянного моста с использованием systemd-networkd..."
# Создание файла конфигурации моста
sudo bash -c 'cat <<EOF > /etc/systemd/network/10-br0.netdev
[NetDev]
Name=br0
Kind=bridge
EOF'
sudo bash -c 'cat <<EOF > /etc/systemd/network/10-br0.network
[Match]
Name=br0
[Network]
DHCP=ipv4
EOF'
# Создание конфигурации интерфейса для добавления основного интерфейса в мост
sudo bash -c "cat <<EOF > /etc/systemd/network/10-${MAIN_INTERFACE}.network
[Match]
Name=${MAIN_INTERFACE}
[Network]
Bridge=br0
EOF"
# Перезапуск systemd-networkd для применения изменений
sudo systemctl restart systemd-networkd
}
# Запуск процесса
stop_conflicting_services
create_default_network
create_persistent_bridge
enable_libvirtd
echo "Конфигурация завершена. Сеть 'default' теперь должна быть активной и установлена на автозапуск."
это как-то решает проблему, теперь я иногда вижу virtbr0 и default при выполнении ip addr show и net-list –all соответственно.
Проблема в том, что если это работает, я могу установить виртуальные машины: я установил как Rocky Linux, который был создан с IP 10.0.5.2 и недоступен при пинге или ssh с хост-машины, так и Debian, который был создан с IP 192.168.122.51 и был доступен. (Я пытался подключиться через ssh, так как пытался написать скрипты установки postgresSQL и хочу, чтобы они работали отдельно от моей хост-машины). Соединения также исчезают кажущемся случайными интервалами, и если я перезапускаю скрипт без перезагрузки машины, он не работает.
Я не очень разбираюсь в сетях и мне нужно знать, как мне сделать эти настройки постоянными, чтобы я мог подключаться к своим виртуальным машинам и как сделать так, чтобы Rocky Linux и другие (будут ли другие дистрибутивы на базе RHEL такими же?) подключались таким образом, чтобы к ним можно было получить доступ.
Ответ или решение
Теория
Вы столкнулись с достаточно распространенной проблемой при использовании QEMU и virt-manager в качестве инструментов для виртуализации на Arch Linux. Во-первых, отсутствие virtbr0
и результата при выполнении команды virsh net-list --all
указывает на то, что сетевая конфигурация в libvirt не активирована. Это ограничивает возможность виртуальных машин взаимодействовать с хостовой системой или выходить в Интернет.
Пример
Ваш скрипт пытается автоматически настраивать сеть для libvirt с использованием команд для создания NAT-моста. Основной компонент здесь — создание и активация сети default
с использованием virsh
. Однако, похоже, что эта сеть иногда не работает или выходит из строя. Вы указали, что Debian-машина получает IP-адрес из корректного диапазона (192.168.122.*
), в то время как Rocky Linux получает IP в другом диапазоне (10.0.5.*
), что может быть симптомом неправильной конфигурации сети на уровне гостевой системы или libvirt.
Применение
-
Проверка libvirt: Убедитесь, что демоны
libvirtd
иvirtqemud
активны и работают корректно:sudo systemctl enable --now libvirtd sudo systemctl enable --now virtqemud
-
Создание и активация сети NAT:
Убедитесь, что файл конфигурации сети
default
присутствует и корректен. Созданный вамиdefault.xml
должен быть правильно задан:<network> <name>default</name> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network>
Далее выполните:
sudo virsh net-define /etc/libvirt/qemu/networks/default.xml sudo virsh net-start default sudo virsh net-autostart default
-
Проблемы с соединением:
-
Убедитесь, что файервол на хосте и гостевых системах не блокирует трафик. На хосте:
sudo firewall-cmd --zone=libvirt --add-interface=virbr0 --permanent sudo firewall-cmd --reload
-
Проверьте настройки в файле гостевой системы, например
/etc/network/interfaces
или файлы сети в/etc/sysconfig/network-scripts/
, в зависимости от дистрибутива.
-
-
Проблемы с IP-адресами:
— Rocky Linux возможно неправильно настроен на получение IP-адреса (стационарный IP или другой DHCP сервер). Убедитесь в правильной настройке DHCP на гостевой системе:
dhclient -v <интерфейс>
-
Настройка постоянного моста:
Если вы хотите, чтобы конфигурации были постоянными, рассмотрите использование
/etc/netctl
или systemd network для управления соединениями без перезапусков ip-addr.
Дополнительные советы
-
Журналирование: Всегда следите за журналами systemctl и libvirt для выявления и устранения скрытых ошибок:
sudo journalctl -xe
-
Обновление системы: Убедитесь, что все пакеты и компоненты актуальны:
sudo pacman -Syu
-
Виртуальные сети: Если определенная виртуальная сеть не работает или нестабильна, рассмотрите возможность ее удаления и переопределения:
sudo virsh net-destroy default sudo virsh net-undefine default
Применяя эти шаги, вы должны быть в состоянии создать стабильную и надежную сеть для ваших виртуальных машин, загружаемых через QEMU и virt-manager на Arch Linux.