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

Обновлено: 02.07.2024

В этой главе представлено введение в общие сетевые конфигурации, используемые гостевыми виртуальными машинами на основе libvirt.

Вы должны включить NAT, сетевой мост или напрямую назначить устройство PCI, чтобы разрешить внешним хостам доступ к сетевым службам на гостевых виртуальных машинах.

6.1. Преобразование сетевых адресов (NAT) с помощью libvirt

Один из наиболее распространенных способов совместного использования сетевых подключений — использование переадресации преобразования сетевых адресов (NAT) (также известной как виртуальные сети).

Каждая стандартная установка libvirt обеспечивает подключение к виртуальным машинам на основе NAT в качестве виртуальной сети по умолчанию. Убедитесь, что он доступен, с помощью команды virsh net-list --all.

Если он отсутствует, в файле конфигурации XML (например, /etc/libvirtd/qemu/myguest.xml) для гостя можно использовать следующее:

После запуска сети libvirt по умолчанию вы увидите изолированное устройство-мост. К этому устройству нет добавленных физических интерфейсов. Новое устройство использует NAT и IP-переадресацию для подключения к физической сети. Не добавляйте новые интерфейсы.

libvirt добавляет правила iptables, которые разрешают трафик между гостевыми виртуальными машинами, подключенными к устройству virbr0, в цепочках INPUT, FORWARD, OUTPUT и POSTROUTING. Затем libvirt пытается включить параметр ip_forward. Некоторые другие приложения могут отключать ip_forward , поэтому лучше всего добавить следующее в /etc/sysctl.conf .

После завершения настройки хоста гостевая виртуальная машина может быть подключена к виртуальной сети на основе ее имени. Чтобы подключить гостя к виртуальной сети «по умолчанию», в файле конфигурации XML (например, /etc/libvirtd/qemu/myguest.xml) для гостя можно использовать следующее:

Примечание

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

На этой странице представлено введение в общие сетевые конфигурации, используемые приложениями на основе libvirt. Эта информация относится ко всем гипервизорам, будь то Xen, KVM или другой.

Двумя распространенными настройками являются "виртуальная сеть" или "общее физическое устройство". Первый идентичен во всех дистрибутивах и доступен «из коробки». Последний требует ручной настройки конкретного дистрибутива.

Содержание

Переадресация NAT (также известная как «виртуальные сети»)

Конфигурация хоста

Каждая стандартная установка libvirt по умолчанию обеспечивает подключение к виртуальным машинам на основе NAT. Это так называемая «виртуальная сеть по умолчанию». Вы можете убедиться, что он доступен с

Если он отсутствует, пример конфигурации XML можно перезагрузить и активировать

Когда сеть libvirt по умолчанию работает, вы увидите изолированное устройство-мост. Это устройство явно * НЕ * имеет добавленных физических интерфейсов, поскольку оно использует NAT + переадресацию для подключения к внешнему миру. Не добавлять интерфейсы

Libvirt добавит правила iptables, чтобы разрешить трафик к/от гостей, подключенных к устройству virbr0, в цепочках INPUT, FORWARD, OUTPUT и POSTROUTING. Он также попытается включить ip_forward. Некоторые другие приложения могут отключить его, поэтому лучше всего добавить следующее в /etc/sysctl.conf

Если вы уже используете dnsmasq на своем компьютере, см. libvirtd и dnsmasq.

Гостевая конфигурация

После завершения настройки хоста гость может быть подключен к виртуальной сети на основе сетевого имени. Например. чтобы подключить гостя к виртуальной сети «по умолчанию», вам необходимо отредактировать файл конфигурации домена для этого гостя:

где имя или uuid гостя. Добавьте следующий фрагмент XML в файл конфигурации:

Примечание. MAC-адрес является необязательным и будет создан автоматически, если его не указать.

Применение изменений к сети

