Сетевое взаимодействие в Linux KVM

Сетевое взаимодействие в Linux KVM

Я хочу узнать, есть ли другой способ, кроме использования мостов Linux, соединить интерфейсы двух виртуальных машин?

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

VirtualBox решает эту проблему, предоставляя возможность использования внутренней сети.

Есть ли аналогичная опция, если я использую KVM?

Обновление-01:Включение STP приведет к созданию топологии, содержащей 3 моста (2 виртуальные машины и 1 мост Linux, соединяющий обе виртуальные машины) вместо 2 мостов (2 виртуальные машины).

решение1

Похоже, здесь можно использовать -netdev socketвариант QEMU, возможно, версия UDP подойдет лучше.

Также -netdev vdeможет работать, хотя это сложнее и требует настройки демона коммутатора VDE.

Но я бы все равно попытался преодолеть проблему с мостом Linux, включив опцию STP, как предложил @Martin. Это простая и очень распространенная настройка.

решение2

Вы можете попробовать использовать драйвер macvtap. Обратите внимание, что он имеет некоторые ограничения — обязательно прочтите документацию libvirt об этом.

решение3

QEmu/KVM предоставляет возможность использоватьКРАНинтерфейс на вашем хосте:

  1. когда ваш хост отправляет Ethernet-кадр на этот интерфейс, он отправляется на интерфейс вашего гостя;

  2. Когда ваш гость отправляет Ethernet-кадр на свой интерфейс, он отправляется на TAP-интерфейс вашего хоста.

Вы можете создать обе VMS с интерфейсами TAP. Теперь вам нужно обменять кадры между двумя интерфейсами TAP: вы можете сделать это, написав программу, которая пересылает кадры Ethernet между интерфейсами (используя AF_PACKETсокеты SOCK_RAW)получение кадровиз одного интерфейса иотправкаих к другому.

решение4

Люди, предлагающие устройство TAP, были на правильном пути, но вам нужно еще кое-что:

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

Затем подключите одну из двух виртуальных машин через macvtap к одному из интерфейсов veth в паре, а другую виртуальную машину — к другому интерфейсу veth.

Наконец, отправьте немного трафика.

Связанный контент