Ok, je veux donc savoir comment faire du réseautage sur des conteneurs LXC. Pas simplement le type 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 configurés pour permettre aux utilisateurs de tester, je souhaite exécuter un service sur un ... comme un serveur Web par exemple.
Je suis sous Ubuntu 12.04 LTS et LXC est installé et je peux créer, démarrer et arrêter un conteneur. Mon serveur a évidemment une adresse IP publique et je voudrais savoir comment configurer un conteneur afin qu’il puisse également avoir une adresse IP publique. Puisqu'il semble déjà y avoir un pont en place par rapport à mon conteneur actuel, il me semble que je dois soit donner aux conteneurs une plage DHCP publique afin qu'ils puissent fonctionner, soit attribuer manuellement une adresse IP statique à mon conteneur.
Si je veux affecter de manière statique une adresse IP au conteneur, comment puis-je le faire? Dois-je modifier la configuration de ma passerelle sur l'hôte? Est-il préférable de le faire avec l'option MACVLAN?
Toute aide serait appréciée.
Mon approche suppose que votre serveur possède une seule carte réseau et que vous devez partager cette NIC 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.
Sur l'hôte, Sudo apt-get install bridge-utils
.
Sur l'hôte, remplacez eth0
par un pont:
Ceci est dangereux. Corrigez-le et vous risqueriez d’être bloqué sur votre serveur. Assurez-vous d’avoir un login local activé et que l’accès à la console locale fonctionne pour pouvoir annuler cette modification si vous rencontrez un problème.
Dans /etc/network/interfaces
:
auto eth0
par auto br0
.Remplacer:
iface eth0 inet dhcp
avec:
iface br0 inet dhcp
bridge_ports eth0
Si vous aviez une configuration réseau statique, alors vous remplaceriez:
iface eth0 inet static
address ...
netmask ...
gateway ...
etc.
avec:
iface br0 inet static
bridge_ports eth0
address ...
netmask ...
gateway ...
etc.
Vous changez simplement eth0
pour br0
et vous ajoutez la ligne bridge_ports eth0
.
Redémarrez l'hôte. Si vous faites cela localement, alors exécuter Sudo ifdown eth0
avant de commencer, puis Sudo ifup br0
le fera également. Notez que le pont peut prendre un peu de temps à se lever, donc donnez-le cinq minutes après le redémarrage avant de supposer que tout est perdu.
Pour déplacer un conteneur LXC nommé vers une adresse IP publique:
/var/lib/lxc/container_name/config
et remplacez lxc.network.link
par br0
./var/lib/lxc/container_name/rootfs/etc/network/interfaces
et configurez votre IP publique comme vous le feriez normalement (DHCP ou une configuration statique si nécessaire). Notez que l'interface s'appelle toujours eth0
du point de vue du conteneur.Pour modifier la valeur par défaut des nouveaux conteneurs LXC, éditez /etc/lxc/default.conf
sur l'hôte et remplacez lxc.network.link
par br0
.
Si vous n'avez pas du tout besoin du pont NAT fourni par LXC (c'est-à-dire que tous vos conteneurs utiliseront le nouveau pont à la place), modifiez ensuite /etc/default/lxc
de l'hôte et changez le USE_LXC_BRIDGE
en "false"
, puis Exécuter l'hôte Sudo service lxc restart
.
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
En outre, si nécessaire, ajoutez une route aux routeurs en amont.
Probablement pas la meilleure solution mais ne demande pas beaucoup d'effort! À votre santé.
Robie, merci beaucoup d'avoir posté cette réponse. Je me suis taraudée pour essayer de faire avancer les choses et c'est la seule méthode qui a fonctionné!
Je pensais devoir mentionner quelques points que j'avais découverts afin de clarifier les instructions destinées aux autres administrateurs.
Mon hôte avait plusieurs alias IP statiques attribué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 simplement une adresse IP sans alias comme Robie indiqué ci-dessus.
Supposons donc que vous souhaitiez que 5.5.5.5 soit affecté au conteneur debian8.
Éditez /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.
Puis émettez 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! :)