WindowsでIPv6よりもIPv4アドレスを優先して名前解決する方法

インフラ

背景

自宅のWindows 10環境で検証サーバの名前解決を試みたところ、IPv6アドレスが優先される結果、名前解決に失敗しました。
今回の検証サーバはIPv4のみ対応しているため、IPv6アドレスでの名前解決は無意味であり、アクセスができない状態でした。

以下は問題発生時のコマンド実行例です。

名前解決の挙動確認

nslookup(DNSサーバ未指定の場合)

nslookup 【ホスト名】
サーバー: UnKnown
Address: XXXX:XXXX:XXXX:X::X

*** UnKnown が 【ホスト名】 を見つけられません: Non-existent domain

nslookup(DNSサーバ指定ありの場合)

nslookup 【ホスト名】 【DNSサーバ】
サーバー: 【DNSサーバ】
Address: 【IPアドレス】

名前: 【ホスト名】
Address:【IPアドレス】

pingコマンドの結果

ping  【ホスト名】
ping 要求ではホスト【ホスト名】 が見つかりませんでした。ホスト名を確認してもう一度実行してください。

対処方法

最初に試した簡易的な方法として、Windows 10のIPv6を無効化することで問題を回避できました。しかし、IPv6を完全に無効化することはネットワーク環境全体への影響を懸念し、別の方法を検討しました。

解決策:IPv6のプロパティで特定の設定を追加

WindowsのIPv6プロパティで、DNSサーバを以下の形式で指定することで、pingコマンドでの疎通が確認できるようになりました。

ffff::<DNSサーバのIPv4アドレス>

設定後の挙動確認

nslookup(DNSサーバ未指定の場合)

nslookup  【ホスト名】
DNS request timed out.
timeout was 2 seconds.
サーバー: UnKnown
Address: XXXX::XXXX:XXXX

*** UnKnown への要求がタイムアウトしました

pingコマンド

ping 【ホスト名】
【ホスト名】 【IPアドレス】 に ping を送信しています 32 バイトのデータ:
【IPアドレス】 からの応答: バイト数 =32 時間 =3ms TTL=64
【IPアドレス】からの応答: バイト数 =32 時間 =3ms TTL=64
【IPアドレス】 からの応答: バイト数 =32 時間 =3ms TTL=64
【IPアドレス】からの応答: バイト数 =32 時間 =3ms TTL=64

【IPアドレス】の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)
ラウンド トリップの概算時間 (ミリ秒):
最小 = 3ms、最大 = 3ms、平均 = 3ms

重要なポイント

  • nslookupは失敗するケースがあるが、pingやブラウザでの疎通確認は成功。
  • この方法でHTTP(S)通信も問題なく動作することを確認。

今回の教訓

IPv6がデフォルトで優先される状況では、適切な設定変更が必要です。Windows環境では、完全にIPv6を無効化する以外にも調整可能な設定があるため、ネットワーク環境に応じて柔軟に対応することが重要です。

もし同様の問題に直面した場合、本記事の方法をぜひ試してみてください!

コメント

タイトルとURLをコピーしました