O VirtualBox dentro do LXD não pode se comunicar com o host do LXD

1

Estou executando um servidor Ubuntu (server-box), que é um contêiner LXD (lxd-box), e o LXD está usando uma ponte ethernet que eu configurei usando este guia. O lxd-box está executando uma instância do VirtualBox (caixa-vbox). server-box, lxd-box e vbox-box estão todos executando o servidor Ubuntu 16.04. O vbox-box está usando a ponte ethernet do VirtualBox para fazer a ponte para o eth0 em lxd-box, que é em si uma ponte para enp5s0 em server-box.

Todos os três estão recebendo um endereço IP da LAN. Todos os três podem se comunicar com qualquer outro cliente de rede local. Além disso, o lxd-box pode se comunicar bem com server-box e vbox-box. No entanto, vbox-box e server-box não podem se comunicar. Especificamente, não posso iniciar uma sessão ssh entre eles em nenhuma direção, enquanto posso iniciar sessões para / de ambos de / para lxd-box. Não é só ssh, eu testei em um punhado de portas apenas iniciando conexões TCP brutas com o netcat. Mesmo comportamento. O ssh é apenas mais conveniente.

Alguém sabe por que isso está acontecendo? Eu suponho que tem a ver com a ponte múltipla que está ocorrendo, mas não tenho certeza. Mais importante, alguém sabe como consertar isso?

    
por lpreams 28.07.2016 / 05:13

2 respostas

2

Eu tive um problema semelhante (embora um cenário ligeiramente diferente do seu) e finalmente consegui resolvê-lo.

Eu acho que quando existem 2 pontes, a primeira é a ponte lxd e a segunda é a que a caixa virtual cria, você se junta a elas através de um dispositivo tuntap.

Aqui estão os detalhes

cenário :

  • ubuntu 16.04 com:
  • lxd 2.0 (com lxdbr0) e vários contêineres
  • máquina virtualbox

Na minha configuração de caixa virtual, disponibilizei o adaptador de rede e conectei-o ao adaptador de ponte, escolhendo lxdbr0. Parece que funcionou, mas então eu encontrei o mesmo problema que você fez, não poderia ssh para host ubuntu, não poderia ssh para lxc recipientes (na mesma ponte) e assim por diante ...

Depois de pesquisar na internet (desculpe, não posso fornecer os links), encontrei esta solução.

Na máquina do Ubuntu 16.04, com privilégios de root:

root@ubuntu:~# ip tuntap add mode tap tap0
root@ubuntu:~# ip link set tap0 up
root@ubuntu:~# brctl addif lxdbr0 tap0
root@ubuntu:~# brctl show

bridge name bridge id       STP enabled interfaces
lxdbr0      8000.4e76f4d676d5   no      tap0

Uma vez que você tenha seu tap0 adicionado à ponte, você pode configurar sua máquina virtual como "conexão do tipo de adaptador de ponte" para conectar a tap0 (que já está na outra ponte).

Parece que você deve criar uma ponte para uma interface em vez de fazer uma ponte para uma ponte.

No cenário, você deve criar o tap0 em sua lxd-box. Essa tap0 será adicionada a duas pontes, a do lxd e a outra do virtualbox.

    
por ayito 09.08.2016 / 15:02
0

Para construir a resposta de @ayito, você também pode criar um dispositivo tap0 persistente. Edite /etc/network/interfaces usando privilégios de root e adicione:

iface tap0 inet manual
    pre-up ip tuntap add mode tap tap0
    up ip link set tap0 up
    post-up brctl addif lxdbr0 tap0
    pre-down brctl delif lxdbr0 tap0
    down ip link set tap0 down
    post-down ip link del tap0

Após salvar, execute sudo ifup tap0

Para validar que começou a correr brctl show . Você deve ver tap0 como uma interface de lxdbr0 .

Sempre que você reiniciar o computador e quiser usar a interface, execute sudo ifup tap0 Nota: você também pode adicioná-lo como um script de inicialização, mas ele deve ser executado depois que lxdbr0 tiver sido iniciado.

No Virtualbox, use um "Adaptador em ponte" conectado a tap0 :

Agora, você deve poder conversar com seus contêineres LXD e configurar facilmente a interface tap0 após a reinicialização.

    
por Caleb 27.06.2017 / 16:56