la solicitud de curl a localhost IPv6 se atasca

9

Un contenedor ventana acoplable de mina expone una interfaz HTTP en el puerto 8500, que se asigna a puerto host 8500. Se no activar IPv6. Esto todavía significa que debería poder acceder a él en localhost: 8500. Se prefiere IPv6, así que termino con una solicitud a [:: 1]: 8500. Este se atasca, nunca regresa.

Al reproducir esto con curl, este comando se atasca:

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

La opción --verbose de curl no revela nada, tampoco lo hace --ascii-trace. Al mismo tiempo, una solicitud al localhost de IPv4 tiene éxito:

curl http://127.0.0.1:8500

dándome el HTML esperado. Si ejecuto un servidor HTTP IPv4 en loopback, usando

python -m SimpleHTTPServer 4001

entonces obtengo mucho HTML para el localhost de IPv4

curl http://127.1:4001

y una falla de conexión adecuada para IPv6:

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

Cosas a tener en cuenta: Docker 1.7.1. IPv6 no está habilitado para el contenedor, por lo tanto, no hay reglas de IPv6 iptable. (ip6tables -v -L no da nada)

Mi pregunta es: ¿por qué la solicitud se atasca y qué hace?

mknecht
fuente
1
¿Nos mostrarías el resultado de "netstat -6 -an"?
Rui F Ribeiro
Sí, Docker está escuchando en ese puerto: tcp6 0 0 :::8500 :::* LISTEN 1648/docker fascinante. ¿Por qué? ¿Y por qué está bloqueando?
mknecht
Escuchando y no configurado, o IPv6 deshabilitado en sysctl, supongo. nginx, apache, lighthttp, ¿agregaría el servidor web en cuestión a la publicación, por favor?
Rui F Ribeiro
Dentro del contenedor, Consul, una tienda de valores clave para la configuración, está escuchando. Pero no creo que sea relevante: el contenedor no ha sido habilitado para IPv6. Esa solicitud nunca debe llegar al cónsul. Sin embargo, no entiendo en qué capa se atasca. En el host, /proc/sys/net/ipv6/conf/all/disable_ipv6produce 0, por lo que IPv6 debería estar habilitado.
mknecht
2
Eso no significa mucho. Puede deshabilitar IPv6 incluso en sysctl y en los núcleos más nuevos, siempre que el programa se una a un socket IPv6, la solicitud se acepta. Un dolor de cabeza, ya que debe pasar por cada demonio que admite IPv6 y deshabilitar la configuración de IPv6.
Rui F Ribeiro

Respuestas:

0

Habilite ipv6 y reenvío 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
fuente
1
Aparentemente, el OP no está tratando de hacer que algo funcione; la pregunta real es "¿Por qué la solicitud se atasca y qué hace?". ¿Su respuesta proporciona una explicación para eso? Si es así, ¿podría aclarar cómo?
fra-san