Иногда необходимо отредактировать определение сети и применить изменения на лету. Наиболее распространенным сценарием для этого является добавление новых статических сопоставлений MAC+IP для DHCP-сервера сети. Если вы редактируете сеть с помощью «virsh net-edit», любые сделанные вами изменения не вступят в силу до тех пор, пока сеть не будет уничтожена и перезапущена, что, к сожалению, приведет к тому, что все гости потеряют сетевое соединение с хостом, пока их сетевые интерфейсы явно переподключены (что делается автоматически как побочный эффект перезапуска службы libvirtd).

virsh net-update

К счастью, многие изменения в конфигурации сети (включая вышеупомянутое добавление статического сопоставления MAC-адресов и IP-адресов для DHCP) можно выполнить с помощью «virsh net-update», которому можно приказать немедленно применить изменения.Например, чтобы добавить запись статического хоста DHCP в сеть с именем «по умолчанию», сопоставляющую MAC-адрес 53:54:00:00:01 с IP-адресом 192.168.122.45 и именем хоста «bob», вы можете использовать эту команду:

Наряду с подкомандой «добавить» в virsh net-update также есть подкоманда «удалить», а также «изменить» (для некоторых элементов), «добавить первым» и «добавить последним».< /p>

В каждом случае последним аргументом в командной строке (кроме "--live --config") должен быть раздел XML, который вы хотите добавить, изменить или удалить. Например, правильный XML для «virsh net-update default add forward-interface» будет выглядеть примерно так: «» (обратите внимание на осторожное использование кавычек — из-за того, что XML содержит пробелы и символы перенаправления оболочки, вы должны заключать в кавычки все Фрагмент XML, но это означает, что любые кавычки в XML должны быть либо одинарными, либо экранироваться обратной косой чертой.)

Произвольные изменения в сети

Хотя наиболее распространенные случаи изменения конфигурации сети могут быть обработаны с помощью "virsh net-update", есть некоторые части конфигурации, которые нельзя изменить таким образом, и в этих случаях у вас останутся все запущенные гости отключаются от сети после ее перезапуска. Это можно исправить, перезапустив службу libvirtd, которая во время инициализации проверяет, подключены ли все гостевые устройства к соответствующим мостам.

Переадресация входящих подключений

По умолчанию гости, подключенные через виртуальную сеть, могут устанавливать любые исходящие сетевые подключения. Входящие соединения разрешены с хоста и других гостей, подключенных к той же сети libvirt, но все остальные входящие соединения блокируются правилами iptables.

Если вы хотите сделать общедоступной службу, которая находится в гостевой системе за виртуальной сетью с NAT, вы можете настроить скрипт libvirt «hook» для qemu, чтобы установить необходимые правила iptables для переадресации входящих подключений к хосту на любом заданном порт HP на порт GP на гостевой GNAME:

1) Определите а) имя гостя "G" (как определено в XML домена libvirt), б) IP-адрес гостя "I", в) порт гостя, который будет получать соединения "GP" и d) порт на хосте, который будет перенаправлен на гостевую "HP".

(Чтобы убедиться, что IP-адрес гостя остается неизменным, вы можете либо настроить гостевую ОС со статической информацией об IP-адресе, либо добавить элемент внутри элемента сети, который используется вашим гостем. См. адрес XML-документации libvirt network раздел с дефейлами и примером.)

2) Остановить гостевую систему, если она запущена.

3) Создайте файл /etc/libvirt/hooks/qemu (или добавьте следующее в уже существующий скрипт ловушки) с содержимым, подобным следующему (замените GNAME, IP, GP и HP в соответствии с вашей настройкой) :

Используйте приведенный ниже базовый скрипт или посмотрите «расширенную» версию, которая может работать с несколькими разными машинами и сопоставлениями портов, здесь (улучшения приветствуются), или вот скрипт python, который делает то же самое и прост в понимании и настройке (улучшения приветствуются):

4) chmod +x /etc/libvirt/hooks/qemu

5) Перезапустите службу libvirtd.

