Bonjour,

J'ai monté il y'a quelque temps une instance Nextcloud, et j'ai des soucis pour connecter les clients Android : ils recherchent le server sans fin ou finissent pas un "can't find the host".
A priori j'ai vu que ça pouvais venir du fait que mon instance n'est pas accessible en IPv6.

Maintenant l'existant : l'instance tourne dans Docker avec le docker-compose accessible sur le dépôt Github de nextcloud et je pense que mon problème d'IP vient de là : ma machine est bien accessible mais le conteneur ne veut rien savoir lui, et par exemple cette commande ne fonctionne pas docker exec conteneurLetsEncryptCompanion curl -6 -v https://acme-v02.api.letsencrypt.org/directory

J'avoue que j'ai assez peur de tout casser en bidouillant dans docker pour qu'il accepte IPv6.

Est ce que quelqu'un a déjà rencontré ce problème (peut être qu'il vaut mieux que je demande sur le salon Docker?).
Je suis ouvert à toutes solutions, même si ça implique de balancer tout et de recommencer avec autre chose que docker (il n'y a pas encore grand chose sur l'instance). Peut être même que cette solution aurait ma préférence, j'ai rarement vu quelque chose sensé simplifier la vie la compliquer autant (Ok, mauvaise fois, c'est que je connais pas assez, mais quand même ^^)

Merci d'avance pour votre aide

Salut
Qu'as tu configuré dans le DNS ? Si tu n'as pas mis d'enregistrement AAAA alors aucune raison q'un client utilise IPv6.
Si tu veux le déployer sans bloquer le temps que ça fonctionne bien, tu peut tout à fait faire pointer un autre sous domaine en IPv6 seulement (que un AAAA pas de A) et tester avec sans perturber le reste.
En IPv6 évite le NAT comme en IPv4, ton conteneur est directement accessible via son adresse IPv6 (ou celle du proxy si tu en utilise un).

Je penche pour un soucis de reverse proxy. Comme dit @julienth37 si tu n'as pas mis d'enregistrement AAAA pas de raison quil veuillent acceder à de l'ipv6.
Penche toi du cote de ton reverse proxy, par ailleurs tu peut accéder en v6 a ton serveur et avoir ton reverse proxy qui fait appel a ton container en ipv4...

Déjà il faut en effet un enregistrement AAAA.

Le problème c'est juste que Docker n'a pas été pensé pour l'IPv6 et jusqu'à présent, il n'y a aucune solution parfaite pour avoir de la connectivité IPv6 en accès/connectivité.

Tu as deux solutions :

  • Le proxying direct AKA une IPv6 = un conteneur : ça va demander de la bidouille, potentiellement avec NDP. Je n'aime pas cette solution car Docker est pensé pour de l'IPv4 NAT avant tout, les images sont conçues pour.
  • La dualstack IPv4/IPv6 symétrique = IPv6 NAT à côté de l'IPv4 : c'est un sacrilège de parler d'IPv6 et de NAT (on utilise la solution à un problème sur une autre solution), mais la réalité c'est que ça "juste marche" si tu veux la connectivité IPv6 dans le paradigme Docker.

Pas de solution idéale du coup, j'aurais tendance à quand même préférer la seconde car la plus logique quand on utilise Docker (d'ailleurs Docker supporte désormais nativement ip6tables pour le calquer de son fonctionnement avec iptables).

Si tu ne veux pas choisir, tu peux déplacer ton reverse proxy hors de Docker, et l'utiliser pour pointer vers le conteneur.

Bonjour, merci pour vos réponses.

J'ai un enregistrement AAAA qui pointe vers mon VPS, j'arrive bien à le pinger en IPv6 depuis mon ordi. Par contre quand je teste mon nom de domaine sur ssllabs, il me dit qu'il n'est pas capable de se connecter au server sur l'IPv6. J'ai testé en désactivant toutes les règles ip6tables donc à priori le problème ne vient pas de là.

Par contre en effet, dans la conf du reverse-proxy, je ne vois rien en lien avec de l'IPv6. C'est bien quelque chose comme ça qu'il faut ajouter?

server {
        listen          [::]:80;
        ....
}

Je vais bidouiller avec ces infos. Et puis si je n'arrive à rien, je vais essayer de sortir le reverse-proxy de docker, comme ça si j'ai un problème je saurais d'où ça vient, là je n'arrête pas de me demander si il faut que je m'oriente vers Docker ou les services que je fais tourner 🙂

Merci pour votre temps

    mcartaud Ouais, avec cette ligne tu écoutes sur IPv4 et IPv6.

    Mais comme dit, tu n'as que de l'IPv4 NAT actuellement sur ton install Docker, et les solutions que je t'ai proposées. Si jamais tu optes pour la seconde :

    • Modifie ton /etc/docker/daemon.json et ajoute "experimental: true" et "ip6tables: true"
    • Redémarrer le Docker daemon
    • Recréer ton réseau user-defined bridge pour ton reverse proxy avec "docker network create --ipv6 --subnet subnet mon_reseau" et si t'as pas d'idée pour un subnet go en faire un ici
    • Vérifie que dans le compose tu utilises ce réseau, puis relance tout, enjoy l'IPv6 (et toujours l'IPv4 bien entendu)

    (J'en profite pour faire la pub mais Traefik est le reverse proxy le plus agréable que tu peux utiliser si ton setup est Dockerisé. 😄 )

    Ok, je vais tester tout ça. Merci
    J'ai pas mal entendu parler de Traefik, ça a l'air bien. A la base je voulais rester le plus proche du docker-compose proposé par nextcloud pour m'éviter des problèmes, mais je suis pas sûr que ça ait été une bonne idée 🙂

    Répondre…