Зачем назначать MAC- и IP-адреса на интерфейсе Bridge

Зачем назначать MAC- и IP-адреса на интерфейсе Bridge

Допустим, я создаю интерфейс моста на Linux ( br0) и добавляю к нему несколько интерфейсов ( eth0, tap0, и т. д.). Насколько я понимаю, этот интерфейс действует как виртуальный коммутатор со всеми его интерфейсами/портами, которые я к нему добавляю.

В чем смысл назначения MAC и IP-адреса этому интерфейсу? Действует ли интерфейс как дополнительный порт на коммутаторе/мосте, который позволяет другим портам получать доступ к хост-машине?

Я видел, что на некоторых страницах говорится о назначении IP-адреса мосту. Подразумевается ли назначение MAC-адреса (или оно автоматическое)?

решение1

Поскольку мост — это устройство Ethernet, ему нужен MAC-адрес. Мост Linux может создавать такие вещи, как кадры протокола spanning-tree, и для такого трафика нужен MAC-адрес источника.

Мост нетребоватьIP-адрес. Есть много ситуаций, в которых у вас его не будет. Однако во многих случаях выможетесть один, например:

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

  • Когда ваш "основной" сетевой адаптер является членом моста, так что мост является вашим подключением к внешнему миру. В этом случае, вместо того, чтобы назначать IP-адрес (например) eth0, вы бы назначили его устройству моста.

Если мост естьнеттребуется для маршрутизации IP, то IP-адрес не нужен. Примеры такой ситуации включают:

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

решение2

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

Назначение IP-адреса устройству моста (которое, опять же, на самом деле является виртуальной сетевой картой, подключенной к виртуальному мосту) позволяет вашему хостовому устройству маршрутизировать пакеты в подсеть, созданную мостом и всеми устройствами, подключенными к нему. Отлично!

Хотя сетевые инструменты устройств, такие как iproute2(с командами ip linkи ip addr), позволяют вам видеть виртуальную сетевую карту, подключенную к мосту, также возможно увидеть сам виртуальный мост с помощью brctlпрограммы. brctl showКоманда выведет список всех мостов и подключенных к ним интерфейсов. Вот пример использования iprouteи brctlс мостами Linux и tuntaps:

# ip link add br0 type bridge
# ip tuntap add dev tap0 mode tap
# ip tuntap add dev tap1 mode tap
# ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev br0
# ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev tap0
# ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev tap1
# brctl addif br0 tap0
# brctl addif br0 tap1
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.2e22e593fe8c       no              tap0
                                                        tap1
# ip addr show to 10.0.0.0/24
11: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 10.0.0.1/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
12: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    inet 10.0.0.2/24 brd 10.0.0.255 scope global tap0
       valid_lft forever preferred_lft forever
13: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    inet 10.0.0.3/24 brd 10.0.0.255 scope global tap1
       valid_lft forever preferred_lft forever

Обратите внимание, что в выходных данных под заголовком «интерфейсы» перечислены brctl showследующие элементы:другойинтерфейсы, присоединенные к мосту, в дополнение к br0интерфейсу, который был автоматически добавлен при создании моста. (Я полагаю, Linux не позволяет создавать виртуальный мост без присоединенных устройств, а мосты без устройств автоматически уничтожаются.) Для справки, я не исследовал это в ядре, и я не эксперт по сетям. Я опубликовал это, потому что это, кажется, убедительно объясняет довольно запутанную реализацию виртуальных мостов в Linux. Я не верю, что у самих виртуальных мостов вообще есть MAC-адреса.

решение3

Да, интерфейс моста действует как дополнительный порт.

После man 5 systemd.netdev:

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

решение4

Интерфейсы br0и virbr0перечисленные ip addrи ip linkявляются интерфейсами tap, которые соединяют хост с br0мостом и virbr0мостом соответственно. Такая перегрузка имен, безусловно, может сбивать с толку.

Так что же такое virbr0-nic?

Это не было частью исходного вопроса, но я добавлю свои 2 цента, так как это сбивало меня с толку в прошлом. virbr0-nic— это фиктивный интерфейс, MAC-адрес которого используется мостом virbr0как его собственный MAC-адрес. Этот постоянно присутствующий интерфейс нужен для предотвращения virbr0изменения MAC-адреса при динамическом добавлении или удалении портов из моста. Хост не отправляет трафик из virbr0-nicинтерфейса.

Видетьhttps://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-portsиhttps://www.redhat.com/archives/libvirt-users/2012-September/msg00038.htmlдля объяснения.

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