6) Запустите гостевую систему.

(NB: этот метод является хаком и имеет один досадный недостаток в версиях libvirt до 0.9.13 — если libvirtd перезапускается во время работы гостя, все стандартные правила iptables для поддержки виртуальных сетей, которые были добавлены by libvirtd будет перезагружен, тем самым изменив порядок вышеприведенного правила FORWARD относительно правила отклонения для сети, что делает эту настройку неработающей до тех пор, пока гость не будет остановлен и перезапущен.Благодаря новому хуку «reconnect» в libvirt- 0.9.13 и новее (который используется приведенным выше скриптом, если он доступен), этот недостаток отсутствует в более новых версиях libvirt (однако этот скрипт-ловушку все равно следует считать взломом).

Мостовая сеть (также известная как "общее физическое устройство")

Конфигурация хоста

Подключение на основе NAT полезно для быстрого и простого развертывания или на компьютерах с динамическим/спорадическим сетевым подключением. Более продвинутые пользователи захотят использовать полный мост, когда гость подключается напрямую к локальной сети. Инструкции по настройке зависят от дистрибутива и даже от выпуска.

Важное примечание. К сожалению, беспроводные интерфейсы нельзя подключить к хост-мосту Linux, поэтому, если ваше подключение к внешней сети осуществляется через беспроводной интерфейс ("wlanX"), вы не сможете использовать этот режим сети для ваши гости.

Важное примечание. Если после попытки использовать интерфейс моста вы обнаружите, что ваше сетевое соединение перестало работать и больше отказывается работать, это может быть связано с тем, что вышестоящий маршрутизатор/коммутатор блокирует «неавторизованные коммутаторы» в сети (например, , путем обнаружения пакетов BPDU). Вам придется изменить его конфигурацию, чтобы явно разрешить хост-компьютер/сетевой порт в качестве «коммутатора».

Соединение Fedora и RHEL

Здесь описано, как настроить briding с помощью стандартных сетевых скриптов инициализации и systemctl.

Непосредственное использование NetworkManager

Если ваш дистрибутив был выпущен через некоторое время после 2015 года и использует NetworkManager, скорее всего, он изначально поддерживает мостовое соединение. См. эти инструкции по созданию моста непосредственно с помощью NetworkManager:

Отключение NetworkManager (для старых дистрибутивов)

Если ваш дистрибутив был выпущен до 2015 года, версия NetworkManager, скорее всего, не поддерживает создание моста, поэтому необходимо использовать «классические» сценарии инициализации сети для моста и явно пометить их как независимые от NetworkManager («NM_CONTROLLED=no " строк в скриптах ниже).

При желании вы также можете полностью отключить NetworkManager:

Создание сценариев инициализации сети

В каталоге /etc/sysconfig/network-scripts необходимо создать 2 файла конфигурации. Первый (ifcfg-eth0) определяет ваш физический сетевой интерфейс и говорит, что он будет частью моста:

Очевидно, измените HWADDR, чтобы он соответствовал реальному адресу сетевой карты. Вы также можете настроить здесь MTU устройства, используя, например, MTU=9000.

Второй файл конфигурации (ifcfg-br0) определяет устройство моста:

ВНИМАНИЕ! Строка TYPE=Bridge чувствительна к регистру — в ней должна быть заглавная буква "B" и строчная буква "ridge"

После этого изменения перезапустите сеть (или просто перезагрузите компьютер)

Последний шаг — отключить сетевой фильтр на мосту:

Теперь у вас должно быть "общее физическое устройство", к которому могут быть подключены гости и которые имеют полный доступ к локальной сети

Обратите внимание, что этот мост полностью независим от virbr0. *НЕ* пытайтесь подключить физическое устройство к «virbr0» — это только для подключения через NAT

Соединение Debian/Ubuntu

Гостевая конфигурация

Чтобы разрешить вашим виртуальным машинам использовать этот мост, их конфигурация должна включать определение интерфейса, как описано в разделе Мост в локальную сеть. По сути, вы указываете имя моста для подключения. Предполагая общее физическое устройство, где мост называется "br0", будет использоваться следующий гостевой XML:

Обратите внимание: MAC-адрес является необязательным и будет создан автоматически, если его не указать.

Чтобы изменить конфигурацию виртуальной машины, используйте:

Дополнительную информацию см. в разделе часто задаваемых вопросов по адресу:

Прохождение PCI хост-сетевых устройств

Возможно напрямую назначить сетевое PCI-устройство хоста гостю. Одним из предварительных условий для выполнения этого назначения является то, что хост должен поддерживать расширения Intel VT-d или AMD IOMMU. Существует два метода настройки назначения PCI-устройства гостю:

Назначение

Это традиционный метод назначения гостю любого универсального устройства PCI. Это подробно описано в следующем руководстве:

Назначение с помощью (только для устройств SRIOV)

Сетевые карты SRIOV предоставляют несколько «виртуальных функций» (VF), каждая из которых может быть индивидуально назначена гостю с помощью назначения устройств PCI, и каждая из них будет вести себя как полноценное физическое сетевое устройство. Это позволяет многим гостям получить преимущество в производительности за счет прямого назначения устройств PCI, используя только один слот на физическом компьютере.

Эти VF могут быть назначены гостям традиционным способом с помощью , однако этот метод оказывается проблематичным, поскольку (в отличие от обычных сетевых устройств) сетевые устройства SRIOV VF не имеют постоянных уникальных MAC-адресов, а вместо этого получают новый и другой случайный MAC-адрес каждый раз при перезагрузке ОС хоста. В результате, даже если гостю каждый раз назначается один и тот же VF, каждый раз при перезагрузке хоста гость будет видеть, что его сетевой адаптер имеет новый MAC-адрес, что приведет к тому, что гость будет полагать, что подключено новое оборудование. требуется повторная настройка сетевых параметров гостя.

Хост может установить MAC-адрес перед назначением VF гостю, но в настройках это не предусмотрено (поскольку это универсальное устройство PCI, оно ничего не знает о функциях, специфичных для конкретных элементов). как MAC-адрес). Чтобы решить эту проблему, в libvirt-0.9.10 добавлен новый (задокументированный здесь). Этот новый тип интерфейсного устройства ведет себя как гибрид a и a - libvirt сначала выполнит любую указанную инициализацию оборудования/коммутатора для конкретной сети (например, установку MAC-адреса и/или связывание с коммутатором 802.1Qbh), а затем выполнит Назначение устройства PCI гостю.

Чтобы использовать , у вас должна быть сетевая карта с поддержкой SRIOV, аппаратное обеспечение хоста, поддерживающее расширения Intel VT-d или AMD IOMMU, и вы должны узнать адрес PCI VF, который вы хотите назначить (см. этот документ для получения инструкций о том, как это сделать).

После того, как вы проверили/узнали приведенную выше информацию, вы можете отредактировать конфигурацию гостевого домена, чтобы иметь запись устройства, подобную следующей:

(Обратите внимание: если вы не укажете MAC-адрес, он будет сгенерирован автоматически, как и для любого другого типа интерфейсного устройства.Кроме того, этот элемент используется только в том случае, если вы подключаетесь к аппаратному коммутатору 802.11Qgh (коммутаторы 802.11Qbg (также известные как «VEPA») в настоящее время не поддерживаются в этом режиме)).

При запуске гостя он должен увидеть сетевое устройство того типа, который предоставляется физическим адаптером, с настроенным MAC-адресом. Этот MAC-адрес останется неизменным при перезагрузке гостевой системы и хоста.

Назначение из пула SRIOV VFs в определении libvirt

Жесткое кодирование адреса PCI конкретного VF в гостевой конфигурации имеет два серьезных ограничения:

1) Указанный VF должен быть доступен в любое время при запуске гостевой системы, что означает, что администратор должен постоянно назначать каждую VF одному гостю (или изменять конфигурацию гостя, чтобы указывать неиспользуемый в настоящее время адрес PCI VF каждый раз при запуске). гость запущен).

