Em um host Docker (que não configurei; de qualquer forma, não estou muito familiarizado com o Docker), percebi que não entendo os nomes das interfaces:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 5e:44:5a:26:82:e7 brd ff:ff:ff:ff:ff:ff
8: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether ae:b3:52:68:1d:5b brd ff:ff:ff:ff:ff:ff
12: br-7fef86ec14bd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 76:d3:a0:d7:73:0a brd ff:ff:ff:ff:ff:ff
33: vethc35030f@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-7fef86ec14bd state UP mode DEFAULT group default
link/ether 6e:b1:3e:85:88:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
ip -d link show dev vethc35030f
33: vethc35030f@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-7fef86ec14bd state UP mode DEFAULT group default
link/ether 6e:b1:3e:85:88:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 1 minmtu 68 maxmtu 65535
veth
bridge_slave [...]
Então vethc35030f
não só soa como veth
, na verdade é um veth
.
Como pode ser @if2
? A documentação diz que veth
as interfaces são sempre criadas em pares, o nome da interface pareada ou (se em um namespace diferente) número é a parte depois do @
. Não estou ciente de nenhuma possibilidade de alterar o veth
peer mais tarde, especialmente não para uma interface de um tipo diferente.
somename@if2
é algo que eu esperaria de uma macvlan
interface (ou similar), mas não é o caso aqui.
Os contêineres do Docker usam namespaces de rede para sua separação.
Por exemplo, se na minha máquina eu executo
Agora no host posso ver que foi criada esta interface:
Observe o número da interface 134.
Dentro do recipiente eu vejo
Observe que o número da interface é 2 e faz referência a
if134
.Portanto, o host veth faz referência ao número da interface dentro do namespace do contêiner (@if2), e a interface dentro desse namespace faz referência à instância do host (@if134).
Se eu desligar esse contêiner e iniciar outro, o 134 se torna 136, mostrando que ele aumenta em 2 a cada vez, por causa das duas interfaces que a criação veth faz.