web-dev-qa-db-fra.com

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

Sur un hôte Ubuntu Xenial, j'exécute LXD 2.12 à partir de xenial-backports. Bien qu'il soit facile de changer une adresse ipv4 de conteneur en une adresse statique de l'extérieur du conteneur, je ne peux pas changer son adresse ipv6. Quel est le bon moyen de le faire?

J'ai configuré lxd avec un pont lxdbr0 avec IPv4 et IPv6. La partie liée 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), son ifconfig pour eth0 ressemblait à 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 à la fois son adresse IPv4 ET son adresse IPv6 en adresses IP statiques à l'aide des 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

Enfin, 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
     :

Toutefois, 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 mal? Quelle est la bonne façon d’y parvenir (à partir de LXC/LXD 2.3 ou supérieur)?

3
Peter Gloor

De Stéphane Graber, le chef de projet de LXC/LXD, j'ai les informations suivantes réponse à mon problème :

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

Vous pouvez activer le DHCP avec état avec:

lxc network set lxdbr0 ipv6.dhcp.stateful true

Cependant, notez qu'aucune distribution Linux n'utilise DHCPv6 par défaut. Par conséquent, vous devrez également mettre à jour le fichier/etc/network/interfaces de votre conteneur (ou similaire en fonction de la distribution) pour exécuter DHCPv6.

C'était 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 de l'extérieur du conteneur de la même manière simple que cela peut être fait avec IPv4.

Dans mon cas, j'ai dû ajouter la ligne suivante à /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 ça:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp

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

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

J'espère que cela aide les autres aussi.

3
Peter Gloor