No meu host Ubuntu 22.04, criei uma rede Docker com o driver de ponte e iniciei um contêiner nessa rede.
Executando ip addr
no meu host, vejo essas duas interfaces:
5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
valid_lft forever preferred_lft forever
inet6 fe80::42:d4ff:fe4f:b939/64 scope link
valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
valid_lft forever preferred_lft forever
Claramente, essas duas interfaces estão relacionadas, pois a segunda lista a primeira como "mestre". Qual é a relação?
Algum contexto para a pergunta: na verdade, tenho duas redes Docker com um contêiner dentro de cada uma. Usando o iptables, configurei o NAT entre eles (ou, pelo menos, acho que sim) e estou tentando fazer ping de um contêiner para o outro. Executando o Wireshark no host, vejo o pacote ICMP entrar na interface da ponte e sair na interface veth (em vez da outra ponte).
Um dispositivo de ponte é um comutador virtual. Uma
veth
interface é um cabo ethernet virtual que conecta o contêiner ao "switch": quando você cria um dispositivo veth, obtém duas interfaces; O Docker coloca uma interface dentro do container (que ficaeth0
dentro do container), e a outra ponta do dispositivo é conectada à ponte.Este artigo tem alguns detalhes adicionais sobre dispositivos veth e uma visão geral de vários outros tipos de interface virtual.