2) Если гость перемещается на другой хост, этот хост должен иметь точно такое же оборудование в том же месте на шине PCI (или, опять же, конфигурация гостя должна быть изменена перед запуском).

Начиная с libvirt 0.10.0, можно избежать обеих этих проблем, создав сеть libvirt с пулом устройств, содержащим все VF устройства SR-IOV, а затем настроив гостевую систему для ссылки на эту сеть; при каждом запуске гостя из пула будет выделяться один VF и назначаться гостю; когда гость остановлен, VF будет возвращен в пул для использования другим гостем.

Ниже приведен пример определения сети, которое сделает доступным пул всех VF для адаптера SR-IOV с его PF (физической функцией) на "eth3" на хосте:

Чтобы использовать эту сеть, поместите приведенный выше текст, например, в /tmp/passthrough.xml (заменив "eth3" на имя сетевого разработчика PF вашего собственного устройства SR-IOV), затем выполните следующие команды:

Хотя показано только одно устройство, libvirt автоматически создаст список всех VF, связанных с этим PF, при первом запуске гостевой системы с определением интерфейса, подобным следующему:

Вы можете убедиться в этом, запустив "virsh net-dumpxml passthrough" после запуска первого гостя, использующего сеть; вы получите вывод, подобный следующему:

Если вы запутались, руководство libvirt Networking Handbook дает хороший обзор.

