3 votes

Comment définir une adresse IPv6 statique pour un conteneur LXD ?

Sur un hôte Ubuntu Xenial, j'exécute LXD 2.12 à partir des backports xenial. Alors qu'il est facile de changer l'adresse ipv4 d'un conteneur en une adresse statique depuis l'extérieur du conteneur, je ne peux pas changer son adresse ipv6. Quelle est la bonne façon de procéder ?

J'ai configuré lxd avec un pont lxdbr0 avec IPv4 et IPv6. La partie correspondante dans la configuration ressemble à ceci :

ipv4.address: 10.122.45.1/24
ipv4.nat: "true"
ipv6.address: fd42:7146:f400:1::1/64
ipv6.nat: "true"

Après avoir lancé un conteneur avec Xenial (contxenial), sa ifconfig pour eth0 ressemblait à quelque chose comme ceci :

peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet  HWaddr 00:16:3e:bc:f5:8d
     inet addr:10.122.45.223  Bcast:10.122.45.255  Mask:255.255.255.0
     inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
     inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
     :

Maintenant je voulais changer les deux, son adresse ipv4 ET son adresse ipv6 en adresses ip statiques en utilisant les commandes suivantes :

peter@led:~$ lxc network attach lxdbr0 contxenial eth0
peter@led:~$ lxc config device set contxenial eth0 ipv4.address 10.122.45.71
peter@led:~$ lxc config device set contxenial eth0 ipv6.address fd42:7146:f400:1::71

Finalement, j'ai redémarré mon conteneur.

peter@led:~$ lxc restart contxenial

À ma grande surprise, l'adresse IPv4 a changé comme prévu, mais pas l'adresse IPv6 !

peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet  HWaddr 00:16:3e:bc:f5:8d
     inet addr:10.122.45.71  Bcast:10.122.45.255  Mask:255.255.255.0
     inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
     inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
     :

Cependant, dnsmasq.hosts contient à la fois l'adresse IPv4 modifiée et l'adresse IPv6 modifiée.

peter@led:~$ sudo cat /var/lib/lxd/networks/lxdbr0/dnsmasq.hosts
00:16:3e:bc:f5:8d,id:*,10.122.45.71,[fd42:7146:f400:1::71],contxenial

Qu'est-ce que je fais de travers ? Quelle est la bonne façon d'y parvenir actuellement (depuis LXC/LXD 2.3 ou plus) ?

3voto

Peter Gloor Points 170

De Stéphane Graber, le chef de projet de LXC/LXD, j'ai obtenu ce qui suit réponse à ma question :

L'attribution statique de l'IPv6 ne peut fonctionner qu'en mode DHCP avec état, car sinon SLAAC est utilisé pour attribuer l'adresse.

Vous pouvez activer le DHCP stateful avec :

lxc network set lxdbr0 ipv6.dhcp.stateful true

Mais notez qu'aucune distribution Linux ne gère DHCPv6 par défaut, vous devrez donc également mettre à jour le fichier /etc/network/interfaces de votre conteneur (ou un fichier similaire selon la distribution) afin de gérer DHCPv6.

C'est la partie manquante que je n'ai pu trouver dans aucune documentation. Cela signifie également qu'il n'est pas possible de changer les adresses IPv6 depuis l'extérieur du conteneur de la même manière simple qu'avec IPv4.

Dans mon cas, j'ai dû ajouter la ligne suivante au fichier /etc/network/interfaces.d/50-cloud-init.cfg à l'intérieur du conteneur.

iface eth0 inet6 dhcp

Sans commentaires, cela doit ressembler à quelque chose comme ceci :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp

Le fichier est appelé depuis /etc/network/interfaces. Il peut être différent sur d'autres distributions.

Enfin, cela devrait fonctionner après un redémarrage du conteneur (du moins, cela a fonctionné pour moi).

J'espère que cela aidera d'autres personnes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X