Libvirt (Qemu+KVM+Virt-manager): различия между версиями

Материал из ALT Linux Wiki
м (→‎Сеть: Проброс портов)
Строка 118: Строка 118:


Настроил тут проброс порта в QEMU-виртуалку. Казалось бы, в чём проблема-то?  
Настроил тут проброс порта в QEMU-виртуалку. Казалось бы, в чём проблема-то?  
   qemu -netdev user,id=user0,hostfwd=tcp::2222-:22 -device e1000,netdev=user0" …
   cmd|qemu -netdev user,id=user0,hostfwd=tcp::2222-:22 -device e1000,netdev=user0" …
как-то так (можно вместо e1000 паравиртуальный драйвер, это побыстрее будет).
как-то так (можно вместо e1000 паравиртуальный драйвер, это побыстрее будет).


Но. Я это сделал через libvirt! И оказалось, что штатными средствами (не только тыкая в менюшки virt-manager, но  и, кажется, вообще прямой настройкой сети) нельзя. Не знаю, почему. Может быть, можно, но я не нашёл как. А я искал. То, что в libvirt называется NAT, в действительности садится на tun/tap, лезет в iptables и т. д. Наверное, для совместимости с другими платформами виртуализации, не знаю.
Но. Я это сделал через libvirt! И оказалось, что штатными средствами (не только тыкая в менюшки virt-manager, но  и, кажется, вообще прямой настройкой сети) нельзя. Не знаю, почему. Может быть, можно, но я не нашёл как. А я искал. То, что в libvirt называется NAT, в действительности садится на tun/tap, лезет в {{cmd|iptables}} и т. д. Наверное, для совместимости с другими платформами виртуализации, не знаю.


Короче. Удаляем все сетевые устройства. Добавляем в конец общего XML-я виртуалки такие строки:
Короче. Удаляем все сетевые устройства. Добавляем в конец общего XML-я виртуалки такие строки:
Строка 130: Строка 130:
     <qemu:arg value="e1000,netdev=user0"/>
     <qemu:arg value="e1000,netdev=user0"/>
   </qemu:commandline>
   </qemu:commandline>
(если неймспейс qemu не загружен, то такие:
Если неймспейс qemu не загружен, то такие:
   <commandline xmlns="http://libvirt.org/schemas/domain/qemu/1.0">
   <commandline xmlns="http://libvirt.org/schemas/domain/qemu/1.0">
     <arg value='-netdev'/>
     <arg value='-netdev'/>
… (то же самое)
    … (то же самое)
   </commandline>
   </commandline>
)
 
И qemu преспокойненько само всё как надо делает. Фишка — не забыть про  
И qemu преспокойненько само всё как надо делает. Фишка — не забыть про <code>xmlns</code>
  xmlns
иначе просто не заработает, а вам ничего не скажет)
иначе просто не заработает, а вам ничего не скажет)



Версия от 14:29, 10 июля 2021

Libvirt - набор инструментов для управления виртуализацией. В данной статье будет описано его использование.

Ставим пакет:

# apt-get install libvirt

Добавляем пользователя в группу:

# gpasswd -a user vmusers

Запуск службы

# systemctl enable libvirtd
# systemctl start libvirtd

Делаем пользователю доступ в SSH (для удаленного управления)

На сервере переключаемся в режим суперпользователя:

su-

И правим следующий файл:

# cd /etc/openssh
# mcedit sshd_config

Добавляем:

Match User petr #имя вашего пользователя на сервере
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp
ChrootDirectory /home/files #корневой каталог при доступе через SSH

После настройки на сервере SSH для доступа к файлам, на клиенте заработает и SSH для libvirt-manager для подключения к libvirt.

Кроме того разрешаем в брандмауэре: Alterator Web-Брадмауэр-Внешние сети-Дополнительные порты TCP/UDP-Добавляем порт 5900

Графическое управление

Чтобы сделать некое подобие "Диспетчера Hyper-V" (Графическую консоль для управления виртуальными машинами) устанавливаем следующий пакет:

# apt-get install virt-manager

Открываем Virt-Manager. Файл>Добавить соединение>

  • Локальная машина
    • Гипервизор QEMU/KVM (подключаться автоматически).
  • Удаленный сервер
    • QEMU/KVM-Connect to remove host over SSH
      • вводим имя пользователя
      • вводим IP
      • ставим галочку подключаться автоматически

Создание виртуальной машины

  1. Нажимаем на кнопку "Создать виртуальную машину"
  2. Выбираем метод установки - локальный/ISO
  3. Выбираем ISO/CD и тип ОС (с помощью автодополнения)
  4. Выбираем количество ОЗУ и процессоров
  5. Создаем виртуальный жесткий диск
  6. Вводим название и выбираем сеть

