Interface baseada em Macvlan pings do host, mas não do namespace

9

[EDITAR]

O sistema de produção é atualmente um sistema baseado em mistura física e ESXi. Obviamente, nós nunca usaríamos o VirtualBox mesmo para um ambiente de pré-produção! Ele foi usado aqui apenas para restringir rapidamente o problema diretamente na minha área de trabalho.

Obrigado pela explicação do "em espera" no meta!

[/ EDIT]

Minha configuração:

  1. Rede privada vboxnet1 10.0.7.0/24
  2. 1 host, área de trabalho do ubuntu
  3. 1 VM, servidor Ubuntu (VirtualBox)

Layout de endereço:

  1. HOST: 10.0.7.1
  2. VM: 10.0.7.101
  3. VM MAC NAMESPACE : 10.0.7.102

No VM , eu corri os seguintes comandos:

ip netns add mac                        # create a new nmespace
ip link add link eth0 mac0 type macvlan # create a new macvlan interface
ip link set mac0 netns mac

No namespace mac , dentro da VM:

ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0

Então, basicamente, acabamos com: (Como Inception?)

+------------------------+
| Host: 10.0.7.1         |
|                        |
| +--------------------+ |
| | VM: 10.0.7.101     | |
| |                    | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | |                | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+

O que funciona:

  • Ping entre Host e VM
  • Ping entre NS e NS
  • dhclient de NS

O que não funciona:

  • ping entre NS e VM
  • ping entre NS e Host

Onde comecei a enlouquecer:

  • O tcpdump em host (a máquina real) realmente mostra a solicitação ARP E responde
  • tcpdump em NS mostra solicitações ARP enviadas ao host
  • O tcpdump em VM faz toda a bagunça funcionar (!) - > ping começa a obter respostas quando o tcpdump é iniciado na VM?!?

Então, aposto que você estava ansioso por isso, minha pergunta é: como fazer isso funcionar? Eu suspeito que algo está errado com o ARP no macvlan dentro do NS, mas não consigo descobrir o que exatamente ...

Btw, fiz as mesmas experiências com a interface mac0 diretamente na VM (sem namespace) e funcionou perfeitamente.

    
por yadutaf 20.10.2013 / 15:52

1 resposta

12

OK, então, para a posteridade, o fato de o tcpdump fazer tudo de repente funcionar deveria me colocar no caminho certo. O que faz internamente é mudar o eth0 para o modo promíscuo. Ou seja, eth0 renderá todo o tráfego da rede, não apenas aquele com o principal MAC

do servidor

No entanto, é exatamente assim que macvlan funciona: ele adiciona um novo endereço MAC virtual secundário que o adaptador de rede "físico" (que é uma VM) não conhece.

Portanto, a solução alternativa é manualmente: ifconfig eth0 promisc

Espero que ajude!

    
por 21.10.2013 / 21:21