a solicitação de ondulação para o host local IPv6 fica travada

9

Um contêiner de docker meu expõe uma interface HTTP na porta 8500, que é mapeada para a porta 8500 do host. Ele não está ativado para IPv6. Isso ainda significa que eu devo acessá-lo no localhost: 8500. O IPv6 é preferido, então eu termino com uma solicitação para [:: 1]: 8500. Este fica preso, nunca retorna.

Reproduzindo isso com curl, este comando fica preso:

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

A opção --verbose de curl não revela nada, nem --ascii-trace. Ao mesmo tempo, uma solicitação para o host local do IPv4 é bem-sucedida:

curl http://127.0.0.1:8500

dando-me o HTML esperado. Se eu executar um servidor HTTP IPv4 no loopback, usando

python -m SimpleHTTPServer 4001

então recebo muito HTML para o host local do IPv4

curl http://127.1:4001

e uma falha de conexão adequada para IPv6:

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

Pontos a serem observados: Docker 1.7.1. O IPv6 não está ativado para o contêiner, portanto, não há regras de tabela de IPv6. (ip6tables -v -L não dá nada)

Minha pergunta é: Por que a solicitação fica bloqueada e está fazendo o quê?

mknecht
fonte
1
Você nos mostraria a saída de "netstat -6 -an"?
Rui F Ribeiro
Sim, o docker está ouvindo nessa porta: tcp6 0 0 :::8500 :::* LISTEN 1648/docker fascinante. Por quê? E por que está bloqueando?
Mknecht #
Ouvindo e não configurado, ou IPv6 desativado em sysctl, eu acho. nginx, apache, lighthttp, você anexaria o servidor da Web em questão à postagem, por favor?
Rui F Ribeiro
Dentro do contêiner, o Consul, um armazenamento de valores-chave para configuração, está escutando. Mas não acho relevante: o contêiner não foi ativado para IPv6. Esse pedido nunca deve chegar ao Consul. Eu não entendo em qual camada ela fica presa. No host, /proc/sys/net/ipv6/conf/all/disable_ipv6gera 0, portanto, o IPv6 deve estar ativado.
Mknecht #
2
Isso não significa muito. Você pode desativar o IPv6 mesmo no sysctl e nos kernels mais recentes, desde que o programa se ligue a um soquete IPv6, a solicitação será atendida. Uma dor de cabeça, pois você deve passar por cada daemon que suporta IPv6 e desativar a configuração do IPv6.
Rui F Ribeiro

Respostas:

0

Ative o encaminhamento ipv6 e 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
fonte
1
Aparentemente, o OP não está tentando fazer algo funcionar; a pergunta real é "Por que a solicitação fica bloqueada e está fazendo o quê?". Sua resposta fornece uma explicação para isso? Em caso afirmativo, você pode esclarecer como?
fra-san