Почему в моем случае физический интерфейс, подключенный к мосту, не может получить доступ через Интернет?

Почему в моем случае физический интерфейс, подключенный к мосту, не может получить доступ через Интернет?

У меня такая топология сети:

Видите ли, em1(1.1.8.209) — это физический интерфейс, с которым я могу общаться через Интернет. И я создал два экземпляра виртуальной машины: PID 8740и PID 8817, оба используют сетевой IP-адрес 1.1.8.210/29и 1.1.8.211/29, оба публичные IP-адреса.

теперь я могу общаться с em1 через интернет.

но у меня есть требование: я хочу иметь прямой доступ к двум виртуальным машинам, поэтому я хочу присоединить em1 к br0.

затем я выполнил это:

brctl addif br0 em1

топология становится такой:

введите описание изображения здесь

Однако после выполнения этой команды я получаю сообщение об ошибке, я 1.1.8.209больше не могу общаться. Затем я удалил вложение brctl delif br0 em1, и теперь я могу получить доступ 1.1.8.209.

Почему у меня эта проблема? Я не понимаю, пожалуйста, помогите объяснить почему.

решение1

Когда интерфейс становится портом моста, он больше не участвует в маршрутизации.

Подробности низкого уровня описаны в этом блоге.Правильная изоляция моста Linux:

  1. передать кадр глобальному или специфичному для устройства обработчику протокола (например, IPv4, ARP, IPv6).

    Для мостового интерфейса ядро ​​настроило обработчик приема, специфичный для устройства br_handle_frame(). Эта функция не позволит никакой дополнительной обработки в контексте входящего интерфейса, за исключением кадров STP и LLDP или если включено «brouting». Поэтомуобработчики протоколов никогда не выполняютсяв этом случае.

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

Что необходимо сделать, так это переместить IP-адрес либо в систему (или сетевое пространство имен, или даже на другой свободный конец пары veth в том же месте), другой конец которой подключен к мосту, либо в собственный порт моста, т. е. сам мост. Всегда будет небольшой временной интервал, в течение которого во время этого перемещения будет существовать нарушение, поэтому действия, выполняемые локально для изменения этой конфигурации, не должны зависеть от доступа к сети (например: не должны зависеть от ввода команд удаленно через оболочку с использованием нарушенного маршрута).

Ниже я буду использовать только новые инструменты с новым синтаксисом.

Например:

ip address flush dev em1
ip address add 1.1.8.209/29 dev br0

Вместо этого, другой способ оставить мост без участия в маршрутизации и использовать дополнительныйветКонец пары (в одном и том же сетевом пространстве имен) для участия в маршрутизации может быть:

ip address flush dev em1
ip link add name em1twin type veth peer name br0portem1twin
ip link set br0portem1twin master br0 up
ip link set em1twin up
ip address add 1.1.8.209/29 dev em1twin

В обоих случаях, если маршрут по умолчанию (или другие маршруты) зависели от существования этого адреса, этот маршрут также необходимо добавить снова, поскольку он исчез.

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