Создание виртуального интерфейса уровня 2, подключенного через виртуальный мост к eth0

Создание виртуального интерфейса уровня 2, подключенного через виртуальный мост к eth0

Добрый вечер,

У меня возникла сложная проблема: мне нужно создать виртуальный интерфейс для использования с виртуальной машиной, но он должен быть только уровня 2: виртуальная машина будет взаимодействовать с предустановленным MAC-адресом (можно либо задать один для адаптера, который будет использоваться виртуальной машиной, либо виртуальная машина будет маскировать другой предустановленный MAC-адрес).

Большинство решений, которые я уже нашел, связаны с использованием уровня 3 (т. е. IP-адресов), и, к сожалению, эти решения мне не подойдут: конфигурация уровня 3 должна быть выполнена внутри виртуальной машины, а виртуальная сетевая карта и виртуальный коммутатор должны быть настроены только для трафика уровня 2.

Из соображений безопасности и эксплуатации мне вообще не требуется настройка IP-адреса (т. е. только локальная ссылка для IPv4 и IPv6 или полностью отключенный уровень 3).

Проще говоря, мне нужна такая топология:

My VM <-> vnic0 <-> vbr0 <-> eth0 <-> external network

Мне нужно создать виртуальный адаптер vnic0, подключенный (вместе с реальным адаптером eth0) к виртуальному мосту vbr0. Предпочтительно, я ищу файлы конфигурации для RHEL 7.4 / CentOS 7.4, которые позволят конфигурации работать автоматически, без взаимодействия с системным администратором, после перезагрузки. Мне также может понадобиться создать vnic1, vnic2, vnic3 и т. д., все подключенные к vbr0, в будущем.

Использование VLAN не является строго обязательным (можно предположить, что все находится в не-VLAN / собственной VLAN), но если какой-нибудь гений сможет показать мне, как настроить, скажем, маркированный трафик dot1q с собственной VLAN 50 на vnic0, собственной VLAN 51 на vnic1 и т. д., с eth0, функционирующим как магистраль (со всеми или подмножеством VLAN, разрешенными для передачи по ней), вы получите серьезные баллы. :)

Я уже попробовал следующее:

modprobe dummy
ip link set name vnic0 dev dummy0
ip link add vbr0 type bridge
ip link eth0 down
ip link set dev eth0 master vbr0
ip link set dev vnic0 master vbr0
ip link set vbr0 up
ip link set vnic0 up
ip link set eth0 up

Самая большая проблема в том, что моя сеть vnic0 рассылает пакеты, но никогда их не получает. Моя сеть не супер-болтливая, но я ожидал бы увидеть хотя бы несколько широковещательных пакетов, полученных vnic0 через vbr0. Однако этого не происходит. Попытки запустить DHCP в виртуальной машине, подключенной к vnic0, приводят к тайм-ауту, хотя есть прекрасно работающий DHCP-сервер, подключенный к eth0.

решение1

Не используйте фиктивные устройства

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

То, что вы хотите, этомаквланили несколько, которые заменяют ваш vnic*. Несмотря на название, macvlan не имеет ничего общего с тегированием VLAN. macvlan будет работать на уровне 2, будет уже как бы подключен к главному интерфейсу ( eth0), и вы можете выбрать один из нескольких режимов, которые, возможно, ограничат взаимодействие подключенных устройств, если вам это нужно.

решение2

Виртуальные интерфейсы Ethernet — это виртуальные интерфейсы, созданные парами и действующие как коммутационный кабель:

ip link add name nic0 type veth peer name vnic0 address 00:11:22:33:44:55
ip link set dev eth-VM master vbr0
ip link set nic0 up
ip link set vnic0 up

Вы должны получить свободный vnic0MAC-адрес 00:11:22:33:44:55, который вы можете назначить своей виртуальной машине. Они обсуждаются намаквланстраница, упомянутая выше. Я не так много знаю о macvlan, но это должно работать так же хорошо, и вам не придется использовать мост vbr0.

ip link add link eth0 name vnic0 address 00:11:22:33:44:55 type macvlan mode bridge
ip link set vnic0 up

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