J'ai trouvé une autre réponse et a regardé les documents officiels Documentation Docker ipv6 mais j'ai toujours des problèmes avec IPv6 et Docker. Si j'expose des ports publics sur les conteneurs Docker, je peux m'y connecter via IPv6. Depuis l'intérieur du conteneur, je peux envoyer des ping6 vers d'autres hôtes IPv6 sur d'autres fournisseurs. Cependant, si j'essaie d'établir une connexion TCP sur IPv6 (http, telnet, nc, etc.), elle est interrompue et échoue.
Voici mon adaptateur public :
2: ens3: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 56:00:01:46:4e:fe brd ff:ff:ff:ff:ff:ff
inet 45.32.64.134/23 brd 45.32.65.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 2001:19f0:6001:1c12:5400:1ff:fe46:4efe/64 scope global mngtmpaddr dynamic
valid_lft 2591898sec preferred_lft 604698sec
inet6 2001:19f0:6001:1e43:5400:1ff:fe46:4efe/64 scope global mngtmpaddr dynamic
valid_lft 2591898sec preferred_lft 604698sec
inet6 fe80::5400:1ff:fe46:4efe/64 scope link
valid_lft forever preferred_lft forever
El 2001:19f0:6001:1c12:/64
est celle qui m'intéresse (Vultr vous permet de réserver des adresses IPv6 qui survivront aux reconstructions, mais il vous donne aussi une autre adresse pour une raison quelconque). Je configure mon daemon.json
pour Docker comme ceci :
{
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.crt",
"tlskey": "/etc/docker/server-key.pem",
"ipv6": true,
"fixed-cidr-v6": "2001:19f0:6001:1c12::1/80",
"hosts": ["127.0.0.1:2376", "10.10.6.10:2376", "fd://"]
}
et mon conf ndppd comme ceci :
route-ttl 30000
proxy ens3 {
router yes
timeout 500
ttl 30000
rule 2001:19f0:6001:1c12::/64 {
static
}
}
Je peux ping6 bien :
docker exec -it mycontainer ping6 google.com
PING google.com (2607:f8b0:4007:80b::200e): 56 data bytes
64 bytes from 2607:f8b0:4007:80b::200e: seq=0 ttl=56 time=1.166 ms
64 bytes from 2607:f8b0:4007:80b::200e: seq=1 ttl=56 time=0.575 ms
64 bytes from 2607:f8b0:4007:80b::200e: seq=2 ttl=56 time=0.475 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.475/0.738/1.166 ms
ce que je ne pouvais pas faire avant l'exécution de ndppd, mais je ne peux toujours pas me connecter via IPv6 outbound :
docker run -it alpine ash -c "ip -6 addr show dev eth0; ip -6 route show"
191: eth0@if192: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 state UP
inet6 2001:19f0:6001:1c12::242:ac11:7/80 scope global flags 02
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:7/64 scope link tentative
valid_lft forever preferred_lft forever
2001:19f0:6001:1c12::/80 dev eth0 metric 256
fe80::/64 dev eth0 metric 256
default via 2001:19f0:6001:1c12::1 dev eth0 metric 1024
unreachable default dev lo metric -1 error -101
ff00::/8 dev eth0 metric 256
unreachable default dev lo metric -1 error -101
Qu'est-ce que je rate ?
1 votes
Vous ne devriez pas utiliser
/80
réseaux avec IPv6. Certaines choses posent problème si vos réseaux ne sont pas/64
. Voir cette réponse pour des liens sur les problèmes liés à l'utilisation de réseaux de tailles différentes de celles de l'UE./64
.0 votes
Alors, que dois-je utiliser pour mon argument Docker IPv6 fixed-cidr ? Si j'essaie
2001:19f0:6001:1c12::/64
o2001:19f0:6001:1c12::1/64
Je reçois unfailure to add ip to bridge: file exists
erreur. Si j'essaie d'utiliser/128
Je reçois unfailed to allocate gateway. No available addresses on this pool
. Quelle est la bonne façon de subdiviser ce sous-réseau IPv6 ?0 votes
Vous attribuez une adresse de la même manière que pour l'IPv4. Par exemple, vous pouvez attribuer une adresse IPv4 comme suit
10.11.12.13/24
ou, avec IPv6, vous pourriez assigner2001:19f0:6001:1c12::242:ac11:7/64
plutôt que2001:19f0:6001:1c12::242:ac11:7/80
.0 votes
J'ai changé le
daemon.json
pour que Docker utilise unfixed-cidr-v6
de"2001:19f0:6001:1c12::242:ac11:7/64"
. J'ai toujours le même problème. Je peux faire un ping6 vers un hôte IPv6 depuis un conteneur docker, mais je ne peux pas établir de connexion HTTP. (curl -v https://google.com * Rebuilt URL to: https://google.com/ * Hostname was NOT found in DNS cache * Trying 2607:f8b0:4007:802::200e... * Trying 172.217.6.78... * Connected to google.com (172.217.6.78) port 443 (#0)
`0 votes
Je ne répondais pas vraiment à votre question ; je commentais simplement le fait que vous pouvez avoir des problèmes avec des tailles de réseau autres que
/64
. Il semble que vous ayez un problème de routage IPv6. Il se peut que vous n'ayez pas d'IPv6 sur Internet, que le routeur ne soit pas correctement configuré, ou autre chose. Vous devriez attendre qu'un expert de votre système réponde à votre question.