curl demande à IPv6 localhost est bloqué

9

Un de mes conteneurs Docker expose une interface HTTP sur le port 8500, qui est mappée sur le port hôte 8500. Elle n'est pas compatible IPv6. Cela signifie toujours que je devrais pouvoir y accéder sur localhost: 8500. IPv6 est préféré, donc je me retrouve avec une demande à [:: 1]: 8500. Celui-ci est coincé, il ne revient jamais.

En reproduisant ceci avec curl, cette commande est bloquée:

curl -g -6 "http://[::1]:8500"

L'option --verbose de curl ne révèle rien, pas plus que --ascii-trace. Dans le même temps, une demande à l'hôte local d'IPv4 réussit:

curl http://127.0.0.1:8500

me donnant le HTML attendu. Si j'exécute un serveur HTTP IPv4 en boucle, en utilisant

python -m SimpleHTTPServer 4001

alors je reçois beaucoup de HTML pour l'hôte local d'IPv4

curl http://127.1:4001

et une panne de connexion appropriée pour IPv6:

curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused

À noter: Docker 1.7.1. IPv6 n'est pas activé pour le conteneur, il n'y a donc pas de règles IPv6 iptables. (ip6tables -v -L ne donne rien)

Ma question est la suivante: pourquoi la demande est-elle bloquée et quoi faire?

mknecht
la source
1
Pourriez-vous nous montrer la sortie de "netstat -6 -an"?
Rui F Ribeiro
Oui, docker écoute sur ce port: tcp6 0 0 :::8500 :::* LISTEN 1648/docker fascinant. Pourquoi? Et pourquoi bloque-t-il?
mknecht
Écoute et non configuré, ou IPv6 désactivé dans sysctl, je suppose. nginx, apache, lighthttp, voudriez-vous ajouter le serveur Web en question au message, s'il vous plaît?
Rui F Ribeiro
À l'intérieur du conteneur, Consul, un magasin de valeurs-clés pour la configuration, écoute. Mais je ne pense pas que ce soit pertinent: le conteneur n'a pas été compatible IPv6. Cette demande ne devrait jamais parvenir au Consul. Je ne sais pas sur quelle couche il reste coincé. Sur l'hôte, /proc/sys/net/ipv6/conf/all/disable_ipv6renvoie 0, IPv6 doit donc être activé.
mknecht
2
Cela ne veut pas dire grand-chose. Vous pouvez désactiver IPv6 même dans sysctl et dans les noyaux plus récents, tant que le programme se lie à un socket IPv6, la demande est honorée. Une douleur dans le cul, car vous devez parcourir chaque démon qui prend en charge IPv6 et désactiver la configuration IPv6.
Rui F Ribeiro

Réponses:

0

Activez le transfert ipv6 et ebable.

# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
Qteb
la source
1
Apparemment, le PO n'essaie pas de faire fonctionner quelque chose; la vraie question est "Pourquoi la demande est-elle bloquée et quoi faire?". Votre réponse explique-t-elle cela? Si oui, pouvez-vous préciser comment?
fra-san