Onde estão os namespaces de rede em lxc / lxd?

2

Estou tentando entender os namespaces no contexto de lxd / lxc .

Eu tenho dois contêineres com os respectivos eth0 vinculados a br1 e br2 no host. Isso é feito através de interfaces Ethernet Virtuais

root@srv:~# ip link
(...)

5: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether fe:f0:ca:e8:c4:ae brd ff:ff:ff:ff:ff:ff
6: br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether fe:45:66:a8:37:a7 brd ff:ff:ff:ff:ff:ff
11: vethHRMPOM@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br1 state UP mode DEFAULT group default qlen 1000
    link/ether fe:f0:ca:e8:c4:ae brd ff:ff:ff:ff:ff:ff link-netnsid 1
27: vethNTG58H@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br2 state UP mode DEFAULT group default qlen 1000
    link/ether fe:45:66:a8:37:a7 brd ff:ff:ff:ff:ff:ff link-netnsid 0

Gostaria de saber onde está o outro lado, digamos, de vethHRMPOM@if10 ?

ip netns list está vazio.

/var/run/netns não existe (este é um Ubuntu 15.10)

ip netns list-id mostra

nsid 0 
nsid 1 

que parecem corresponder ao último elemento no ip list acima. Como posso obter mais informações sobre esses nsid 0 an 1 , pois todos os comandos se referem a um namespace por nome (e não por ID)?

    
por WoJ 24.03.2016 / 08:29

1 resposta

1

I wonder where the other side of, say, vethHRMPOM@if10 is?

Embora eu não saiba como mapear diretamente os dispositivos veth do host para o dispositivo LXC veth, sei como fazer o inverso:

root@server:~# lxc-ls
bugzilla4
root@server:~# lxc-info -n bugzilla4 -p
PID:            7072
root@server:~# mkdir -p /var/run/netns/
root@server:~# ln -sf /proc/7072/ns/net /var/run/netns/bugzilla4
root@server:~# ip netns list
bugzilla4
root@server:~# ip netns exec bugzilla4 ethtool -S eth0
NIC statistics:
     peer_ifindex: 41
root@server:~# ip link show | grep '^41:'
41: vXsomething: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br1 state UP mode DEFAULT group default qlen 1000

Se ethtool não estiver disponível no convidado, acho que você pode simplesmente obter o convidado ifindex e incrementar com um para obter o host ifindex (40 - > 41):

root@server:~# ip netns exec bugzilla4 ip link show eth0
40: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff

Para responder à sua pergunta original: você pode escrever um script que irá sobre cada LXC, obterá o dispositivo host veth e parará se for o seu interesse ( vethHRMPOM@if10 ).

Uma solução melhor, na minha opinião, seria nomear seus dispositivos vet corretamente. Exemplo:

lxc.network.veth.pair = vXbugzilla4

O dispositivo veth é chamado vXbugzilla4 no host:

root@server:~# ip link show vXbugzilla4
41: vXbugzilla4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br1 state UP mode DEFAULT group default qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    
por 24.11.2016 / 02:34