Допустим, я создаю интерфейс моста на 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для объяснения.