Accéder au conteneur LXC à partir d'un invité de la boîte virtuelle sur le même hôte

Le context

  • Je développe des sites Web sur mon ordinateur portable Ubuntu (Ubuntu 13.04 64b).
  • Chaque site fonctionne dans un conteneur LXC dédié¹ sur le réseau 10.0.3.x
  • J'ai parfois besoin d'atteindre ces sites à partir d'un invité virtuel avec Windows²

Il fonctionnait «hors de la boîte», mais il y a quelques semaines, il s'arrêtait. Je suppose qu'après une mise à jour d'Ubuntu, est-ce qu'il s'agissait d'une LXC ou d'une Virtualbox ou même d'une mise à jour de "réseau"? Je ne peux pas le dire puisque je ne cours pas ces tests tous les jours.

¹ Pour falsifier des plates-forms diverses et complexes et utiliser uniquement des ressources dont j'ai vraiment besoin.

² Pour les tester sous les browsers Windows.

La question :

Comment configurer mes configurations de réseau Virtualbox / LXC / hôte pour accéder aux sites Web des conteneurs LXC à partir de l'invité de Virtualbox?

Ce que j'ai fait jusqu'ici

Mon configuration actuelle de la boîte virtuelle consiste à avoir 2 maps réseau.

  • Un pont sur wlan0 (pour accéder à Internet)
  • Un pont sur la carte virtuelle LXC lxcbr0 (pour accéder aux conteneurs)

Une chose étrange: je peux faire un ping aux conteneurs LXC à partir de la VM Windows, mais je ne peux pas y accéder en HTTP (browsers ou telnet sur le port 80).

Seuls les contenants réellement réinitiés répondent au ping.

J'ai essayé un tas d'autres configurations, mais je suis plus "devinant" que de comprendre ce qui se passe.

Mon agencement actuel

J'ai configuré un port vers l'avant sur mon hôte avec iptables, comme je le ferais pour rendre un conteneur accessible sur l'set du réseau (c'est en fait ce qu'il fait).

Lorsque je le fais, je peux joindre le conteneur renvoyé à partir de Windows VM.

Mais ce n'est certainement pas une solution propre:

  • Je peux seulement accéder à un conteneur à l'époque (ou je dois utiliser différents ports)
  • J'ai besoin de reconfigurer iptables quand je commute un projet
  • Je donne effectivement access au conteneur dans le monde extérieur
  • Je dois avoir une connection LAN ou WAN active
  • Je ne peux plus utiliser de noms de domaine (j'ai un file hôte dans Windows qui correspond à un ip de conteneur)

Suite à la suggestion de l'user228273, je pourrais find une configuration qui a résolu le problème: d'abord, j'ai créé une interface de prise appelée tap0, et je l'ai expliqué:

 ip tuntap add mode tap tap0 ip link set tap0 up 

si l'une des commands précédentes échoue, c'est probablement parce que vous avez déjà une interface tap0 . Utilisez la command

 ip link show 

pour évaluer la situation et finalement modifier le nom de l'interface. Vous pouvez maintenant append l'interface tap0 au pont par défaut qui sous Ubuntu s'appelle lxcbr0 .

 brctl addif lxcbr0 tap0 

Ensuite, j'ai configuré ma VirtualBox pour utiliser un «Adaptateur ponté» sur l'interface tap0 comme indiqué ci-dessous:

Configuration de VirtualBox

Ensuite, l'instance de VirtualBox et les LXC peuvent "voir" les uns les autres.

NB Toutes les commands précédentes doivent être exécutées en tant qu'administrateur.

A eu exactement le même problème. Presque certainement la "faute" de VirtualBox, qui semble faire des réseaux en réseau, c'est probablement de restr cohérent dans les différentes plates-forms (Mac, Solaris et cette autre). Preuve:

  • Les interfaces réseau VBox bridées n'apparaissent pas dans "brctl show" (comme LXC veth)
  • la documentation a: "VirtualBox utilise un pilote de périphérique sur votre système hôte qui filter datatables à partir de votre carte réseau physique"

Vraiment étrange que ICMP arrive, mais TCP (et probablement d'autres) n'est pas …

Cependant, la documentation a également "vous pouvez toujours utiliser des interfaces TAP pour certaines configurations avancées", alors j'ai étudié l'ajout d'un nouveau TAP à mon pont:

 # ip tuntap add mode tap # brctl addif brY tapX # ip link set tapX up 

Ensuite, ajustez les parameters du réseau VBox pour utiliser tapX au lieu de brY et tout est bien venu (après le redémarrage de l'invité).

Expérimenté avec deux invités partageant le même tapX, pas sûr que ça a bien fonctionné. Probablement plus sûr d'utiliser un robinet pour chaque invité VBox.

Si vous pouvez faire un ping sur la cible, mais ne peut pas accéder aux applications là-bas, il s'agit d'un problème iptables, presque sûr.

À mon avis, pendant la procédure de mise à jour, vous avez obtenu le drapeau du système "net.bridge.bridge-nf-call-iptables = 1" activé dans /etc/systcl.conf .

Si tel est le cas, je ne le supprimerais pas, mais révisez la configuration iptables à la place.