• DevOps
  • Защита информации
  • ИТ-поддержка
  • В данной инструкции используется железный сервер с установленной ОС Ubuntu 22.04 LTS. Главным условием для запуска KVM является наличие процессора с поддержкой аппаратной виртуализации (Vt-d+Vt-x, AMD-V). Обратите внимание, что количество ресурсов, требуемых для дальнейшей эксплуатации KVM варьируется в зависимости от задач. Для подключения по SSH будем использовать машину на Windows 10 LTSC.

    Подготовка сервера

    Ищем и применяем обновления, если такие уже появились:

    sudo apt update && sudo apt upgrade
    

    Установка и настройка ключей ssh

    Устанавливаем ssh для удалённого управления (если ещё не установлен):

    sudo apt install ssh
    

    Проверяем, запустился ли сервис:

    sudo systemctl status ssh
    

    Сервис должен быть в состоянии Active.

    Настроим безопасную аутентификацию по ключам:

    ssh keygen -t  rsa
    

    Сохраняем ключи в предлагаемую директорию, а затем разрешим подключаться по приватному ключу:

    touch ~/.ssh/authorized_keys && cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
    

    Теперь необходимо скопировать приватный ключ на машину, с которой будем подключаться, сделать это можно с помощью scp. Для этого выполним ряд действий.

    Если локальная машина на Linux, то достаточно скопировать в ключ поддиректории домашней папки пользователя

    Если локальная машина на ОС Windows, то необходимо создать отдельную папку для ключей, и дать права ТОЛЬКО на пользователя, из-под которого заходите по ssh.

    Для этого создаём папку, заходим в Свойства -> Безопасность -> Дополнительно -> Отключить наследование -> Удалить все унаследованные разрешения из этого объекта.

    Затем в этом же окне добавляем себя: Добавить” -> “Выберите субъект” -> “Дополнительно” -> ищем пользователя -> OK.

    Выбираем права полный доступ” -> OK.

    Затем в созданную папку с модифицированными копируем приватный ключ, команда выглядит так:

    scp <имя_пользователя>@<имя_хоста_или_IP>:/home/<имя_пользователя>/.ssh/id_rsa %папка_на_локальном_компьютере%\id_rsa
    

    Теперь заходим на наш сервер по приватному ключу:

    ssh <имя_пользователя>@<имя_хоста> -i <расположение-ключа>
    

    Пример:

    ssh [email protected] -i C:\Users\efsol_it\ssh_keys\id_rsa
    

    Проверяем успешна ли прошла аутентификация и в случае успеха продолжаем настраивать сервер:

    Установка виртуализации

    Устанавливаем пакеты:

    sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager libvirt-daemon virt-top libguestfs-tools libosinfo-bin qemu-system
    

    По завершению проверяем статус сервиса виртуализации:

    sudo systemctl status libvirtd
    

    Статус должен быть Active.

    Установка панели управления cockpit

    Для облегчения эксплуатации хост-машины установим панель управления cockpit:

    sudo apt install cockpit-machines
    

    Теперь нужно проверить статус сервиса cockpit:

    sudo systemctl status cockpit
    

    Дополнительно проверим работу сервиса, зайдя по адресу в браузере по ссылке: https://ip-адрес-машины:9090.

    Если всё установилось правильно, то увидим страницу авторизации.

    Также нужно убедиться, что модуль vhost_net включён и работает:

    lsmod | grep vhost
    

    Назначаем права на текущего пользователя

    Если нужно назначить права управления виртуализацией на текущего не-root пользователя, то вводим следующие команды:

    sudo usermod -aG libvirt $USER
    sudo usermod -aG kvm $USER
    

    Если нужно назначить на другого пользователя, то $USER заменяем на имя требуемого пользователя.

    Настройка сети

    Мост с именем virbr0 создается в процессе установки. Это устройство использует NAT для подключения компьютеров гостей к внешнему миру.

    brctl show
    

    Отображает все мосты, к которым подключены гостевые машины.

    При создании мостов всё управление сетью на хост-машине осуществляется в ручном режиме и изменения необходимо вносить в /etc/netplan/01-network-manager-all.yaml. В общем случае мы имеем 1 интерфейс управления и доп.интерфейсы для создания мостов и проброса сети в виртуальные машины.

    Получаем актуальный список сетевых интерфейсов в ОС, чтобы задействовать их в сетевой конфигурации:

    ip a
    

    Далее редактируем файл:

    sudo nano nano /etc/netplan/01-network-manager-all.yaml
    

    Примерное содержание:

    # Let NetworkManager manage all devices on this system
    network:
      version: 2
      renderer: networkd
      ethernets:
        enp0s3:
          dhcp4: false
          dhcp6: false
          addresses: [192.168.0.26/24]
          gateway4: 192.168.0.1
          mtu: 1500
          nameservers:
            addresses: [8.8.8.8]
        enp0s8:
          dhcp4: false
          dhcp6: false
    
      bridges:
        br0:
          interfaces: [enp0s8]
          addresses: [192.168.0.22/16]
          mtu: 1500
          nameservers:
            addresses: [8.8.4.4, 8.8.8.8]
          parameters:
            stp: true
            forward-delay: 4
          dhcp4: no
          dhcp6: no
    

    Содержимое файла указано выше, составлено на основе текущих данных системы. Сначала идет описание сетевых интерфейсов. Если интерфейс не участвует в мостовом соединении, ему необходимо прописать реквизиты в первой части. Если интерфейс задействован в мостовом соединении, то реквизиты сети задаются в параметрах моста.

    Важно! Если машина подключена к VLAN, то интерфейсом моста нужно выбрать именно vlan. В таком случае, конфигурация будет выглядеть примерно так:

    # Let NetworkManager manage all devices on this system
    network:
      version: 2
      renderer: networkd
      ethernets:
        enp0s3:
          dhcp4: false
          dhcp6: false
          addresses: [192.168.0.26/24]
          gateway4: 192.168.0.1
          mtu: 1500
          nameservers:
            addresses: [8.8.8.8]
        enp0s8:
          dhcp4: false
          dhcp6: false
    
      vlans:
        vlan252:
        id: 252
        link: enp0s8
        dhcp4: false
        dhcp6: false
    
      bridges:
        br0:
          interfaces: [vlan252]
          addresses: [10.15.252.21/24]
          routes: 
            - to: default
              via: 10.15.252.254
          nameservers:
            addresses: [8.8.4.4, 8.8.8.8]
    

    Также назначаем маршрут по умолчанию, где в параметр via вписываем адрес сетевого шлюза в vlan.

    Затем применяем настройки:

    sudo netplan generate
    sudo netplan apply
    

    Возможно кратковременное прерывание связи с сервером, так что придётся переподключиться по ssh. Теперь нужно проверить, что настройки применились:

    ip a
    

    Должен появиться новый интерфейс br0 с адресом 192.168.0.22, а у интерфейса enp0s8 адрес исчез. Значит настроено корректно. Далее необходимо сообщить службе виртуализации что она может использоваться новый сетевой интерфейс. Создаем файл host-bridge0.xml:

    <network>
      <name>host-bridge0</name>
      <forward mode="bridge"/>
      <bridge name="br0"/>
    </network>
    

    Применяем настройки. Определяем интерфейс:

    virsh net-define host-bridge0.xml
    

    Запускаем:

    virsh net-start host-bridge0
    

    Настраиваем автозапуск:

    virsh net-autostart host-bridge0
    

    Создание ВМ

    Скачиваем .iso-файл нужной ОС и размещаем его в директории с общими правами доступа для всех:

    sudo chmod 777 -R /vm/images
    sudo chmod 777 /vm/images/ubuntu2204.iso
    

    Далее создаём виртуальную машину. Команда на создание ВМ будет выглядеть примерно так:

    virt-install \
    --virt-type=kvm \
    --name ubuntu22.04 \
    --ram 2048 \
    --vcpus=2 \
    --os-variant=ubuntu22.04 \
    --hvm \
    --cdrom /vm/images/ubuntu2204.iso \
    --network=bridge:br0,model=virtio \
    --graphics vnc,listen=0.0.0.0 \
    --disk path=/var/lib/libvirt/images/ubuntu2204.qcow2,size=10,bus=virtio,format=qcow2
    

    Расшифровка основных параметров:

    • virt-type - тип виртуализации, в нашем случае kvm;
    • name - имя новой машины;
    • ram - количество памяти в мегабайтах;
    • vcpus - количество ядер процессора;
    • os-variant - тип операционной системы;
    • cdrom - установочный образ системы;
    • network-bridge - сетевой мост, который мы настроили ранее;
    • graphics - способ получения доступа к графическому интерфейсу;
    • diskpath - адрес нового жесткого диска для этой виртуальной машины.

    Если все параметры указаны корректно, то установка продолжится в окне клиента VNC, либо же можно подключиться через панель управления cockpit.

    Установка VM с ОС Windows 10

    У Windows нет OOB-поддержки виртуальных дисков qcow2, создаваемых kvm, поэтому необходимо установить драйвера virtio, скачать iso-образ.

    Чтобы подключить с диск с драйверами, в команду необходимо добавить ещё один параметр --disk:

    virt-install \
    --virt-type=kvm \
    --name windows10 \
    --ram 4096 \
    --vcpus=4 \
    --os-variant=win10 \
    --hvm \
    --cdrom /vm/images/windows10.iso \
    --network=bridge:br0,model=virtio \
    --graphics vnc,listen=0.0.0.0 \
    --disk path=/var/lib/libvirt/images/windows10.qcow2,size=30,bus=virtio,format=qcow2
    --disk /vm/images/virtio-win.iso,device=cdrom,bus=sata --boot cdrom
    

    В процессе установки Windows предложит поискать драйвера в расположении, которое потребуется указать.

    Настройку и обслуживание KVM мы можем взять на себя. Оставьте заявку или напишите в чат!


    Не нашли ответа на свой вопрос?
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных