众所周知,アクセス元
が特定の理由でIPv4のみを有効にしている
場合、アクセス先
が特定の理由でIPv6のみを有効にしている
場合、両者は相互にアクセスすることはできません
。
例えば、私は会社のコンピュータ(会社のネットワークは IPv4 のみを有効にしています)から自宅の NAS(モバイルブロードバンドは IPv6 のみを持っています)にアクセスすることはできません。
解決策:プロキシを使用する。#
前提として、プロキシサーバーがデュアルスタックである必要があります(通常はデュアルスタックです)。https://ip.zxinc.org/ipquery/ で確認できます。
小知識:(天地极限さんから提供されました)
デュアルスタック環境では、プログラムが IPv4 または IPv6 プロトコルを使用するかは、プログラム自体が決定します。DNS サーバーはプログラムが優先的にどのプロトコルを使用するかを制御する能力を持っていません。
DNS リクエストでは、クエリのタイプを指定する必要があります。IPv4 アドレスは A タイプであり、IPv6 アドレスは AAAA タイプです。IPv4 と IPv6 アドレスを同時にクエリするタイプは存在しません。
したがって、プログラムは両方のアドレスを同時にクエリし、その後、プログラム自体のロジックに基づいてどちらを使用するかを選択します。ほとんどの BSD ソケット API を使用するプログラムでは、getaddrinfo を使用してドメイン名を解決し、順番に接続を試みます。この場合、どのプロトコルを優先して接続するかはシステムによって制御されます。getaddrinfo がどのプロトコルを先頭に配置するかによって、プログラムは優先的に接続します。
また、curl やさまざまなブラウザなど、特殊に設計されたプログラムもあります。たとえば、まずローカルの IPv6 アドレスをチェックし、それがプライベートネットワークアドレスであれば IPv6 を使用せず、グローバルアドレスであれば IPv4 と IPv6 アドレスを同時に解決し、優先的に IPv6 に接続します。一定の時間(1 秒など)内に接続が成功しない場合は、IPv4 に接続を試み、最後に最初に確立された接続を使用します。