web-dev-qa-db-fra.com

VirtualBox dans LXD ne peut pas communiquer avec l'hôte de LXD

J'utilise un serveur Ubuntu (server-box), qui exécute un conteneur LXD (lxd-box), et LXD utilise un pont Ethernet que j'ai configuré en utilisant le guide this . lxd-box exécute une instance de VirtualBox (vbox-box). server-box, lxd-box et vbox-box exécutent tous le serveur Ubuntu 16.04. vbox-box utilise le pontage Ethernet de VirtualBox pour se connecter à eth0 sur lxd-box, qui est lui-même ponté sur enp5s0 sur server-box.

Les trois reçoivent une adresse IP du LAN. Les trois peuvent communiquer avec n'importe quel autre client LAN. De plus, lxd-box peut très bien communiquer avec server-box et vbox-box. Cependant, vbox-box et server-box ne peuvent pas communiquer. Plus précisément, je ne peux pas lancer une session ssh entre eux dans les deux sens, tandis que je peux lancer des sessions vers/depuis les deux depuis/vers lxd-box. Ce n'est pas seulement ssh, j'ai testé sur une poignée de ports en lançant simplement des connexions TCP avec netcat. Même comportement. Ssh est juste plus pratique.

Quelquun sait pourquoi cela se passe? Je suppose que cela a à voir avec les multiples ponts qui se produisent, mais je ne suis pas sûr. Plus important encore, quelqu'un sait-il comment résoudre ce problème?

1
lpreams

J'ai eu un problème similaire (bien que légèrement différent du vôtre) et je l'ai finalement résolu.

Je pense que lorsqu'il y a des ponts ara 2, le premier est le pont lxd et le second est celui créé par la boîte virtuelle, vous les rejoignez via un périphérique tuntap.

Voici les détails

scénario:

  • ubuntu 16.04 avec:
  • lxd 2.0 (avec lxdbr0) et plusieurs conteneurs dedans
  • machine virtualbox

Dans ma configuration de virtualbox, j'ai rendu l'adaptateur réseau disponible et l'ai connecté à l'adaptateur de pont, en choisissant lxdbr0. Cela semblait fonctionner, mais j'ai trouvé le même problème que vous, je ne pouvais pas ssh vers Ubuntu Host, je ne pouvais pas ssh vers des conteneurs lxc (sur le même pont) et ainsi de suite ...

Après une recherche sur Internet (désolé, je ne peux pas fournir les liens), j'ai trouvé cette solution.

Sur une machine Ubuntu 16.04, avec des privilèges 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

Une fois que vous avez ajouté tap0 au pont, vous pouvez configurer votre machine Virtualbox "connexion de type adaptateur de pont" pour vous connecter à tap0 (qui est déjà dans l'autre pont).

Il semble que vous devriez établir un pont vers une interface au lieu de créer un pont vers un pont.

Dans votre scénario, vous devez créer le tap0 dans votre lxd-box. Ce tap0 sera ajouté à 2 ponts, l'un sur lxd et l'autre sur virtualbox.

2
ayito

Pour tirer parti de la réponse de @ayito, vous pouvez également créer un tap0 dispositif. Éditer /etc/network/interfaces en utilisant les privilèges root et ajoutez:

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

Après l'enregistrement, exécutez Sudo ifup tap0

Pour valider qu'il a commencé, exécutez brctl show. Tu devrais voir tap0 comme interface de lxdbr0.

Chaque fois que vous redémarrez votre ordinateur et souhaitez utiliser l'interface, exécutez Sudo ifup tap0 Remarque: vous pouvez également l'ajouter en tant que script de démarrage, mais il doit s'exécuter après lxdbr0 a commencé.

Dans Virtualbox, utilisez un "adaptateur ponté" connecté à tap0:

VirtualBox Network

Vous devriez maintenant pouvoir parler à vos conteneurs LXD et configurer facilement le tap0 interface après redémarrage.

0
Caleb