Como você suspeita, o @if13
se refere ao número na primeira coluna, que é o ifindex
number (pelo menos, "ifindex" é o nome da variável exposta pelo libnl, usado para falar netlink para o kernel para obter este tipo de informação). Quando o número existe no mesmo namespace, o utilitário ip mostra o nome associado ao número em vez do número (por exemplo, myvlan@eth0
).
Você também pode ver o campo 'link-netnsid', que é outro inteiro, este identificando o namespace que contém o link (ou o outro extremo de um par veth, como você tem aqui, ou manipulando a outra extremidade do dispositivo, como o namespace cujo endereço IP é usado para um dispositivo de encapsulamento). Você pode listar aqueles com ip netns list-id
(pelo menos nas versões recentes do iproute2). Se o namespace estiver montado no lugar normal, ele mostrará o nome do namespace da rede ao lado do ID.
exemplos:
$ sudo ip link add name veth1 type veth peer name veth2
$ ip link show | grep veth
32: veth2@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
33: veth1@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group
$ sudo ip netns add examplens
$ sudo ip link setns examplens dev veth2
$ ip link show | grep -a1 veth
33: veth1@if32: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default
link/ether e2:99:ce:05:64:a4 brd ff:ff:ff:ff:ff:ff link-netnsid 2
$ ip netns list-id
nsid 0
nsid 1
nsid 2 (iproute2 netns name: examplens)
$ sudo ip -n examplens link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
32: veth2@if33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 3a:89:30:01:4a:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
Acima, criamos um par de veth e podemos ver os dois fins mostrando o nome do outro lado. Em seguida, criamos um netns chamado examplens
e movemos veth2 para ele. Agora ip não sabe mais o nome do peer de veth1, mas ainda tem o ifnumber, então ele mostra que (if32), o que podemos ver é o que era antes de ser movido. Nós também vemos que o link está em netnsid (nsid) 2, que vemos como exemplos.
Listar os links dentro de examplens mostra veth2, com o peer tendo ifnumber 33 no netnsid 0.
Infelizmente, o utilitário ip não ajuda a encontrar onde o nsid está quando não está vinculado e a entrar em /var/run/netns
(que é onde a ligação ip
utility monta seus netns criados para dar um nome a eles) . Muitos (a maioria - todos?) Outros utilitários não parecem fazer isso, incluindo o docker, então não há muita ajuda em encontrar o outro lado do host, fazendo com que os usuários façam uma busca manual por outros namespaces de rede (por exemplo todas as entradas únicas em / proc / * / ns / net).
Em suma, isso ajuda a encontrar o link no host quando você conhece a lista de links do contêiner, mas não encontra muito o contêiner quando você tem a lista de links do host.
Uma última nota sobre o nsid
s: eles são únicos por netns. nsid 0
do host não é o mesmo namespace que nsid 0
no namespace do exemplo no meu exemplo, por exemplo.