Я хочу знать, существует ли какой-либо путь кроме использования мостов Linux для соединения интерфейсов от двух виртуальных машин?
Так как я пытаюсь выполнить частную реализацию связующего дерева в виртуальных машинах... лежащих в основе моста Linux, который соединяет обоих, которые виртуальные машины отбрасывают BPDUs.
VirtualBox решает проблему путем предоставления возможности внутренней сети.
Есть ли какая-либо подобная опция, если я использую KVM?
Обновление 01: Включение STP закончило бы тем, что создало топологию, содержащую 3 моста (2VMs и 1 мост Linux, соединяющий обоих VMs) вместо 2 мостов (2VMs).
Похоже, вы могли бы использовать здесь параметр QEMU -netdev socket
, вероятно, версия UDP подойдет лучше.
Также -netdev vde
может работать , хотя это более сложно и требует настройки демона переключения VDE.
Но я бы все равно попытался решить проблему с мостом Linux, с включенной опцией STP, как предложил @Martin. Это простая и очень распространенная установка.
Можно попробовать использовать драйвер Macvtap. Обратите внимание, что это имеет некоторые ограничения - обязательно прочитайте документацию по libvirt.
.QEmu/KVM предоставляет возможность использовать TAP интерфейс на вашем хосте:
когда ваш хост посылает Ethernet кадр на этот интерфейс, он посылается на интерфейс вашего гостя;
когда ваш гость посылает Ethernet кадр на свой интерфейс, он посылается на TAP интерфейс на вашем хосте.
Вы можете создать оба ВМС с TAP интерфейсами. Теперь вам нужно обменяться кадрами между двумя TAP интерфейсами: вы можете сделать это, написав программу, которая перенаправляет Ethernet-кадры между интерфейсами (используя AF_PACKET
, SOCK_RAW
сокеты) на приёмные кадры с одного интерфейса и отправка их на другой.
Люди, предлагающие устройство TAP, были на правильном пути, но вам нужно еще кое-что:
Сначала создайте пару veth . Это пара виртуальных интерфейсов, каждый из которых просто передает любой получаемый трафик другому.
Далее,подключите одну из ваших двух виртуальных машин через macvtap к одному из интерфейсов veth в паре, а другую виртуальную машину - к другому интерфейсу veth.
Наконец, отправьте некоторый трафик.