BIOS или UEFI

До первого запуска откройте настройки виртуальной машины, во вкладке Обзор> Свойства гипервизора у вас будет возможность сменить тип прошивки - BIOS или UEFI. До первого запуска![1]

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

Выберите машину, нажмите на лампу...

Настройка дисплея через SSH

  • Дисплей:
    • тип:VNC
    • listen type:address
    • адрес:IP
    • порт:авто
    • пароль:пользователя в группе

Настройка жесткого диска

...Диск-1> Дополнительные параметры>Шина диска

Тип диска:

  • IDE - рекомендуется для Windows XP и младше
  • SATA - для 7 и старше
  • VirtIO для Linux [2]

Параметры загрузки

  • Включить меню загрузки> ставите очередность.

Иначе вы просто не загрузитесь с CD/ISO.

  • запускать при старте системы

Подключение ISO

...Выберите IDE CDROM> Browse.

В окне "Выберите том хранилища" нажмите на плюс (добавить пул), выберите тип dir-каталог в файловой системе и укажите папку с iso-образами.

Выберите образ из пула и нажмите на кнопку "Выбор тома".

Примечание: В качестве каталога можно указать папку прописанную в /etc/openssh - так вы легко сможете закидывать и подключать ISO-образы


Сеть

NAT

NAT — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса одной сети, в адрес другой сети.

Т.е. у вас в локальной сети сеть 192.168.0.x., а у виртуальных машин будет 192.168.1.x. И NAT позволит вам общатся между сетью 0.x и 1.x.

По-умолчанию в virt-manager уже есть NAT-интерфейс, но если вы его случайно удалили или хотите создать новый, то это делается так:

  • откройте Правка>Свойства подключения>Виртуальные сети>+
  • введите название сети
  • режим: NAT
  • Forward to: любое физическое устройство

Можете так же настроить адресацию IPv4 и DHCP-сервер (они настраиваются автоматически).

И в настройках виртуальной машины выберите данный интерфейс.

Мост

Чтобы напрямую общаться между реальной сетью и виртуальными машинами напрямую нужно создать сетевой мост.

Данный способ является наиболее правильным. Проще всего его сделать через alterator-net-bridge.

Например, br0, затем в настройках ВМ указать именно его.

//Как? Расписать...

Примечание: При этом управление сетью перейдет к etcnet и NetworkManager уже будет не нужен, его и его апплет можно удалить: apt-get remove NetworkManager NetworkManager-applet-gtk. В трее, соответственно, иконка статуса сети исчезнет.
Проброс портов

Из переписки:

Настроил тут проброс порта в QEMU-виртуалку. Казалось бы, в чём проблема-то?

 cmd|qemu -netdev user,id=user0,hostfwd=tcp::2222-:22 -device e1000,netdev=user0" …

как-то так (можно вместо e1000 паравиртуальный драйвер, это побыстрее будет).

Но. Я это сделал через libvirt! И оказалось, что штатными средствами (не только тыкая в менюшки virt-manager, но и, кажется, вообще прямой настройкой сети) нельзя. Не знаю, почему. Может быть, можно, но я не нашёл как. А я искал. То, что в libvirt называется NAT, в действительности садится на tun/tap, лезет в iptables и т. д. Наверное, для совместимости с другими платформами виртуализации, не знаю.

Короче. Удаляем все сетевые устройства. Добавляем в конец общего XML-я виртуалки такие строки:

 <qemu:commandline>
   <qemu:arg value="-netdev"/>
   <qemu:arg value="user,id=user0,hostfwd=tcp::2222-:22"/>
   <qemu:arg value="-device"/>
   <qemu:arg value="e1000,netdev=user0"/>
 </qemu:commandline>

Если неймспейс qemu не загружен, то такие:

 <commandline xmlns="http://libvirt.org/schemas/domain/qemu/1.0">
   <arg value='-netdev'/>
   … (то же самое)
 </commandline>

И qemu преспокойненько само всё как надо делает. Фишка — не забыть про xmlns иначе просто не заработает, а вам ничего не скажет)

Графики

Откройте "Правка> Параметры", вкладка "Статистика", отметьте галочками, какие графики вы хотите сделать доступными.

Вкл./выкл. график вы можете через "Вид> График".

Снимки машины

Снимок машины можно создать только если виртуальный жесткий диск у вас в формате *.qcow2.

Файлы Virt

(Для резервного копирования-восстановления)

Файлы Libvirt хранятся в следующих директориях:

  • /var/lib/libvirt
  • /etc/libvirt