Чтобы полностью понять и узнать больше о технологии KVM, мне нужно управлять виртуальными машинами и запускать их, используя только командную строку. kvm
команда.
Пока сделал все, что нужно, кроме сетевой части.
Я имею в виду, что в CLI я определил интерфейс Ethernet для гостя как
-device virtio-net-pci,mac=02:01:01:01:01:01
но тогда я не могу найти достаточно документации, чтобы прикреплять его к сетевому интерфейсу хоста (который является интерфейсом подключения LACP ethernet). Это должно быть сделано с -netdev
Вариант CLI.
Мне нужно позволить каждой виртуальной машине общаться друг с другом, с гостем и с другими хостами в локальной сети хоста.
Я нашел ряд (возможно, устаревших) документов о мостах и т.п., но в конце концов все они основаны на libvirt.
Хотя это очень мощный инструмент, он
скрывает слишком много деталей для пользователя и
иногда требует, чтобы вы загрузили файлы 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.
Для 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.