Digamos que eu crie uma interface bridge no Linux ( br0
) e adicione algumas interfaces a ela ( eth0
,, tap0
etc.). Meu entendimento é que essa interface funciona como um switch virtual com todas as interfaces/portas que eu adiciono a ela.
Qual é o significado de atribuir um endereço MAC e um endereço IP a essa interface? A interface atua como uma porta adicional no switch/ponte que permite que outras portas acessem a máquina host?
Já vi algumas páginas falarem sobre a atribuição de um endereço IP a uma ponte. A atribuição MAC está implícita (ou automática)?
Responder1
Como uma ponte é um dispositivo Ethernet, ela precisa de um endereço MAC. Uma ponte Linux pode originar coisas como quadros de protocolo spanning-tree, e tráfego como esse precisa de um endereço MAC de origem.
Uma ponte nãoexigirum endereço IP. Existem muitas situações em que você não terá um. No entanto, em muitos casos vocêpoderiatenha um, como:
Quando a ponte atua como gateway padrão para um grupo de contêineres ou máquinas virtuais (ou mesmo interfaces físicas). Neste caso é necessário um endereço IP (porque o roteamento acontece na camada IP).
Quando sua NIC "primária" é membro da ponte, de modo que a ponte seja sua conectividade com o mundo exterior. Nesse caso, em vez de atribuir um endereço IP a (por exemplo)
eth0
, você o atribuiria ao dispositivo ponte.
Se a ponte estivernãonecessário para roteamento IP, então não precisa de um endereço IP. Exemplos desta situação incluem:
- Quando a ponte está sendo usada para criar uma rede privada de dispositivos sem conectividade externa ou com conectividade externa fornecida por meio de um dispositivo diferente da ponte.
Responder2
O dispositivo de ponte listado com seus outros dispositivos de rede não representa a ponte virtual, mas sim uma NIC virtual conectada à ponte. Se você tivesse uma ponte física conectada a dispositivos de rede físicos, também não veria a ponte física listada em seus dispositivos de rede - mas veria sua NIC conectada à ponte, que obviamente tem seu próprio endereço MAC, como qualquer outro dispositivo de rede.
Atribuir um endereço IP ao dispositivo de ponte (que, novamente, é na verdade uma NIC virtual conectada à ponte virtual) permite que seu dispositivo host roteie pacotes para a sub-rede criada pela ponte e todos os dispositivos conectados a ela. Organizado!
Embora ferramentas de dispositivos de rede como iproute2
(com os comandos ip link
e ip addr
) permitam ver a NIC virtual conectada à ponte, também é possível ver a própria ponte virtual com o brctl
programa. O brctl show
comando listará todas as pontes e suas interfaces anexadas. Aqui está um exemplo usando iproute
e brctl
com pontes e tuntaps Linux:
# 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
Observe que o que está listado em "interfaces" na saída de brctl show
são osoutrointerfaces anexadas à ponte, além da br0
interface que foi adicionada automaticamente quando a ponte foi criada. (Acho que o Linux não permite a criação de uma ponte virtual sem dispositivos conectados, e pontes sem dispositivos são destruídas automaticamente.) Só para constar, não pesquisei isso no kernel, nem sou um especialista em redes. Postei isso porque parece explicar de forma convincente a implementação bastante confusa de pontes virtuais no Linux. Não acredito que as próprias pontes virtuais tenham endereços MAC.
Responder3
Sim, a interface bridge atua como uma porta adicional.
Depois man 5 systemd.netdev
:
Um dispositivo bridge é um switch de software, e cada um de seus dispositivos escravos e a própria bridge são portas do switch.
Responder4
As br0
interfaces virbr0
e listadas por ip addr
e ip link
são interfaces tap que conectam o host à br0
ponte e virbr0
à ponte, respectivamente. Esta sobrecarga de nomes pode certamente ser confusa.
Então, o que é virbr0-nic
?
Isso não fazia parte da pergunta original, mas acrescentarei meus 2 centavos aqui, pois isso me confundiu no passado. virbr0-nic
é uma interface fictícia cujo endereço MAC é usado pela virbr0
ponte como seu próprio endereço MAC. Essa interface sempre presente existe para evitar que virbr0
o endereço MAC do seja alterado quando portas são adicionadas ou removidas dinamicamente da ponte. O host não envia nenhum tráfego pela virbr0-nic
interface.
Verhttps://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-portsehttps://www.redhat.com/archives/libvirt-users/2012-September/msg00038.htmlpara uma explicação.