IPv6 localhostへのcurlリクエストがスタックする


9

私のDockerコンテナーは、ポート8500でHTTPインターフェースを公開します。これは、ホストポート8500にマップされます。IPv6対応ではありません。これでも、localhost:8500でアクセスできるはずです。IPv6が優先されるので、[:: 1]:8500へのリクエストが返されます。これは行き詰まり、二度と戻らない。

カールでこれを再現すると、このコマンドは行き詰まります:

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

curlの--verboseオプションは何も明らかにせず、-ascii-traceも明らかにしません。同時に、IPv4のローカルホストへのリクエストは成功します。

curl http://127.0.0.1:8500

期待されるHTMLをくれ。ループバックでIPv4 HTTPサーバーを実行する場合は、

python -m SimpleHTTPServer 4001

次に、IPv4のローカルホスト用のHTMLを大量に取得します

curl http://127.1:4001

IPv6の適切な接続障害:

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

注意事項:Docker 1.7.1。コンテナーではIPv6が有効になっていないため、IPv6 iptableルールはありません。(ip6tables -v -Lは何も与えません)

私の質問は次のとおりです。なぜリクエストが行き詰まり、何をするのですか?


1
「netstat -6 -an」の出力を見せていただけますか?
Rui F Ribeiro

うん、ドッカーはそのポートで聞いています:tcp6 0 0 :::8500 :::* LISTEN 1648/docker 魅力的です。どうして?そしてなぜそれはブロックしているのですか?
mknecht

聞いて設定されていないか、sysctlでIPv6が無効になっていると思います。nginx、apache、lighthttp、問題のWebサーバーを投稿に追加しますか?
Rui F Ribeiro

コンテナー内では、構成用のKey-ValueストアであるConsulがリッスンしています。しかし、私はそれが関連しているとは思いません。コンテナはIPv6対応ではありません。そのリクエストは領事に届かないはずです。どのレイヤーに行き詰まっているのかわかりませんが。ホストで/proc/sys/net/ipv6/conf/all/disable_ipv6は0になるため、IPv6を有効にする必要があります。
mknecht

2
それはあまり意味がありません。sysctlや新しいカーネルでもIPv6を無効にすることができます。プログラムがIPv6ソケットにバインドしている限り、要求は受け入れられます。IPv6をサポートする各デーモンを通過し、IPv6構成を無効にする必要があるため、お尻の痛み。
Rui F Ribeiro

回答:


0

ipv6および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

1
どうやら、OPは何かを機能させようとしているのではありません。実際の質問は、「なぜ要求が行き詰まって、何をするのか」です。あなたの答えはそれについての説明を提供していますか?その場合、その方法を明確にしていただけますか?
fra-san
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.