Гайд по развёртыванию и настройке стека виртуализации QEMU + KVM + libvirt в Astra Linux
Подробный технический гайд по развёртыванию и настройке стека виртуализации QEMU + KVM + libvirt в Astra Linux. Материал изложен в строгом формате без декоративных элементов, с учётом особенностей редакций Common Edition (CE) и Special Edition (SE).
Шаг 0. Предварительные проверки
1. Проверка поддержки аппаратной виртуализации:
egrep -c '(vmx|svm)' /proc/cpuinfo
Значение больше 0 указывает на поддержку. Если результат 0 — необходимо включить Intel VT-x или AMD-V в настройках BIOS/UEFI.
2. Установка утилит проверки:
sudo apt update
sudo apt install cpu-checker
kvm-ok
Ожидаемый результат: сообщение "INFO: /dev/kvm exists" и "KVM acceleration can be used".
Шаг 1. Установка пакетов
Astra Linux базируется на Debian, поэтому используется штатный менеджер пакетов:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients \
bridge-utils virt-manager virtinst cpu-checker \
dnsmasq-base ovmf swtpm
Назначение ключевых пакетов:
- ovmf — поддержка UEFI-загрузки гостевых систем
- swtpm — эмуляция TPM 2.0 (требуется для Windows 11 и современных дистрибутивов)
- virt-manager — графический интерфейс управления (опционально)
Шаг 2. Активация служб и проверка модулей ядра
Запуск и включение автозагрузки libvirtd:
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
Проверка загрузки модулей ядра:
lsmod | grep kvm
Должны отображаться модули: kvm, kvm_intel (для процессоров Intel) или kvm_amd (для AMD).
При отсутствии модулей загрузите их вручную:
sudo modprobe kvm
sudo modprobe kvm_intel # или kvm_amd
Шаг 3. Настройка прав доступа
Добавление текущего пользователя в группы libvirt и kvm:
sudo usermod -aG libvirt,kvm $USER
Важно: изменения вступят в силу только после полного выхода из сессии и повторного входа в систему. Альтернативно можно использовать команду newgrp libvirt без перезахода.
Проверка прав:
virsh list --all
Команда должна вернуть пустой список виртуальных машин без ошибок доступа.
Шаг 4. Настройка сети
Вариант А: NAT (по умолчанию, рекомендуется для рабочих станций)
Libvirt автоматически создаёт виртуальную сеть default. Проверка и активация:
virsh net-list --all
virsh net-start default
virsh net-autostart default
Гостевые ВМ получат адреса из диапазона 192.168.122.0/24. Доступ из внешней сети ограничен механизмом NAT.
Вариант Б: Bridge (рекомендуется для серверов и прямого доступа)
Настройка моста через NetworkManager (предпочтительнее ручного редактирования конфигурационных файлов):
1. Определение имени физического интерфейса:
nmcli device status
2. Создание bridge-интерфейса:
sudo nmcli connection add type bridge con-name br0 ifname br0
3. Добавление физического интерфейса в мост:
sudo nmcli connection add type bridge-slave con-name br0-slave \
ifname <имя_физического_интерфейса> master br0
4. Настройка IP-адресации:
# DHCP
sudo nmcli connection modify br0 ipv4.method auto
# Статический адрес (пример)
sudo nmcli connection modify br0 ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 ipv4.method manual
5. Активация моста:
sudo nmcli connection up br0
6. Регистрация моста в libvirt:
virsh net-define /dev/stdin <<EOF
<network>
<name>br0-net</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
EOF
virsh net-start br0-net
virsh net-autostart br0-net
Шаг 5. Создание виртуальной машины
Через графический интерфейс (virt-manager)
- Запуск:
virt-manager - Файл -> Создать ВМ -> Локальный установочный носитель (указать путь к ISO)
- Выделение ресурсов (CPU, RAM), выбор сетевого интерфейса
- Для современных ОС рекомендуется опция "Customize configuration before install" с выбором Firmware: UEFI x86_64
Через командную строку (virt-install)
Пример создания ВМ с Ubuntu 22.04:
virt-install \
--name ubuntu-test \
--vcpus 2 \
--memory 4096 \
--os-variant ubuntu22.04 \
--cdrom /path/to/ubuntu-22.04-live-server-amd64.iso \
--network network=default \
--disk path=/var/lib/libvirt/images/ubuntu-test.qcow2,size=30,format=qcow2 \
--graphics vnc,listen=0.0.0.0,port=5900 \
--noautoconsole
Основные команды управления:
virsh start ubuntu-test # запуск
virsh console ubuntu-test # подключение к консоли (требует настройки serial в гостевой ОС)
virsh shutdown ubuntu-test # корректное завершение работы
virsh destroy ubuntu-test # принудительное выключение
virsh undefine ubuntu-test --remove-all-storage # удаление ВМ и дисков
Шаг 6. Особенности Astra Linux Special Edition (SE)
В редакции SE активен мандатный контроль доступа (Parsec/PDP), который может ограничивать создание сетевых мостов, доступ к /dev/kvm или запуск служб виртуализации.
Рекомендации по настройке:
1. Уровни целостности и конфиденциальности:
pdp-user -m user # перевод пользователя в немаркированный режим (для тестирования)
chpdpl -l low # понижение уровня доступа (требует соответствующих полномочий)
2. Разрешение модулей ядра:
- В SE может действовать контроль загрузки модулей. Убедитесь, что модули kvm, kvm_intel/amd, vhost_net разрешены в активной политике безопасности.
3. Использование сертифицированных компонентов:
- Для промышленных внедрений используйте только пакеты из официальных репозиториев astra-se и руководствуйтесь документацией "Виртуализация в Astra Linux SE", доступной через личный кабинет технической поддержки.
4. Временное отключение мандатного контроля (только для изолированных тестовых сред):
sudo fly-admin-mac-level --disable
После завершения настройки рекомендуется восстановить исходный режим защиты.
Шаг 7. Диагностика и устранение типовых проблем
| Проблема | Решение |
|---|---|
| Permission denied при доступе к /dev/kvm | Добавить пользователя в группу kvm: sudo usermod -aG kvm $USER, выполнить перелогин |
| network 'default' not found | Активировать сеть: virsh net-start default && virsh net-autostart default |
| ВМ не запускается, ошибка "KVM disabled by BIOS" | Включить виртуализацию в BIOS/UEFI, проверить результат через kvm-ok |
| Ошибка "Could not open '/dev/vhost-net'" | Загрузить модуль: sudo modprobe vhost_net, проверить членство в группе kvm |
| libvirtd не запускается в SE | Изучить логи: journalctl -u libvirtd -e, сверить настройки с политиками PDP |
| VNC недоступен извне | По умолчанию VNC слушает 127.0.0.1. Используйте параметр listen=0.0.0.0 и настройте правила файрвола или SSH-туннель |
Полезные команды для диагностики:
virsh dominfo <имя_вм>
virsh edit <имя_вм> # редактирование XML-конфигурации
virsh snapshot-create-as <имя_вм> snap1
journalctl -u libvirtd -f
dmesg | grep -iE 'kvm|libvirt'
Рекомендации по безопасности и эксплуатации
- Не публикуйте интерфейсы VNC/SPICE в открытый доступ без шифрования. Используйте virt-viewer или SSH-туннели для безопасного подключения.
- Регулярно обновляйте систему:
sudo apt update && sudo apt upgrade - Для производственных сред используйте формат дисков qcow2 с поддержкой снапшотов. При необходимости применяйте шифрование:
qemu-img convert -f qcow2 -O qcow2 --encrypt ... - В Astra Linux SE все изменения, связанные с виртуализацией, должны согласовываться с ответственными за информационную безопасность.