ローカルホスト用にipv6とipv4を構成したgentooビルドがあります
/ etc/hosts
# IPv4 and IPv6 localhost aliases
127.0.0.1 sunils-pc.homenetwork sunils-pc localhost
::1 sunils-pc.homenetwork sunils-pc localhost
以下のようにipv6転送を有効にしました
sunils@sunils-pc ~ $ cat /proc/sys/net/ipv6/conf/all/forwarding
1
sunils@sunils-pc ~ $ cat /proc/sys/net/ipv4/conf/all/forwarding
1
Dockerコンテナを使用してDockerSwarmを実行し、8080でWebサーバーを公開しました。以下のコマンドを使用してWebサイトにアクセスできます。
curl -4 http://localhost:8080/
しかし、curl http://localhost:8080/
を使用してアクセスしようとすると、無限にハングします。詳細な出力から、ipv4アドレスでサービスに到達しようとしていることを示し、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: */*
>
さらにどこを調査すればよいかわかりません。私はipv6対応カーネルでgentoolinuxを実行しています。
==更新
Ipv4を使用すると、端末で適切なHTTP応答が得られますが、ipv6の場合は無期限にハングします。
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>
...
次のメッセージに従って、ipv6経由でポートに正常に接続しているようです。
* Connected to localhost (::1) port 8080 (#0)
接続がESTABLISHED状態に入ったため、curlはこれをIPv6ホストへの接続が成功したと見なし、正しいです。
次に発生するのは、curlクライアントがHTTP要求をポート8080のlocalhost(:: 1)に送信することです。ただし、サーバーは期待するドキュメントで応答しません。
この時点では、接続がIPv6で確立されたため、curlがIPv4で再試行する理由はありませんが、サーバーはHTTPペイロードを送信しませんでした。
サーバーがIPv6ポートに適切にバインドされていない、サーバーの2つのインスタンスが両方ともIPv6ポート8080にバインドしようとしている、またはサーバーがIPv6ポートにバインドされているという別の問題がある可能性があります。 IPv4を使用する場合は複製されません。