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

Сеть в Linux KVM

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

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

VirtualBox решает проблему, предоставляя опцию внутренней сети.

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

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

QEmu / KVM предоставляет варианты использования НАЖМИТЕ интерфейс на вашем хосте:

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

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

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

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

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

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

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

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

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

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

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