В конфигурации по умолчанию гостевая операционная система будет иметь доступ к сетевым службам, но не будет видна другим компьютерам в сети. Гость сможет, например, просматривать веб-страницы, но не сможет размещать доступный веб-сервер.

По умолчанию гостевая ОС получает IP-адрес в адресном пространстве 192.168.122.0/24, а основная ОС — 192.168.122.1.

У вас должна быть возможность подключиться по ssh к основной ОС (по адресу 192.168.122.1) из гостевой ОС и использовать scp для копирования файлов туда и обратно.

Если эта конфигурация подходит для ваших целей, другие настройки не требуются.

Если у ваших гостей нет возможности подключения "из коробки", см. раздел "Устранение неполадок" ниже.

Мостовая сеть позволяет виртуальным интерфейсам подключаться к внешней сети через физический интерфейс, благодаря чему они выглядят как обычные узлы для остальной части сети.

Предупреждение. Сетевой мост не будет работать, если физическое сетевое устройство (например, eth1, ath0), используемое для моста, является беспроводным устройством (например, ipw3945), поскольку большинство драйверов беспроводных устройств не поддерживают мост!

Создание сетевого моста на хосте

Вы можете настроить свою систему на загрузку через мост. Это работает хорошо, но отключает диспетчер сети, поэтому может не подходить для настольных компьютеров. Вы также можете создать мост по требованию. Это позволяет сетевому менеджеру остаться, но вы должны не забыть запустить мост перед запуском виртуальных машин, которые его используют. (автозапускаемые виртуальные машины не могут использовать это)

Создание моста по требованию

Создание постоянного моста

Установите пакет bridge-utils:

Мы собираемся изменить конфигурацию сети. Это предполагает, что вы не используете NetworkManager для управления вашими сетевыми картами (в примере это eth0). Если вы используете NetworkManager и хотите продолжать это делать, не используйте этот метод. Изменение /etc/network/interfaces отключит Network Manager при следующей перезагрузке.

Если вы используете удаленное подключение и поэтому не можете остановить работу сети, выполните следующие команды и используйте sudo invoke-rc.d networking restart или sudo reboot в конце. Однако, если вы сделаете ошибку, она не вернется.

Чтобы настроить интерфейс моста, отредактируйте /etc/network/interfaces и либо прокомментируйте, либо замените существующую конфигурацию (замените значениями для вашей сети):

