Avant de commencer, assurez‑vous de disposer de :
Important : SLAAC ne fonctionne pas si votre routeur ne diffuse pas de RA.
Si vos LXC ne reçoivent aucune IPv6, vérifiez ce point en premier.
Ce guide couvre deux architectures distinctes. Choisissez celle qui correspond à votre besoin :
| Cas 1 — Via NPM | Cas 2 — Direct | |
|---|---|---|
| Services exposés via | Nginx Proxy Manager (reverse proxy) | Directement sur Internet |
| SLAAC sur les LXC backends | ❌ Non nécessaire | ✅ Obligatoire |
Groupe de sécurité ipv6 |
Uniquement sur le LXC NPM | Sur chaque LXC exposé |
| IPv6 dans Docker | ✅ Recommandé | ✅ Recommandé |
Les sections 1 à 2.3 sont communes aux deux cas.
La bifurcation intervient à partir de la section 2.4.
OVH DNS AAAA → Routeur IPv6 (RA activés) → Proxmox VE
→ LXC NPM (IPv6 SLAAC + Docker IPv6) → Nginx Proxy Manager
→ LXC backends (IPv4 interne uniquement)
OVH DNS AAAA → Routeur IPv6 (RA activés) → Proxmox VE
→ LXC exposé (IPv6 SLAAC + Docker IPv6) → Service Docker
→ Internet (IPv6 natif)
Consultez la section « Statut » ou « Réseau IPv6 » et notez l’adresse WAN IPv6.
ip -6 addr show | grep "scope global"
Ignorez les adresses commençant par fe80:: (locales uniquement).
inet6 2001:db8:abcd:42::1234/64 scope global dynamic
Dans OVH → Zone DNS, créez un enregistrement AAAA pointant vers votre IPv6 publique.
L’IPv6 expose directement vos machines sur Internet.
Il est donc essentiel de configurer les règles AVANT d’activer les pare‑feux.
L’ordre recommandé :
Autorisez en IPv6 vers l’adresse du LXC concerné :
port 80/tcp (HTTP)
port 443/tcp (HTTPS)
Cas 1 : l’adresse cible est celle du LXC NPM.
Cas 2 : l’adresse cible est celle du LXC exposant le service.
Chemin :
Centre de données → Pare‑feu → Groupe de sécurité
Créez les groupes suivants.
⚠️ Ce groupe est nécessaire uniquement dans le cas 2 (exposition directe).
Dans le cas 1, seul le LXC NPM en a besoin — les LXC backends n’en ont pas besoin.
Ajoutez :
ipv6-icmp (ping IPv6, RA, ND, etc.)ipv6 généralAjoutez :
Ajoutez :
Chemin :
Centre de données → Pare‑feu → Ajouter
Ajoutez les règles suivantes :
Chemin :
Centre de données → Pare‑feu → Options
Vérifiez :
Chemin :
Votre nœud → Pare‑feu → Options
Vérifiez :
Ce qui suit s’applique uniquement au LXC NPM. Les LXC backends n’ont pas besoin d’IPv6 ni du groupe
ipv6— NPM reçoit les connexions IPv6 entrantes et les relaie en IPv4 interne.
Chemin :
Votre conteneur NPM → Pare‑feu → Ajouter
Ajoutez :
Chemin des options :
Votre conteneur NPM → Pare‑feu → Options
Vérifiez :
Ce qui suit s’applique à chaque LXC exposant directement un service sur Internet en IPv6.
Chemin :
Votre conteneur → Pare‑feu → Ajouter
Ajoutez :
Chemin des options :
Votre conteneur → Pare‑feu → Options
Vérifiez :
Cas 1 (via NPM) : SLAAC est nécessaire uniquement sur le LXC NPM. Les LXC backends n’ont pas besoin d’IPv6 publique.
Cas 2 (direct) : SLAAC est nécessaire sur chaque LXC exposant un service directement sur Internet.
eth0)Exemple :
net0: name=eth0,bridge=vmbr0,ip6=slaac
Pour activer SLAAC sur tous vos LXC d’un coup (utile dans le cas 2 avec de nombreux services) :
nano set_slaac.sh
Contenu :
for vmid in $(pct list | awk '{if(NR>1) print $1}'); do
echo "Passage en IPv6 SLAAC pour le LXC $vmid..."
pct set $vmid -net0 name=eth0,ip6=slaac
done
Exécuter :
chmod +x set_slaac.sh
./set_slaac.sh
Cette étape est recommandée dans les deux cas :
Dans chaque LXC concerné, créez ou modifiez :
nano /etc/docker/daemon.json
Contenu :
{
"log-driver": "journald",
"ipv6": true,
"fixed-cidr-v6": "fd00:d0ca:1::/64",
"ip6tables": true,
"experimental": true
}
Redémarrez Docker :
systemctl restart docker
Pour appliquer la configuration Docker IPv6 sur tous vos LXC Docker en une seule passe :
nano update_docker_ipv6.sh
Contenu :
#!/bin/bash
for vmid in $(pct list | grep "docker-" | awk '{print $1}'); do
status=$(pct status $vmid | awk '{print $2}')
echo "Traitement du LXC $vmid (Statut : $status)"
if [ "$status" == "stopped" ]; then
pct start $vmid && sleep 5
fi
pct exec $vmid -- bash -c "cat << 'EOF' > /etc/docker/daemon.json
{
\"log-driver\": \"journald\",
\"ipv6\": true,
\"fixed-cidr-v6\": \"fd00:d0ca:1::/64\",
\"ip6tables\": true,
\"experimental\": true
}
EOF"
if [ "$status" == "stopped" ]; then
pct stop $vmid
else
pct exec $vmid -- systemctl restart docker
fi
done
Exécuter :
chmod +x update_docker_ipv6.sh
./update_docker_ipv6.sh
journalctl, pve-firewall status)--network host en IPv6Tester la sortie :
curl -6 ifconfig.co
Ping IPv6 :
ping6 google.com
Routes :
ip -6 route
RA :
tcpdump -i eth0 icmp6
Docker :
docker run --rm busybox ping6 google.com
Votre infrastructure dispose maintenant d’une chaîne IPv6 complète, adaptée selon votre architecture :
Dans les deux cas, Docker est configuré pour tirer parti d’IPv6, tant pour les connexions entrantes que sortantes.
Auteur : ce guide est proposé par Amaury aka BlablaLinux. Retrouvez l’ensemble de mes services sur blablalinux.be/mes-services-publics/.