Curl não retorna ao ipv4

1

Eu tenho o gentoo build com ipv6 e ipv4 configurado para localhost

/ etc / hosts

# IPv4 and IPv6 localhost aliases
127.0.0.1   sunils-pc.homenetwork sunils-pc localhost
::1     sunils-pc.homenetwork sunils-pc localhost

Eu habilitei o ipv6 forward como abaixo

sunils@sunils-pc ~ $ cat /proc/sys/net/ipv6/conf/all/forwarding
1

sunils@sunils-pc ~ $ cat /proc/sys/net/ipv4/conf/all/forwarding
1

Eu executei o docker swarm com o contêiner docker expondo o servidor da web no 8080. Eu posso acessar o site usando o comando abaixo

curl -4 http://localhost:8080/

Mas quando tento acessá-lo usando curl http://localhost:8080/ , ele fica travado por tempo infinito. A saída detalhada mostra sua tentativa de alcançar o serviço no endereço ipv4 e trava indefinidamente sem retornar ao ipv4.

sunils@sunils-pc ~ $ curl -v http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.61.0
> Accept: */*
> 

Não sei onde devo investigar mais. Estou executando o gentoo linux com o kernel ativado para ipv6.

== Atualizar

Quando eu uso o ipv4 eu recebo a resposta HTTP apropriada no terminal, mas no caso do ipv6 ele fica indefinidamente.

sunils@sunils-pc ~ $ curl -4 -v http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.61.0
> Accept: */*
> 
< HTTP/1.1 200 
< Set-Cookie: XSRF-TOKEN=e20b76f1-78c3-473c-a518-da2519983985; Path=/
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Content-Type: text/html;charset=UTF-8
< Content-Language: en-US
< Transfer-Encoding: chunked
< Date: Wed, 26 Sep 2018 17:13:11 GMT
< 
<!doctype html>
...
    
por Xinus 26.09.2018 / 18:53

1 resposta

1

Parece que você está se conectando com êxito à porta via ipv6, de acordo com a seguinte mensagem:

* Connected to localhost (::1) port 8080 (#0)

Como a conexão entrou no estado ESTABLISHED, o curl considera isso como uma conexão bem-sucedida ao host IPv6 e está correta.

A próxima coisa que acontece é que o cliente curl envia a solicitação HTTP para o localhost (:: 1) na porta 8080. No entanto, o servidor nunca responde com o documento que você espera.

Não há razão para que o curl tente novamente com o IPv4, pois a conexão foi estabelecida com o IPv6, no entanto, o servidor não enviou a carga HTTP.

Parece que o problema pode estar no fato de o servidor não estar adequadamente vinculado à porta IPv6; há duas instâncias do servidor executando ambos tentando se vincular à porta 8080 do IPv6, ou outro problema com o servidor sendo ligado à porta IPv6. Porta IPv6 que não é replicada quando você usa o IPv4.

    
por 26.09.2018 / 20:58