私のドッカーコンテナの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バージョンはこれと特に関係がありません。