Pourquoi git clone échoue en IPv6
Un VPS en IPv6 uniquement ne peut joindre que les serveurs qui publient une adresse IPv6 (un enregistrement DNS AAAA). Or github.com, l'API de GitHub et son registre de conteneurs ghcr.io n'en publient pas. Le message d'erreur ressemble à ceci :
fatal: unable to access 'https://github.com/…': Could not resolve host: github.com
ou, selon la configuration, Network is unreachable. Vous pouvez le vérifier vous-même :
getent ahostsv6 github.com # aucune réponse : pas d'IPv6
getent ahostsv6 debian.org # des adresses en 2001:… : IPv6 OK
Tout GitHub n'est pas concerné : raw.githubusercontent.com, qui sert les fichiers bruts, est joignable en IPv6. Mais le clonage, les git pull et la plupart des téléchargements passent par github.com.
Solution 1 : un service NAT64/DNS64 (la plus simple)
Un service NAT64/DNS64 fait le pont entre votre VPS et les sites encore en IPv4. Son serveur DNS (le DNS64) répond aux noms qui n'ont pas d'IPv6 avec une adresse IPv6 spéciale ; sa passerelle (le NAT64) reçoit le trafic sur cette adresse et le relaie en IPv4. Pour votre VPS, tout se passe comme si GitHub avait l'IPv6 : il n'y a rien d'autre à configurer.
Le service public et gratuit nat64.net fournit trois serveurs DNS64 :
2a00:1098:2b::1
2a00:1098:2c::1
2a01:4f9:c010:3f02::1
Vérifiez ces adresses sur nat64.net avant de les utiliser : elles peuvent changer. Il faut ensuite les déclarer comme serveurs DNS de votre VPS. Regardez d'abord comment votre système gère le DNS :
ls -l /etc/resolv.conf
Si le fichier pointe vers systemd-resolved
C'est le cas si la commande affiche /run/systemd/resolve/stub-resolv.conf. Créez un fichier de réglage :
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/nat64.conf <<'EOF'
[Resolve]
DNS=2a00:1098:2b::1 2a00:1098:2c::1 2a01:4f9:c010:3f02::1
Domains=~.
EOF
systemctl restart systemd-resolved
La ligne Domains=~. fait passer toutes les requêtes par ces serveurs, même si votre interface réseau en annonce d'autres.
Si c'est un fichier ordinaire
Remplacez son contenu par :
nameserver 2a00:1098:2b::1
nameserver 2a00:1098:2c::1
nameserver 2a01:4f9:c010:3f02::1
Vérifier
getent ahostsv6 github.com
git clone https://github.com/git/git.git --depth 1
Une adresse en 2a00:1098:… ou 2a01:4f9:… s'affiche pour github.com, et le clonage fonctionne. Les connexions SSH à GitHub (git@github.com) passent en principe par le même chemin.
Solution 2 : envoyer le code depuis votre ordinateur
Si vous déployez votre propre projet, le VPS n'a pas forcément besoin de parler à GitHub. Votre ordinateur, lui, joint GitHub normalement ; il peut ensuite pousser le code vers le VPS en IPv6. Créez un dépôt vide sur le serveur :
git init --bare /srv/monprojet.git
puis, sur votre ordinateur, ajoutez le VPS comme second dépôt distant :
git remote add vps root@[2001:db8::10]:/srv/monprojet.git
git push vps main
Remplacez 2001:db8::10 par l'adresse de votre VPS. Avec un raccourci dans ~/.ssh/config (voir le guide du VPS IPv6), vps:/srv/monprojet.git suffit. Pour copier des fichiers ponctuellement, rsync ou scp font aussi l'affaire.
Solution 3 : passer par un miroir joignable en IPv6
Pour des fichiers isolés (un script d'installation, un fichier de configuration), raw.githubusercontent.com est joignable en IPv6. Pour des dépôts entiers, vous pouvez héberger un miroir sur une forge qui a l'IPv6, par exemple une instance Forgejo ou Gitea : ces logiciels savent synchroniser automatiquement un dépôt GitHub.
Et Docker, npm, pip ?
La bonne nouvelle : la plupart des dépôts de paquets ont l'IPv6. Les dépôts Debian et Ubuntu, npm (registry.npmjs.org), PyPI (pypi.org) et nodejs.org fonctionnent directement. Pour Docker Hub, utilisez son point d'accès IPv6 registry.ipv6.docker.com. Les images hébergées sur ghcr.io, elles, demandent la solution NAT64.