概要
ネットの表示速度が遅い場合、ゲームなどの Ping が安定しない場合、DNS の Windows の優先 DNS の設定を 1.1.1.1 (パブリック DNS) にすることで解消する、という記事・動画を見たことがあると思います。

ただ、IT に従事している人ですと、優先 DNS サーバーに 1.1.1.1 を設定しても、ルーター自体の設定を変えない限り、ルーターの設定値の DNS サーバーで名前解決をしてしまうのでは?と思う方も居ると思います。
そこで、本記事では、Windows において名前解決の優先順位について記載します。
ネットワークが遅い、をハードウェア観点で根本的に解説した記事はこちら。
パブリック DNS とは
通常、Windows の「優先 DNS サーバー」と「代替 DNS サーバー」 を設定していなくても、名前解決は行えます。これはルーターに設定されているプロバイダーの DNS サーバーに名前解決をしているためです。
そして、Windows の「優先 DNS サーバー」と「代替 DNS サーバー」 を変更する場合、設定する IP アドレスは、プロバイダー提供 IP 以外ですと、よく 8.8.8.8 と 1.1.1.1 の名前が出てきます。
まず、8.8.8.8 についてですが、Google 社が提供している Google Public DNS です。8.8.8.8 以外に 8.8.4.4 もあります。
Google Public DNS を使用すると、DNS の「スイッチボード」が変更されます。演算子 Google Public DNS に送信します。
開始する | Public DNS | Google for Developers
また、1.1.1.1 については、Cloudflare 社が運営するパブリック DNS です。1.1.1. 以外に 1.0.0.1 もあります。1.1.1.1 の特徴は、他社に比べて、高速であるという点です。
1.1.1.1は、Cloudflareが運営するパブリックDNSリゾルバで、高速かつプライベートなインターネットを閲覧するための手段を提供します。多くのDNSリゾルバとは異なり、1.1.1.1はユーザーデータを広告業者へ販売することはありません。
1.1.1.1 とは?DNSリゾルバーとは? | Cloudflare
各 DNS サーバーとの比較をしても、Cloudflare 社が群を抜いています。(Cloudflare 社比較)

優先 DNS に設定した時の Windows の挙動
まず始めに、優先 DNS に何も設定していない状態はどのようになるのでしょうか。
自分がどの DNS を使って、名前解決をしているかは、このサイトで確認ができます。
Windows では [DNS サーバーのアドレスを自動的に取得する] を選択します。

この状態で、上記サイトにアクセスすると、自分が契約しているプロバイダーの DNS にアクセスしました。

さて、実際に Windows の優先 DNS にパブリック DNS を設定しましょう。

その後、コマンドプロンプトで “ipconfig /flushdns” を実行します。

これをしないと DNS を変更したとしても、Windows に格納されている DNS リゾルバーキャッシュで名前解決するため、変更が適用されません。
DNS リゾルバーキャッシュ (*1) を確認して、指定された名前に対応するレコードがキャッシュされている場合は、そのアドレスを返します。
Windows 名前解決の順序 | Microsoft Learn
その後、上記 DNS の確認サイトにアクセスします。変わっていることが確認できますが、プロバイダーの DNS サーバーが表示されます。

これは IPv6 を利用する契約をしている場合、IPv6 の設定も変更しなければいけませんことに起因しています。

Windows の DNS の優先順位
さて、このルーターに登録されている DNS サーバー、[優先 DNS サーバー] に設定されている DNS サーバー への問い合わせはどのような優先順位になっているのでしょうか。
これは、以下順番になっています。
- DNS リゾルバーキャッシュに登録されているレコードに対して、名前解決を行う
- HOSTS ファイルに登録されているレコードの値を返す
- NIC に登録されている DNS 設定を参照し、その DNS サーバーが名前解決を行う
- 1~3 で失敗した場合、NetBIOS 名前解決を行う
肝心の名前解決の順序ですが、基本的な順序は以下の通りです。
Windows 名前解決の順序 | Microsoft Learn
1) DNS リゾルバーキャッシュ (*1) を確認して、指定された名前に対応するレコードがキャッシュされている場合は、そのアドレスを返します。
2) HOSTSファイル (*2) を参照し、指定された名前に対応するレコードが登録されている場合はそのアドレスを返します。
3) 登録されている DNS サーバーに問い合わせを行い、受領したアドレスを返します。
4) 上記 1 ~ 3 で名前解決に成功しない場合は、NetBIOS 名前解決を行います。
例えば、yahoo.co.jp の名前解決をする場合です。
Hosts ファイル (C:\Windows\System32\drivers\etc) を編集し、124.83.185.124 を記載しておきます。

その後、”ipconfig /displaydns” をコマンドプロンプトに入力することで、DNS リゾルバーキャッシュから Hosts ファイルの編集した値になっていることを確認します。

そして “resolve-DNSname” を実行し、yahoo.co.jp を確認します。すると、Hosts ファイルを指定したものが、表示されていることを確認できます。

因みに、”nslookup” を実行すると、Hosts ファイルで設定した値以外にも、多数の IP アドレスが表示されます。

これは、nslookup の仕組み上、外部の DNS を参照して名前解決をするためですね。Hosts ファイルは nslookup 実行時、参照しません。
Windows で “nslookup 使うな おじさん” 爆誕 #dns – Qiita
nslookup
は、名前解決を行う際に、通常の ユニキャスト DNS(外部の DNS サーバーを使った名前解決)を使います。そのため、mDNS(Multicast DNS)に基づく名前解決には対応しておらず、.local
ドメインの名前解決を行った場合でも失敗することがある
引用リンクは Microsoft 社員が書いており、非常に面白い記事なので、ぜひご一読を。
おまけ:ゲームでの応答速度の変化
ゲームを実際にして、応答速度が変化するかを見てみました。
Valorant
プロバイダーの DNS は、平均 8ms 強、最大で 11ms 前後でした。

パブリック DNS の 1.1.1.1 では、平均 8ms 強、Max 11 ms 強でした。

Apex Legends
プロバイダーの DNS は、30ms 前後 (たまに 40ms) でした。

パブリック DNS の 1.1.1.1 でも 30ms 前後ですが、30ms 弱が頻繁に確認できました。

参考情報
Windows で “nslookup 使うな おじさん” 爆誕 #dns – Qiita