Назад | Перейти на главную страницу

QEmu-KVM: Как настроить виртуальные машины без использования libvirt?

Чтобы полностью понять и узнать больше о технологии KVM, мне нужно управлять виртуальными машинами и запускать их, используя только командную строку. kvm команда.

Пока сделал все, что нужно, кроме сетевой части.

Я имею в виду, что в CLI я определил интерфейс Ethernet для гостя как

-device virtio-net-pci,mac=02:01:01:01:01:01

но тогда я не могу найти достаточно документации, чтобы прикреплять его к сетевому интерфейсу хоста (который является интерфейсом подключения LACP ethernet). Это должно быть сделано с -netdev Вариант CLI.

Мне нужно позволить каждой виртуальной машине общаться друг с другом, с гостем и с другими хостами в локальной сети хоста.

Я нашел ряд (возможно, устаревших) документов о мостах и ​​т.п., но в конце концов все они основаны на libvirt.

Хотя это очень мощный инструмент, он

  1. скрывает слишком много деталей для пользователя и

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

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

@shodanskok поднимает очень важный момент в комментариях, а именно: почему бы не использовать libvirt через virsh? Это фантастическая абстракция командной строки QEMU / KVM, а также ESXi и Xen. Вы можете использовать фрагменты XML для управления вложениями устройств, и это отличный способ стандартизировать ваш набор инструментов, независимо от того, какой гипервизор работает под ним. OpenStack использует его напрямую по этой причине, и он предлагает гибкость, которая требуется даже гетерогенному облаку.

Все это в сторону, если ты иметь чтобы напрямую использовать команды qemu-kvm, вам нужно будет управлять своим собственным сетевым стеком. В частности, в этом сценарии вам не хватает моста.

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

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

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

Чтобы создать мост:

# brctl addbr br0 (В этом примере имя моста - br0. Имя произвольное).

Чтобы добавить базовый интерфейс к этому мосту:

# brctl addif bond0 br0 (В этом случае мы добавляем bond0 к br0)

После того, как это будет сделано, ваша сеть хоста канального уровня будет завершена. Если вам необходимо адресовать свой хост через IP-адрес, вы можете поместить этот адрес в мост. НЕ кладите его одним слоем ниже, например, на связку. Это просто не сработает.

Чтобы добавить IP-адрес к этому мосту (это тоже будет эфемерным, если вы не создадите файл интерфейса для своего моста, но сразу же заработает):

# ip a add 10.1.0.100/24 dev br0 (данный IP-адрес является просто примером.)

В качестве потенциальной помощи вот ссылки для настройки постоянных мостов как в CentOS, так и в Debian.

Для CentOS: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html

Для Debian: https://wiki.debian.org/NetworkConfiguration#Bridging

После того, как это настроено, вам нужно просто изменить свой -device переключить следующим образом:

-device virtio-net-pci,netdev=br0,mac=02:01:01:01:01:01

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

Если вы хотите поделиться физическим интерфейсом хоста со своими гостями, вы иметь использовать мост, но в настоящее время это не проблема, за исключением WLAN-интерфейсов (большинство из них не поддерживает мост). В зависимости от вашего дистрибутива вам необходимо настроить интерфейс моста. Например, в системах на основе Debian (например, Debian, Ubuntu) вам необходимо установить bridge-utils и отредактировать / etc / network / interfaces:

# Replace the auto entry for your old interface with br0
auto br0

# Use old interface config config for br0, plus bridge options
iface br0 inet dhcp
    bridge_ports    eth0 #The interface you want to bridge
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

Для статики это будет примерно так:

iface br0 inet static
    address 10.10.1.2
    network 10.10.1.0
    netmask 255.255.255.0
    broadcast 10.10.1.255
    gateway 10.10.1.1
    dns-nameservers 10.10.1.1 8.8.8.8
    bridge_ports    eth0
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

Затем вы просто запускаете свою виртуальную машину со следующими добавленными параметрами:

-netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

Параметр mac не является обязательным, но вы можете добавить его в параметр -device.

Можешь попробовать: http://www.linux-kvm.org/page/Simple_shell_script_to_manage_your_virtual_machine_with_bridged_networking

Или не стесняйтесь проверить эту страницу: http://www.linux-kvm.org/page/Management_Tools есть инструменты управления, которыми можно пользоваться даже без libvirt.