Move o dispositivo de rede entre namespaces da rede Linux

1

No Linux, configure 2 namespaces de rede, ns1 e ns2. "ip netns list" pode ver os 2 namespaces da rede. Mova um dispositivo de rede do namespace raiz do Linux para ns1, de ns1 para ns2 e, em seguida, exclua ns2, espere que o dispositivo de rede possa voltar para ns1, mas o resultado real é que eth1 está de volta ao namespace da raiz raiz do Linux. Não tenho certeza se é como esperado.

Aqui está o cenário do teste de detalhes:

  1. ip netns adicionam ns1
  2. ip netns adicionam ns2
  3. conjunto de links ip eth1 netns ns1
  4. ip netns exec ns1 conjunto de links ip eth1 netns ns2
  5. ip netns do ns2

Resultado esperado: a eth1 estará em ns1

Resultado real: o eth1 está de volta no namespace raiz do Linux 1

Pergunta: existe algum método para realizar tal cenário para garantir que o dispositivo possa estar de volta ao ns1 não ao namespace da rede raiz do Linux 1?

    
por Pamela Mei 15.06.2018 / 09:52

1 resposta

0

Tanto quanto sei, não há como impor interfaces de rede "físicas" a um namespace de rede diferente do namespace de rede raiz. Ao contrário do comentário de Patrick, o kernel do Linux considera o namespace da rede como plano (veja ioctl_ns - ioctl () operações para namespaces do Linux , que menciona explicitamente que somente os namespaces PID e usuário são hierárquicos).

Como não há hierarquia para namespaces de rede definidos (o que seria difícil de aplicar a pilhas, endereços e tabelas de rotas de IP), o Linux possui a regra de retorno para casa que move as interfaces de rede de volta ao namespace de rede. criado por init (1).

Tudo que o ip netns add ... faz é criar um novo namespace de rede chamando unshare() e, em seguida, liga-o em /run/netns/ns1 para mantê-lo flutuando vivo. O próximo ip nets add ... começa de novo, vincula a montagem de outro namespace de rede em /run/netns/ns2 . Dois namespaces de rede completamente não relacionados.

    
por 25.06.2018 / 23:08