Qemu kvm настройка сети
Работа с сетью в qemu достаточна проста, но зачастую вызывает множество вопросов у начинающих. Несмотря на то, что в сети существует ряд полезных руководств, в процессе решения прикладных задач возникают мелкие, но неприятные проблемы. В данной статье, я постараюсь постепенно собирать ряд рецептов и рекомендаций по настройке сети в qemu. Со стороны читателей приветствуются замечания и дополнения.
Все примеры в статье проверены на Fedora 14, qemu 0.13.0, kvm включен.
Использование tun/tap интерфейсов для связи машин
Теперь для соединения между хостом и гостевой системой достаточно назначить адреса для tap интерефейса и сетевого адаптера на гостевой системе.
Например, на хост-системе создан мост virtnet0, тогда для добавления в этот мост tap интерфейса привязанного к виртуальной машине /etc/qemu-ifup может выглядеть так
Первый параметр передаваемый скрипту - это имя tap адаптера, он переводится в promisc mode и добавляется в сетевой мост.
Таким образом, если запустить несколько виртаульных машин, то для каждой из них будет назначен tap интерфейс и добавлен в мост virtnet0. При этом машины могут общаться друг с другом и с хост системой (в этом случае мосту в хост системе назнаяается IP адрес).
Кроме того, можно изначально добавить в сетевой мост один из сетевых интерфейсов хост системы - тогда виртуальные машины получаею доступ во внешнюю сеть наравне с хост системой.
В сети можно найти множество различных руководств по настройке подобной конфигурации, поэтому здесь хочется отметить только несколько моментов. Если вы хотите использовать PXE загрузку (например для автоматической установки систем), то крайне рекомендую установить forward delay для моста равным 0
Кроме того, если вы используете NetworkManager для настройки сети, то могли заметить, что он пока что не работает сетевыми мостами (Я не нашел адекватного и быстрого способа). Для решения этой проблемы можно создавать мост непосредственно в скрипте /etc/qemu-ifup
Настройка сети для виртуальных машин в kvm очень похожа на настройку в qemu, поэтому любая документация к qemu подходит и для kvm. В этой статье описывается как настроить наиболее часто используемые типы подключения виртуальной машины к сети. Эта статья основана на Networking - KVM.
Введение в QEMU/KVM
KVM (Kernel-based Virtual Machine) — это комплекс программ для виртуализации с аппаратной поддержкой в среде Linux x86. Виртуализация позволяет нам устанавливать полностью изолированные, но работающие бок о бок операционные системы на одном и том же железе.
Гипервизор KVM представляет из себя загружаемый модуль ядра Linux. Он обеспечивает только уровень абстракции устройств. Таким образом одного гипервизора KVM недостаточно для запуска виртуальной ОС. Нужна еще эмуляция процессора, дисков, сети, видео, шины. Для этого существует QEMU.
QEMU (Quick Emulator) — эмулятор различных устройств, который позволяет запускать операционные системы, предназначенные для одной архитектуры, на другой.
Обычно такой комплекс программ для виртуализации называют QEMU/KVM.
Подготовка сервера
Во-вторых, для удобства создадим каталоги для хранения образов жестких дисков наших виртуальных машин и образов ISO, с которых будет производиться установка операционных систем.
В результате будет создан каталог /kvm/hdd для виртуальных жестких дисков и каталог /kvm/iso для образов ISO.
Сетевое соединение между виртуальными машинами
Нижеописанный способ соединения позволяет установить связь между двумя виртуальными машинами qemu, через сетевой сокет на хост-системе. Для этого будет использоваться параметр -net socket
Сначала запустим первую машину, которая будет слушать порт 2030 по адресу 127.0.0.1
Вторая запущенная виртуальная машина поключается к этому сокету (подразумевается, что машины запущены на одной хост-системе)
Во второй системе создается два интерфейса, один из которых подключается к первой виртуальной машине через сокет, а второй работает в user режиме (NAT встроенный в qemu и описанный выше) - благодаря этому вторая машина получает и доступ во внешнюю сеть и кроме того может обмениваться информацией с первой виртуальной машиной
Необходимо отметить, что при использовании socket механизма, сетевые настройки конечно же не раздаются автоматически. На скриншотах сетевые интерфейсы машин соединенных при помощи сокета на хост системе имеют адреса 192.168.200.1 и 192.168.200.2 (назначены руками) для Linux и Windows соответсвенно. На Linux системе также заметен и второй интерфейс eth2, который предоставляет доступ к внешней сети при помощи NAT.
Схему данной сети можно представить в следующем виде
Кроме того для связи нескольких машин друг с другом может использоваться схема UDP мультикаст сокетов, при этом сами виртуальные машины могут быть запущены на разных хостах. На этой схеме я подробно останавливаться не буду, так как сам её не использовал, а переписывать краткий мануал было бы бессмысленно.
Так как же всё таки настроить работающую сеть?
Самый простой способ подключения сети в гостевой системе - использование встроенной в qemu системы сетевого обмена с хостом (user mod). Она не требует дополнительной конфигурации - если на хост-системе настроена сеть, то qemu сам позаботиться о том, чтобы запросы автоматически перенаправлялись на нужный сетевой интерфейс.
В данном случае к vlan 0 подключается с одной стороны сетевой адаптер гостевой системы, с другой стороны к этому же vlan подключается встроеннsq в qemu маршрутизатор. Гостевая система при этом получает IP адрес по DHCP (по умолчанию в диапазоне 10.0.2.0/8).
Необходимо подчернуть, что user режим работы сети включается по умолчнию, даже если не прописывать параметры конфигурации в командной строке qemu. Кроме того user режим имеет несколько полезных настроек - как всегда их можно подсмотреть в man`e.
Несмотря на свою простоту данный способ настройки сети для гостевой системы обладает рядом недостатков:
- Медленная скорость сетевого соединения
- Нет связи с другими виртульными машиными запущенными на данном хосте
- Гостевая система недоступна с хост системы и с дригих машин в сети хоста.
К счастью существуют способы, позволяющие устранить эти проблемы.
Маршрутизация/iptables
Также вы можете объединить виртуальные машины tap-интерфесом в хост-системе и настроить правила iptables в хост-система, чтобы она была маршутизатором и сетевым экраном для виртуальных машин.
Настройки маршрутизации сводятся к созданию маршрута по умолчанию в виртуальной машине, указывающего на хост-систему, разрешение пересылки пакетов (IP forwarding) и настройки маршрута на tap-интерфейс виртуальной машины в хост-системе.
Заблаговременно проверьте настройки:
- Хост-система: Разрешить пересылку пакетов и добавить маршрут до виртуальной машины (должно быть помещено в скрипт - маршрут необходимо добавить после запуска виртуальной машины):
- Виртуальная машина: маршрут по умолчанию указывает на хост-систему ( должен быть в одной сети с ):
- Виртуальная машина v2: если IP-адрес хост-системы не в одной сети с , тогда надо вручную добавить маршрут до хост-системы перед добавлением маршрута по умолчанию:
Другой способ настройки сети это VDE (Virtual Distributed Ethernet).
Пользовательская сеть
Варианты использования:
- Вам нужен простой способ дать виртуальной машине доступ в Интернет и в вашу локальную сеть;
- Вам не нужен доступ к виртуальной машине из сети или из других виртуальных машины;
- Вы готовы пожертвовать производительностью;
- Внимание: пользовательская сеть не поддерживает некоторые возможности сетей, например ICMP, поэтому некоторые приложения (такие как ping) могут работать неправильно.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Если виртуальной машине нужен доступ в Интернет или в локальную сеть, то у хост-системы должен быть доступ в эти сети.
- Просто запустите виртуальную машину с параметрами "-net nic -net user", например:
Отказы сети в гостевых Windows
Под большой нагрузкой сетевой интерфейс в гостевой машине с ОС Windows перестаёт принимать и отправлять пакеты в хост-машину. Такое поведение характерно для любой модели виртуального интерфейса и для любой версии Windows в QEMU-KVM как минимум до версии 1.4.
Существует обходное решение: нужно заново проинициализировать сетевой интерфейс гостевой машины. Либо это можно сделать из гостевой ОС, либо из хост-машины парой команд virsh detach-interface и atttach-interface (и это надёжнее). Проверяем работоспособность при этом, очевидно, командой ping. Варианты скриптов для гостевой машины: [1], [2]. В скрипте для хоста перед проверкой пинга требуется проверить, работает ли гостевая ОС.
Настройка сети для виртуальных машин в kvm очень похожа на настройку в qemu, поэтому любая документация к qemu подходит и для kvm. В этой статье описывается как настроить наиболее часто используемые типы подключения виртуальной машины к сети. Эта статья основана на Networking - KVM.
Варианты использования:
- Вам нужен простой способ дать виртуальной машине доступ в Интернет и в вашу локальную сеть;
- Вам не нужен доступ к виртуальной машине из сети или из других виртуальных машины;
- Вы готовы пожертвовать производительностью;
- Внимание: пользовательская сеть не поддерживает некоторые возможности сетей, например ICMP, поэтому некоторые приложения (такие как ping) могут работать неправильно.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Если виртуальной машине нужен доступ в Интернет или в локальную сеть, то у хост-системы должен быть доступ в эти сети.
- Просто запустите виртуальную машину с параметрами "-net nic -net user", например:
Варианты использования:
- Организация сети между двумя или более виртуальными машинами. Эта сеть не будет доступна ни другим виртуальным машинам, ни из реальной сети.
- Организация сети между виртуальными машинами и хост-системой. От первого варианта отличается только добавлением адреса на мостовой интерфейс хоста. Если возникнет потребность, можно добавить реальный интерфейс в мост, тогда виртуальные машины будут подключены к реальной LAN.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Вам понадобятся следующие программы:
Если вы не хотите запускать их из под root-a, то вам понадобится настроить sudo для их запуска.
В Седьмой платформе
- Во-первых, можно стартовать виртуальные машины с помощью libvirtd и управлять ими посредством virsh, при этом всё будет сделано автоматически. Нужно только правильно указать интерфейс (опция --network bridge).
- Во-вторых, можно использовать мостовой интерфейс virbr0, который появляется в системе после установки пакета kvm. Интерфейсу уже назначен IP 192.168.122.1/24 (см. конфигурация ю файле /etc/libvirt/qemu/networks/default.xml).
Перед запуском виртуальной машины создайте tap-интерфейс, добавьте его мост и потом используйте его при запуске kvm:
Создать tap-интерфейсы и добавить их в мост можно и с помощью скриптов /etc/net (см. man etcnet).
- В-третьих, можно использовать системный скрипт для запуска мостового интерфейса: /etc/init.d/bridge, достаточно создать нужное количество виртуальных интерфейсов, добавить их в /etc/sysconfig/bridge и запустить "службу" bridge:
Скрипт /etc/init.d/bridge при этом нельзя запускать автоматически при старте системы, но запускайте только вручную от пользователя с помощью sudo:
В дальнейшем виртуальные машины нужно запускать с использованием этих готовых интерфейсов, например:
В старых дистрибутивах
- Нужно создать и сконфигурировать мост, например:
- Для связи по сети между виртуальной машиной и хост-системой нужно задать адрес IP мосту, например:
или, чтобы не задавать адрес вручную, создайте файл /etc/net/ifaces/br1/ipv4address, содержащий единственную строку "192.168.100.1/2" (Это не обязательно, если доступ по сети в/из виртуальную машину не нужен.)
Также можно сконфигурировать сервер DHCP, чтобы он выдавал адреса в подсети интерфейса br1 (см. man dhcpd).
- наличие двух сетевых карт на хосте eth0 и eth1 подключенных к локальной сети, - интерфейс eth0 настроен и работает в сети, eth1 включен настройки не обязательны
- Создать мост br0 (некоторые разработчики считают, что команды tunctl и brctl устарели)
- Создать скрипт qemu-ifup следующего содержания без sudo и "устаревших" утилит:
- Создать скрипт qemu-ifup следующего содержания (c использованием sudo, возможно необходимы предварительные настройки):
- Сгенерировать MAC-адрес вручную или автоматически, используя скрипт:
- Запустить каждую виртуальную машину, заменяя $macaddress значением, полученным на предыдущем шаге:
- Внутри каждой виртуальной машины нужно сконфигурировать уникальный адрес IP из одной и той же подсети.
Работа с предварительно созданными иинтерфейсами
Можно заранее (в стартовом скрипте) настроить все интерфейсы и затем использовать их в виртуальных машинах. При этом обязательно нужно указывать опцию script=no:
- Если вы не хотите запускать машину от root-а, то скрипт qemu-ifup должен корректно работать от вашего пользователя;
- Вы можете создать общесистемный скрипт, назвав его в /etc/qemu-ifup или же спользовать любое другое имя, указав его при запуске машины:
- Каждая виртуальная машина подключенная к внутреннему виртуальному мосту должна иметь свой собственный MAC-адрес, отличный от адресов других машин.
- Для включения в мост необходимо использовать интерфейсы tap, но не tun. Дело в том, что у интерфейсов tun нет заголовков ethernet, которые требуются для работы моста.
Предупреждение: Данный метод может не работать с большинством беспроводных устройств.
Варианты использования:
- Вы хотите назначать IP-адреса виртуальным машинам и сделать их доступными из локальной сети;
- Вы хотите большой производительности от виртуальной машины.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Вам понадобятся следующие программы. Если вы не хотите запускать их из под root-a, по вам понадобится настроить sudo для их запуска:
- Хост-система должна иметь доступ в интернет и в локальную сеть.
Вариант №1: Использование средств дистрибутива
- Создать файл /etc/net/ifaces/breth0/options следующего содержания:
- Применить новые настройки сети командой:
- Интерфейс моста breth0 должен получить IP-адрес, а интерфейс eth0 должен быть без адреса.
Особенности VLANов
Если вы используете VLANы но до виртуальной машины трафик не доходит, выполните команды:
Варинат №2: "Ручной"
- Создать мост командой:
- Добавить физический интерфейс в этот мост, например eth0:
- Создать скрипт qemu-ifup следующего содержания:
- Сгенерировать MAC-адрес вручную или автоматически, используя скрипт:
- Запустить каждую виртуальную машину, заменяя $macaddress значением, полученным на предыдущем шаге:
- Если вы не хотите запускать машину от root-а, то скрипт qemu-ifup должен корректно работать от вашего пользователя;
- Вы можете создать общесистемный скрипт, назвав его в /etc/qemu-ifup или же спользовать любое другое имя, указав его при запуске машины:
- Каждая виртуальная машина подключенная к внутреннему виртуальному мосту должна иметь свой собственный MAC-адрес, отличный от адресов других машин.
Также вы можете объединить виртуальные машины tap-интерфесом в хост-системе и настроить правила iptables в хост-система, чтобы она была маршутизатором и сетевым экраном для виртуальных машин.
Настройки маршрутизации сводятся к созданию маршрута по умолчанию в виртуальной машине, указывающего на хост-систему, разрешение пересылки пакетов (IP forwarding) и настройки маршрута на tap-интерфейс виртуальной машины в хост-системе.
Заблаговременно проверьте настройки:
- Хост-система: Разрешить пересылку пакетов и добавить маршрут до виртуальной машины (должно быть помещено в скрипт - маршрут необходимо добавить после запуска виртуальной машины):
- Виртуальная машина: маршрут по умолчанию указывает на хост-систему ( должен быть в одной сети с ):
- Виртуальная машина v2: если IP-адрес хост-системы не в одной сети с , тогда надо вручную добавить маршрут до хост-системы перед добавлением маршрута по умолчанию:
Другой способ настройки сети это VDE (Virtual Distributed Ethernet).
Под большой нагрузкой сетевой интерфейс в гостевой машине с ОС Windows перестаёт принимать и отправлять пакеты в хост-машину. Такое поведение характерно для любой модели виртуального интерфейса и для любой версии Windows в QEMU-KVM как минимум до версии 1.4.
Существует обходное решение: нужно заново проинициализировать сетевой интерфейс гостевой машины. Либо это можно сделать из гостевой ОС, либо из хост-машины парой команд virsh detach-interface и atttach-interface (и это надёжнее). Проверяем работоспособность при этом, очевидно, командой ping. Варианты скриптов для гостевой машины: [1], [2]. В скрипте для хоста перед проверкой пинга требуется проверить, работает ли гостевая ОС.
Libvirt - набор инструментов для управления виртуализацией. В данной статье будет описано его использование.
Добавляем пользователя в группу:
Основы.
С самого начала надо пояснить, как создать сетевой адаптер в гостевой системе. Для этого служит опция -net с параметром nic (Network Interface Card)
При указании данной опции в гостевой системе появится сетевой интерефейс заданной модели, с указанным mac адресом. При отсутствии параметра model будет эмулироваться адаптер realtek. Узнать какие адаптеры поддерживаются qemu для вашей архитектуры можно при помощи следующей команды
После указания адаптера самое время подумать, как он будет взаимодействовать с внешним миром. Qemu предоставляет несколько различных способов сетевого поключения для гостевой системы, но прежде чем перейти к описанию некоторых из них, необходимо познакомиться с понятием vlan. Сразу хочу отметить,что к Virtual Local Area Network этот термин не имеет отношения. В терминологии qemu vlan - это виртуальный коммутатор который создается процессом qemu, на один процесс их может быть несколько штук, и различаются они по номеру. Подключить сетевой адаптер к нужному vlan можно указав номер в качестве параметра, например
Все что поступает на vlan передаётся другим подключенным туда интерфейсам, а весь секрет взаимодействия с хост системой и внешней сетью заключается в том, что помимо адаптера гостевой системы к vlan можно подлючить много чего ещё.
Оглавление
Создание виртуальной машины
Для создания виртуальной машины нам понадобятся две утилиты: osinfo-query — для получения списка доступных для установки вариантов операционных систем и virt-install — непосредственно для самой установки.
Итак, создадим нашу первую виртуальную виртуальную машину с ОС Ubuntu 16.04, 1024MiB ОЗУ, 1 процессором, сетью через мост и 12GiB жестким диском.
Обратите внимание на параметр —os-variant. Он указывает гипервизору под какую именно ОС следует адаптировать настройки.
Список доступных вариантов можно получить, выполнив команду:
Подробнее с параметрами virt-install вы можете ознакомиться на страницах руководства, а я приведу команду создания ВМ c сетью через NAT:
После запуска установки в консоли сервера вы увидите текст похожий на этот:
Значит все нормально и для продолжения установки ОС в виртуальной машине нам нужно соединиться к ней по VNC. Чтобы узнать номер порта на котором он поднят для нашей ВМ откройте новую консоль или в текущей переведите задание в фоновый режим с помощью CTRL+Z , bg и выполните команду:
В моем случае это порт 5903:
или выполнив команду
вы получите примерно такой результат:
Это число нужно сложить с базовым портом 5900.
Далее подключаемся с помощью клиента VNC (Remmina, TightVNC) к нашему серверу по полученному порту и устанавливаем Ubuntu 16.04 в нашей ВМ.
После успешного завершения установки в консоли вы увидите примерно следующее:
Внутренний виртуальный мост
Варианты использования:
- Организация сети между двумя или более виртуальными машинами. Эта сеть не будет доступна ни другим виртуальным машинам, ни из реальной сети.
- Организация сети между виртуальными машинами и хост-системой. От первого варианта отличается только добавлением адреса на мостовой интерфейс хоста. Если возникнет потребность, можно добавить реальный интерфейс в мост, тогда виртуальные машины будут подключены к реальной LAN.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Вам понадобятся следующие программы:
Если вы не хотите запускать их из под root-a, то вам понадобится настроить sudo для их запуска.
Решение:
Подготовка
В Седьмой платформе
- Во-первых, можно стартовать виртуальные машины с помощью libvirtd и управлять ими посредством virsh, при этом всё будет сделано автоматически. Нужно только правильно указать интерфейс (опция --network bridge).
- Во-вторых, можно использовать мостовой интерфейс virbr0, который появляется в системе после установки пакета kvm. Интерфейсу уже назначен IP 192.168.122.1/24 (см. конфигурация ю файле /etc/libvirt/qemu/networks/default.xml).
Перед запуском виртуальной машины создайте tap-интерфейс, добавьте его мост и потом используйте его при запуске kvm:
Создать tap-интерфейсы и добавить их в мост можно и с помощью скриптов /etc/net (см. man etcnet).
- В-третьих, можно использовать системный скрипт для запуска мостового интерфейса: /etc/init.d/bridge, достаточно создать нужное количество виртуальных интерфейсов, добавить их в /etc/sysconfig/bridge и запустить "службу" bridge:
Скрипт /etc/init.d/bridge при этом нельзя запускать автоматически при старте системы, но запускайте только вручную от пользователя с помощью sudo:
В дальнейшем виртуальные машины нужно запускать с использованием этих готовых интерфейсов, например:
В старых дистрибутивах
- Нужно создать и сконфигурировать мост, например:
- Для связи по сети между виртуальной машиной и хост-системой нужно задать адрес IP мосту, например:
или, чтобы не задавать адрес вручную, создайте файл /etc/net/ifaces/br1/ipv4address, содержащий единственную строку "192.168.100.1/2" (Это не обязательно, если доступ по сети в/из виртуальную машину не нужен.)
Также можно сконфигурировать сервер DHCP, чтобы он выдавал адреса в подсети интерфейса br1 (см. man dhcpd).
Включение виртуальной машины в мост
- Создать скрипт qemu-ifup следующего содержания:
- Сгенерировать MAC-адрес вручную или автоматически, используя скрипт:
- Запустить каждую виртуальную машину, заменяя $macaddress значением, полученным на предыдущем шаге:
- Внутри каждой виртуальной машины нужно сконфигурировать уникальный адрес IP из одной и той же подсети.
Работа с предварительно созданными иинтерфейсами
Можно заранее (в стартовом скрипте) настроить все интерфейсы и затем использовать их в виртуальных машинах. При этом обязательно нужно указывать опцию script=no:
- Если вы не хотите запускать машину от root-а, то скрипт qemu-ifup должен корректно работать от вашего пользователя;
- Вы можете создать общесистемный скрипт, назвав его в /etc/qemu-ifup или же спользовать любое другое имя, указав его при запуске машины:
- Каждая виртуальная машина подключенная к внутреннему виртуальному мосту должна иметь свой собственный MAC-адрес, отличный от адресов других машин.
- Для включения в мост необходимо использовать интерфейсы tap, но не tun. Дело в том, что у интерфейсов tun нет заголовков ethernet, которые требуются для работы моста.
Установка и запуск QEMU/KVM в Ubuntu
В качестве интерфейса к технологиии виртуализации QEMU/KVM в Ubuntu мы будем использовать библиотеку libvirt. С помощью следующей команды мы установим гипервизор, эмулятор, библиотеку и утилиты управления.
Где qemu-kvm — сам гипервизор; libvirt-bin — библиотека управления гипервизором; virtinst — утилита управления виртуальными машинами; libosinfo-bin — утилита для просмотра списка вариантов гостевых операционных систем.
После успешной установки всех пакетов настроим автоматический запуск сервиса.
Пользователя, под которым будем работать с виртуальными машинами, включим в группу libvirt:
И установим права доступа на ранее созданные каталоги:
Настраивать виртуальные машины, хранилища и сети можно как из командной строки, так и с помощью GUI-инструмента virt-manager. Причем установить его можно как на сервер, так и на другой компьютер, например, на ваш ноутбук. В последнем случае вам придется добавить удаленное соединение к libvirt. Установку virt-manager и работу при помощи него с libvirt и виртуальными машинами мы рассмотрим в следующей статье.
Настройка сети
Внимание! Используя удаленное подключение, внимательно проверяйте настройки. В случае ошибки соединение будет прервано и вам понадобится физический (или через ip kvm) доступ к серверу для исправления ситуации.
Итак, виртуальные машины могут работать через свою виртуальную сеть с NAT или получать IP-адреса из локальной сети через сетевой мост, который нам необходимо настроить.
Настройка сетевого моста
В старых версиях Ubuntu большая часть настроек конфигурации сети Ethernet находится в файле /etc/network/interfaces. На всякий случай создадим его резервную копию:
Затем устанавливаем утилиты для конфигурирования Ethernet-моста:
Открываем файл /etc/network/interfaces в своем любимом редакторе (vim, nano):
И приводим его к примерно такому виду:
Все, что закомментировано — старые настройки сети; br0 — название интерфейса создаваемого моста; eno1 — сетевой интерфейс, через который будет работать мост.
Вам необходимо поменять eno1 на имя интерфейса вашей сетевой карты и заменить ip-адреса, на те, которые используются в вашей локальной сети.
Если вы получаете адрес динамически через DHCP, то конфигурация сократится до такой:
Внимательно проверяем конфигурацию и перезапускаем службу сети:
Начиная с релиза Ubuntu 17.10, для управления конфигурацией сети по умолчанию используется утилита Netplan, которая добавляет новый уровень абстракции при настройке сетевых интерфейсов. Конфигурация сети хранится в файлах формата YAML. Предоставляется эта информация бэкендам (network renderers), таким как NetworkManager или systemd-networkd.
Файлы конфигурации Netplan хранятся в папке /etc/netplan. Для настройки сети открываем в редакторе файл 01-netcfg.yaml
и приводим его к такому виду:
Ну а при использовании динамической адресации файл конфигурации будет выглядеть так:
В файлах конфигурации указываем свои адреса, имена интерфейсов и доменов и после тщательной проверки применяем сетевые настройки:
Виртульные сети (NAT forwarding)
Каждая стандартная установка libvirt обеспечивает подключение виртуальных машин на основе NAT из коробки. Это так называемая виртуальная сеть по умолчанию. Вы можете проверить, что она доступна таким образом:
Известные баги
Проверка аппаратной поддержки виртуализации
Во-первых, перед настройкой KVM необходимо проверить совместимость сервера с технологиями виртуализации:
Числа отличные от нуля говорят о том, что процессор имеет поддержку аппаратной виртуализации Intel-VT или AMD-V .
Если вы получили число 0, то заходим в BIOS и ищем опцию для включения технологии виртуализации. Она может имеет различные названия, например, Intel Virtualization Technology или Virtualization.
Публичный мост
Предупреждение: Данный метод может не работать с большинством беспроводных устройств.
Варианты использования:
- Вы хотите назначать IP-адреса виртуальным машинам и сделать их доступными из локальной сети;
- Вы хотите большой производительности от виртуальной машины.
- Настроенная и запущенная виртуальная машина;
- Если вы не хотите запускать её из под root-а, то для вашего пользователя понадобятся права на чтение/запись в /dev/kvm;
- Вам понадобятся следующие программы. Если вы не хотите запускать их из под root-a, по вам понадобится настроить sudo для их запуска:
- Хост-система должна иметь доступ в интернет и в локальную сеть.
Вариант №1: Использование средств дистрибутива
- Создать файл /etc/net/ifaces/breth0/options следующего содержания:
- Применить новые настройки сети командой:
- Интерфейс моста breth0 должен получить IP-адрес, а интерфейс eth0 должен быть без адреса.
Особенности VLANов
Если вы используете VLANы но до виртуальной машины трафик не доходит, выполните команды:
Варинат №2: "Ручной"
- Создать мост командой:
- Добавить физический интерфейс в этот мост, например eth0:
- Создать скрипт qemu-ifup следующего содержания:
- Сгенерировать MAC-адрес вручную или автоматически, используя скрипт:
- Запустить каждую виртуальную машину, заменяя $macaddress значением, полученным на предыдущем шаге:
- Если вы не хотите запускать машину от root-а, то скрипт qemu-ifup должен корректно работать от вашего пользователя;
- Вы можете создать общесистемный скрипт, назвав его в /etc/qemu-ifup или же спользовать любое другое имя, указав его при запуске машины:
- Каждая виртуальная машина подключенная к внутреннему виртуальному мосту должна иметь свой собственный MAC-адрес, отличный от адресов других машин.
Содержание
На сервере переключаемся в режим суперпользователя:
И правим следующий файл:
После настройки на сервере SSH для доступа к файлам, на клиенте заработает и SSH для libvirt-manager для подключения к libvirt.
Кроме того разрешаем в брандмауэре: Alterator Web-Брадмауэр-Внешние сети-Дополнительные порты TCP/UDP-Добавляем порт 5900
Чтобы сделать некое подобие "Диспетчера Hyper-V" (Графическую консоль для управления виртуальными машинами) устанавливаем следующий пакет:
Открываем Virt-Manager. Файл>Добавить соединение>
- Локальная машина
- Гипервизор QEMU/KVM (подключаться автоматически).
- QEMU/KVM-Connect to remove host over SSH
- вводим имя пользователя
- вводим IP
- ставим галочку подключаться автоматически
- Нажимаем на кнопку "Создать виртуальную машину"
- Выбираем метод установки - локальный/ISO
- Выбираем ISO/CD и тип ОС (с помощью автодополнения)
- Выбираем количество ОЗУ и процессоров
- Создаем виртуальный жесткий диск
- Вводим название и выбираем сеть
До первого запуска откройте настройки виртуальной машины, во вкладке Обзор> Свойства гипервизора у вас будет возможность сменить тип прошивки - BIOS или UEFI. До первого запуска![1]
Выберите машину, нажмите на лампу.
- Дисплей:
- тип:VNC
- listen type:address
- адрес:IP
- порт:авто
- пароль:пользователя в группе
. Диск-1> Дополнительные параметры>Шина диска
- IDE - рекомендуется для Windows XP и младше
- SATA - для 7 и старше
- VirtIO для Linux [2]
Иначе вы просто не загрузитесь с CD/ISO.
. Выберите IDE CDROM> Browse.
В окне "Выберите том хранилища" нажмите на плюс (добавить пул), выберите тип dir-каталог в файловой системе и укажите папку с iso-образами.
Выберите образ из пула и нажмите на кнопку "Выбор тома".
Примечание: В качестве каталога можно указать папку прописанную в /etc/openssh - так вы легко сможете закидывать и подключать ISO-образы
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-сервер (они настраиваются автоматически).
И в настройках виртуальной машины выберите данный интерфейс.
Чтобы напрямую общаться между реальной сетью и виртуальными машинами напрямую нужно создать сетевой мост.
Примечание: При этом управление сетью перейдет к etcnet и NetworkManager уже будет не нужен, его и его апплет можно удалить: apt-get remove NetworkManager NetworkManager-applet-gtk . В трее, соответственно, иконка статуса сети исчезнет.
Если простым языком, то задачу можно разделить на две:- создать бридж
- в virt-manager в свойствах виртуальной машины, в свойствах сетевого интерфейса выбираем
- устройство моста
- вручную вводим имя нашего моста - vmbr0
Примечание: Попробуйте запустить LiveCD - система должна получить по DHCP IP адрес и иметь доступ в LAN и интернет
Настроил тут проброс порта в QEMU-виртуалку. Казалось бы, в чём проблема-то?
как-то так (можно вместо e1000 паравиртуальный драйвер, это побыстрее будет).
Но. Я это сделал через libvirt! И оказалось, что штатными средствами (не только тыкая в менюшки virt-manager, но и, кажется, вообще прямой настройкой сети) нельзя. Не знаю, почему. Может быть, можно, но я не нашёл как. А я искал. То, что в libvirt называется NAT, в действительности садится на tun/tap, лезет в iptables и т. д. Наверное, для совместимости с другими платформами виртуализации, не знаю.
- В настройках virt-manager разрешаем «Редактирование XML»
- Удаляем все сетевые устройства.
- Добавляем в конец общего XML-я виртуалки (например, во вкладке «Обзор»), перед закрывающим , такие строки:
Если неймспейс qemu не загружен, то такие:
И qemu преспокойненько само всё как надо делает. Фишка — не забыть про xmlns иначе просто не заработает, а вам ничего не скажет)
Откройте "Правка> Параметры", вкладка "Статистика", отметьте галочками, какие графики вы хотите сделать доступными.
Вкл./выкл. график вы можете через "Вид> График".
Снимок машины можно создать только если виртуальный жесткий диск у вас в формате *.qcow2.
В этой статье я хочу рассмотреть установку и настройку QEMU/KVM в Ubuntu.
Управление виртуальной машиной
Для управления гостевыми системами и гипервизором существует текстовая утилита virsh. Она использует libvirt API и служит альтернативой графическому менеджеру виртуальных машин virt-manager.
Я коснусь только основных команд управления ВМ, так как описание всех возможностей утилиты — тема для отдельной статьи.
Список всех доступных команд вы можете увидеть так:
Описание параметров отдельной команды:
где command — это команда из списка, который мы получили выше.
Для просмотра списка всех виртуальных машин используйте:
Вот что она показала у меня:
Если же вам нужны только работающие в данный момент виртуалки, то введите:
Для запуска виртуальной машины выполните в консоли:
где domain — имя виртуальной машины из списка, который мы получили выше.
Читайте также:
- Авангард троллейбус что должно быть на экране компьютера что показывает при неполадках
- Компьютерные технологии в дизайне где учат
- Кто сильнее в шахматах компьютер или человек
- Обнаружен клиент не прошедший проверку подлинности неверные iwd файлы cod 4
- Пойдет ли call of duty modern warfare 2019 на ноутбуке 2010 года выпуска