IPv6 ローカルホストへのカール要求が中断されました。

IPv6 ローカルホストへのカール要求が中断されました。

私のドッカーコンテナの1つは、ホストポート8500にマッピングされているポート8500にHTTPインターフェイスを公開します。いいえIPv6が有効になっています。これは、まだlocalhost:8500からアクセスできる必要があることを意味します。 IPv6 が優先されるので、[::1]:8500 に要求されます。これは立ち往生して再び戻らないでしょう。

カールを使用してこのコマンドをコピーすると、中断されます。

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

カールの --verbose オプションは何も表示せず、 --ascii-trace も何も表示しませんでした。同時に、IPv4 localhostの要求が成功しました。

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

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

答え2

IPV6 転送がイネーブルでない場合、パケットは破棄されます。したがって、カールはサーバーの応答を待ち続けますが、実際には何も得られません。一定時間が経過するとタイムアウトが発生します。

ファイアウォールを設定して複製できます。極細糸束。ファイアウォールを使用して特定のポートへのアクセスをブロックし、そのポートにアクセスしようとすると、カールはタイムアウトするのを待ちます。さらに、IPバージョンはこれと特に関係がありません。

関連情報