Примечание: строки auto eth0 и iface eth0 inet manual отсутствуют в файле. Это связано с тем, что br0 вызовет назначенные ему компоненты.

bridge_stp off – это параметр связующего дерева.Если у вас есть возможность просмотра сети, вы можете включить ее.

bridge_fd 0 отключает все задержки пересылки. Если вы не знаете, что это такое, возможно, вам это не нужно.

bridge_maxwait 0 – это время, в течение которого система будет ожидать включения портов Ethernet. Ноль не ждет.

Это создаст виртуальный интерфейс br0. У вас может быть несколько мостов, и некоторым из них не нужно назначать сетевые карты.

Теперь перезапустите сеть:

Если ваш узел виртуальной машины «зависает» на несколько секунд после запуска или остановки гостевой системы KVM при использовании мостовой сети, это происходит потому, что мост Linux берет аппаратный адрес интерфейса с наименьшим номером из всех подключенных интерфейсов. Чтобы обойти это, добавьте в конфигурацию моста следующее:

и замените f4:6d:04:08:f1:5f аппаратным адресом физического адаптера Ethernet, который всегда будет частью моста.

Настройка ubuntu-vm-builder для создания гостей с мостом по умолчанию

Виртуальные машины определяются в файлах XML; ubuntu-vm-builder, инструмент, который мы будем использовать для создания виртуальных машин, основывает их на файле шаблона /etc/vmbuilder/libvirt/libvirtxml.tmpl (до Ubuntu 8.10 /usr/share/ubuntu-vm-builder/templates/libvirt. тмпл). В старых версиях Ubuntu этот файл нужно было жестко запрограммировать, чтобы заменить его на .

В Ubuntu 10.04 (Lucid и, возможно, более поздние версии) файл libvirtxml.tmpl использует переменные, поэтому установите bridge=br0 в /etc/vmbuilder.cfg или ~/.vmbuilder.cfg (для общесистемной или индивидуальной конфигурации) .

Создание MAC-адреса KVM

Если вы управляете своими гостями через командную строку, следующий сценарий может быть полезен для создания рандомизированного MAC-адреса с использованием зарегистрированного OUI QEMU (52:54:00):

Если вы боитесь назначать используемый MAC-адрес, проверьте совпадение в выводе "ip neigh". Тем не менее, использование этого случайного метода является относительно безопасным, давая примерно n вероятность коллизии из 16,8 миллионов (где n — количество существующих гостей QEMU/KVM на ЛВС).

Преобразование существующего гостя

Если вы уже создавали виртуальные машины ранее, вы можете заставить их использовать мостовую сеть, если вы измените определение XML (в /etc/libvirt/qemu/) для сетевого интерфейса, настроив MAC-адрес по желанию:

Примечание. Убедитесь, что первый октет в вашем MAC-адресе ЧЕТНЫЙ (например, 00:), так как MAC-адреса с НЕЧЕТНЫМИ первыми байтами (например, 01:) зарезервированы для многоадресной связи и могут вызвать у вас путаницу. Например, гость сможет получать пакеты ARP и отвечать на них, но ответ будет сбивать с толку другие машины. Это не проблема KVM, а просто то, как работает Ethernet.

Вам не нужно перезапускать libvirtd, чтобы перезагрузить изменения; самый простой способ — войти в virsh (инструмент командной строки для управления виртуальными машинами), остановить виртуальную машину, перечитать ее файл конфигурации и перезапустить виртуальную машину:

"Зеркало" ВМ теперь использует мостовую сеть.

Гости DNS и DHCP

libvirt использует dnsmasq для выдачи IP-адресов гостям, которые настроены на использование dhcp. Если на вашем хост-компьютере вы добавите 192.168.122.1 (IP-адрес вашего хоста по умолчанию в libvirt) в качестве вашего первого сервера имен в /etc/resolv.conf, вы сможете выполнять преобразование имен для своих гостей. dnsmasq достаточно умен, чтобы использовать другие записи «сервера имен» в вашем /etc/resolv.conf для разрешения адресов, отличных от libvirt. Например, если ваш текущий /etc/resolv.conf:

