Windows環境では、DNSサーバーへの問い合わせ結果をキャッシュとして一定期間保持しておく機能が搭載されており、これによって名前解決の頻度を減らして、DNSサーバーやネットワークに余計な負荷がかからないようにしてくれています。
インターネットをはじめとするIPネットワークでは、ホスト名からIPアドレスを問い合わせたり、IPアドレスからホスト名を問い合わせるため(名前解決)の仕組みとしてDNS(Domain Name Service)」があり、私たちがインターネットでさまざまな通信を行う際に内部で動作しています。
ですが、ホスト名とIPアドレスの紐づけが変更された場合、キャッシュとして保存されている古い情報が原因で、変更がなかなか反映されず目的のホストに接続できなくなってしまうときがあります。
そこでここではWindows 10を例に、WindowsコマンドやPowerShellコマンドレットを使って、DNSキャッシュ情報(リゾルバキャッシュ)を表示したり削除(クリア)する方法を紹介します。
目次
Windowsコマンドの場合
WindowsコマンドでDNSのキャッシュデータ(リゾルバキャッシュ)を表示したり、削除する場合は、ipconfigコマンドを利用します。
ipconfigコマンドは、古いからWindowsに搭載されているコマンドで、DHCPサーバーからIPアドレスを取得/解放したり、DNSのキャッシュデータを表示/削除したりできるコマンドです。
キャッシュデータを表示する
現在保持されているDNSのキャッシュデータ(リゾルバキャッシュ)を確認したいときは、以下のようにコマンドを実行します。
C:\> ipconfig /displaydns
キャッシュデータを削除する
DNSのキャッシュデータ(リゾルバキャッシュ)を削除するときは、以下のようにコマンドを実行します。
C:\> ipconfig /flushdns
コマンド実行後「DNSリゾルバーキャッシュは正常にフラッシュされました。」と表示されれば、キャッシュは正常に削除できています。
PowerShellコマンドレットの場合
キャッシュデータを表示する
PowerShellコマンドレットで現在保持しているDNSのキャッシュデータ(リゾルバキャッシュ)を表示する場合は、Get-DnsClientCacheコマンドレットを利用します。
Get-DNSClientCacheコマンドレットは、オプションなしで実行すると、現在保持しているすべてのキャッシュを表示します。
PS> Get-DNSClientCache
また、Get-DNSClientCacheコマンドレットは、オプションを指定することで、特定のキャッシュデータだけを表示することもできます。
たとえば、特定のホスト名のキャッシュのみを表示したいときは「-Entry」オプションを利用し、以下のように実行します。
PS> Get-DNSClientCache -Entry www.google.com
特定のIPアドレスのキャッシュをのみを表示したいときは「-Data」オプションを利用し、以下のように実行します。
PS> Get-DNSClientCache -Data 142.250.196.100
特定のレコードタイプのキャッシュのみを表示したいときは「-Type」オプションを利用し、以下のように実行します。
PS> Get-DNSClientCache -Type CNAME
上のコマンドでは、レコードタイプとして「CNAME」を指定していますが、これ以外にも「A」「AAAA」「MX」「NS」「PTR」「SOA」「SRV」といったタイプを指定可能です。
キャッシュデータを削除する
PowerShellコマンドレットでDNSのキャッシュデータ(リゾルバキャッシュ)を削除する場合は、Clear-DnsClientCacheコマンドレットを利用し、以下のようにコマンドを実行します。
PS> Clear-DnsClientCache
Clear-DnsClientCacheコマンドレット実行後は、エラーなどが表示されずプロンプトが返ってくれば、キャッシュは正常に削除できています。
あとがき
ちなみに、Windowsマシン上に保持されているキャッシュデータは、再起動するとすべて削除(クリア)されるので、コマンドを使ってキャッシュをクリアするのが面倒ならWindowsを再起動すればOKです。