Adresse IP publique pour le conteneur LXC

25

Ok, je veux donc savoir comment faire du réseautage sur des conteneurs LXC. Non seulement le genre d’informations vagues que vous obtenez des autres sites Web, mais un véritable guide du débutant pour les faire fonctionner. Comme la plupart des exemples sont essentiellement conçus pour les personnes à tester, je veux exécuter un service sur un serveur web par exemple.

Je suis sous Ubuntu 12.04 LTS et j'ai installé LXC et je peux créer, démarrer et arrêter un conteneur. Mon serveur a de toute évidence une adresse IP publique et j'aimerais savoir comment configurer un conteneur pour qu'il puisse aussi avoir une adresse IP publique. Comme il semble déjà y avoir un pont en place à partir de mon conteneur actuel, il semblerait que je doive donner aux conteneurs une plage DHCP publique pour qu'ils puissent fonctionner ou assigner manuellement une adresse IP statique à mon conteneur.

Si je veux assigner statiquement une adresse IP au conteneur, comment puis-je le faire? Dois-je apporter des modifications à ma configuration de pont sur l'hôte? Est-il préférable de le faire avec l'option MACVLAN?

Toute aide serait appréciée.

    
posée user132151 15.02.2013 - 06:51
la source

3 réponses

22

Mon approche suppose que votre serveur possède une seule carte réseau et que vous devez partager cette carte réseau entre l'hôte et les invités LXC. Cela implique l'utilisation d'un pont. Le pont possède et gère eth0 . L'hôte configure maintenant son propre réseau sur br0 au lieu de eth0 . Les invités LXC sont configurés pour se connecter au pont.

  1. Sur l'hôte, sudo apt-get install bridge-utils .

  2. Sur l'hôte, remplacez eth0 par un pont:

    C'est dangereux. Faites-le mal et vous pourriez être exclu de votre serveur. Assurez-vous d'avoir une connexion locale activée et que l'accès à la console locale fonctionne, de sorte que vous puissiez annuler cette modification si vous rencontrez des problèmes.

    Dans /etc/network/interfaces :

    1. Remplacez auto eth0 par auto br0 .
    2. Remplacer:

      iface eth0 inet dhcp
      

      avec:

      iface br0 inet dhcp
          bridge_ports eth0
      

      Si vous avez une configuration de réseau statique, vous devez remplacer:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      avec:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      Vous modifiez simplement eth0 pour br0 et ajoutez la ligne bridge_ports eth0 .

    3. Redémarrez l’hôte. Si vous le faisiez localement, exécutez sudo ifdown eth0 avant de commencer et sudo ifup br0 après. Notez que le pont peut prendre un peu de temps pour apparaître, alors donnez-lui cinq minutes après le redémarrage avant de supposer que tout est perdu.

  3. Pour déplacer un conteneur LXC nommé vers une adresse IP publique:

    1. Arrêtez le conteneur.
    2. Sur l'hôte, modifiez /var/lib/lxc/container_name/config et modifiez lxc.network.link en br0 .
    3. Sur l'hôte, modifiez /var/lib/lxc/container_name/rootfs/etc/network/interfaces et configurez votre adresse IP publique normalement (DHCP ou une configuration statique si nécessaire). Notez que l'interface s'appelle toujours eth0 du point de vue du conteneur.
    4. Redémarrez le conteneur.
  4. Pour modifier la valeur par défaut des nouveaux conteneurs LXC, modifiez /etc/lxc/default.conf sur l'hôte et remplacez lxc.network.link par br0 .

  5. Si vous n’avez pas besoin du pont NAT fourni par LXC (c’est-à-dire que tous vos conteneurs utiliseront plutôt le nouveau pont), alors sur l’hôte, éditez /etc/default/lxc et modifiez USE_LXC_BRIDGE en "false" , puis sur l'hôte, exécutez sudo service lxc restart .

réponse donnée Robie Basak 21.06.2013 - 13:10
la source
1

Robie, merci beaucoup d’avoir posté cette réponse, je me suis tâtée en essayant d’y aller et c’est la seule méthode qui a fonctionné!

Je pensais que je devrais mentionner quelques points pour comprendre les instructions destinées aux autres administrateurs.

Mon hôte avait plusieurs alias ip statiques assignés à eth0 sur l'invité, par exemple:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

Maintenant, nous ne voulons pas configurer br0 de la même manière, nous voulons juste une adresse IP sans alias comme Robie indiqué ci-dessus.

Disons que vous voulez que 5.5.5.5 soit assigné au conteneur debian8.

Modifiez /var/lib/lxc/debian8/etc/network/interfaces et ajoutez:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

Ensuite, lancez cette commande: route add default gw <gateway-ip, in my case 5.5.5.1>

Après cela, redémarrez le conteneur et tout devrait enfin fonctionner! :)

    
réponse donnée Gregory Wolf 06.06.2016 - 20:16
la source
0

J'ai eu le même problème et j'ai cette solution (rapide et sale).

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

Sur le serveur: route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

Si nécessaire, ajoutez également une route aux routeurs en amont.

Probablement pas la meilleure solution mais cela ne demande pas de gros efforts! À la vôtre.

    
réponse donnée andrea 27.10.2016 - 11:41
la source

Lire d'autres questions sur les étiquettes