Измените это на:

Теперь, если у вас есть виртуальная машина с именем hardy-amd64, после ее запуска вы можете сделать следующее:

Обратите внимание, что при использовании ssh вам может понадобиться использовать завершающий '.' после имени хоста:

Наконец, чтобы это работало, ваш гость должен отправить свое имя хоста как часть запроса DHCP. Во многих операционных системах это делается автоматически. Для систем, которые не отправляют это автоматически и используют dhcp3, вы можете настроить файл dhclient.conf. Например, в Ubuntu 6.06 LTS (Dapper) настройте файл /etc/dhcp3/dhclient.conf следующим образом:

ВАЖНО: В зависимости от конфигурации вашей сети файл /etc/resolv.conf вашего хоста может периодически перезаписываться. Вместо этого вы можете отредактировать /etc/resolvconf/resolv.conf.d/head, чтобы предотвратить это. Если это не вариант, вам придется либо настроить сервер dhcp в вашей сети, чтобы выдать дополнительный сервер имен libvirt для ваших хостов libvirt, либо соответствующим образом настроить каждый хост-компьютер. Поскольку существует множество возможных конфигураций хост-компьютеров, пользователям рекомендуется ознакомиться с resolvconf и/или man-интерфейсами.

Создайте мостовое устройство, которое будет использоваться этой сетью (в приведенном ниже примере я назначаю хосту IP-адрес 10.3.11.254):

Используйте virsh для создания частной сети:

Теперь вы можете добавить виртуальное сетевое устройство к любому из ваших гостей, выбрать «privatenet» в качестве исходного устройства, и этот гость будет подключен к виртуальному коммутатору.

Далее я опишу, как настроить kvm в среде, где вы хотите, чтобы гостевые виртуальные машины выглядели как независимые серверы, неотличимые от обычных металлических ящиков, стоящих на полу в офисе.

Конфигурация хоста

Сервер Octopus представляет собой мощный компьютер HP 380 G5 с двухъядерным четырехъядерным процессором Intel. Это процессор с включенной аппаратной виртуализацией, в чем вы можете убедиться, выполнив:

Если вы получаете выходные данные этой команды, ваш процессор поддерживает либо vmx (Intel), либо svm (AMD). Если нет, вы можете отказаться от запуска qemu прямо здесь. Это будет медленно. В нашем случае сервер чертовски быстр. Он имеет эквивалент 8 процессоров и оснащен 12 ГБ оперативной памяти. Мы намерены запустить на нем 8 гостевых серверов, все для конкретной задачи, например. веб-сервер, сервер имен и т. д.

Я начал с только что установленного Ubuntu Server версии 7.10, "Gutsy Gibbon".

Установка kvm и qemu

Сначала установите kvm и qemu:

Как видно из вышеизложенного, kvm использует ряд других необходимых пакетов. В частности, важен пакет bridge-util. Самое первое, что нужно сделать, это заставить хост-осьминог функционировать как сетевой мост, который принимает сетевой трафик, поступающий на IP-адрес гостя, и ретранслирует его на виртуальный сетевой интерфейс гостя.

Загрузить модуль ядра

Далее нам нужно загрузить модуль ядра kvm:

или "kvm-amd", если это ваша аппаратная платформа. (В версии 8.04 (Hardy) этот шаг можно пропустить, так как модуль kvm загружается автоматически.)

Эта команда вставляет модуль в работающее в данный момент ядро. Однако, чтобы он загружался при каждой загрузке, вставьте имя модуля (kvm-intel/kvm-amd) в файл /etc/modules.

Определить интерфейс моста

Отредактируйте файл /etc/network/interfaces, который в системах Ubuntu или Debian содержит информацию для настройки сетевого интерфейса. Вот как файл выглядел до редактирования:

Мы редактируем файл, чтобы он получил следующее содержимое:

Мы видим, что интернет-адрес осьминога теперь назначается интерфейсу br0, а исходный eth0 определяется как привязанный к мосту через ключевое слово bridge_prots. Например, если ваш основной сетевой интерфейс eth1, вам нужно использовать это имя.

Поднять мост

Либо перезагрузите компьютер, либо зациклите интерфейсы, если машина локальная:

Проверить хост

После того, как сервер снова заработает, вы должны проверить, что он по-прежнему имеет правильные сетевые подключения с обеих сторон шлюза, например. используя ping.

Теперь проверьте сетевые интерфейсы с помощью команды ip addr. Обратите внимание, что в следующем листинге eth0 больше не имеет связанного IP-адреса, а новый мост br0 принял этот IP-адрес.

Гостевая конфигурация libvirt

В virt-manager теперь можно выбрать конфигурацию «моста» при создании новой виртуальной машины. Чтобы изменить существующие виртуальные машины, вы можете изменить определение XML (в /etc/libvirt/qemu для сетевого интерфейса, настроив MAC-адрес по желанию:

Наконец, перезапустите libvirtd (убедитесь, что ваши виртуальные машины выключены):

Гостевая конфигурация только для KVM

У нас есть новое устройство под названием tap0:

Запустите виртуальную машину

На данный момент я предполагаю, что у вас уже есть доступ к виртуальному серверу. Как его создать описано в другом месте. В Octopus виртуальный сервер octo1 представляет собой файл 5G, хранящийся в разделе /home и основанный на сервере Ubuntu JeOS.

Теперь мы запускаем виртуальную машину:

kvm теперь будет загружать виртуальную машину в X-окне. Вы увидите обычную последовательность загрузки внутри окна. В конце концов, виртуальная машина появится, и вы сможете войти в систему. Остерегайтесь, что окно kvm берет на себя управление вашей мышью, поэтому система кажется полностью невосприимчивой! Вам нужно нажать и одновременно, чтобы kvm отпустил мышь.

Настройте гостевую машину

Пришло время настроить гостевую машину, в данном случае octo1. Обратите внимание, что вы должны настроить гостевую машину точно так же, как вы настроили бы обычную коробку, стоящую под вашим столом. В нашем случае сеть на octo1 настроена, опять же в файле /etc/network/interface, который на octo1 выглядит так:

Вот оно! Гостевая машина (возможно, вам придется ее перезагрузить) теперь должна иметь доступ к Интернету, и вы сможете получить к ней доступ извне. Теперь вы можете настроить его дальше.

Когда вы закончите настройку, вы, вероятно, захотите запустить виртуальную машину как автономный процесс без графической консоли. Этого можно добиться с помощью параметров -daemonize и -nographic:

Несколько виртуальных машин на одном хосте

Вскоре вам понадобится несколько виртуальных машин, работающих на одном сервере.Конечно, у каждого гостя должен быть свой уникальный IP-адрес, но кроме того, нужно сделать так, чтобы каждая виртуальная машина также имела уникальный mac-адрес. Сетевая карта в вашем компьютере имеет зашитый mac-адрес, но с виртуальной машиной это, конечно, не так.

MAC-адрес состоит из шести байтов, обычно представленных в шестнадцатеричном коде. Обычно он кодирует производителя и серийный номер. Однако вы можете создавать свои собственные MAC-адреса, которые могут быть любыми, если первый байт равен 02. Это так называемый локально управляемый адрес.

Если вы использовали виртуальную машину раньше, вам нужно будет снова отредактировать ее сетевую конфигурацию, потому что при первом вызове kvm с параметром macaddr создается новое сетевое устройство с заданным MAC-адресом. Это может быть, например, eth1, поэтому вам придется перенастроить это устройство, указав правильный IP-адрес и т. д.

Читайте также: