DNSキャッシュの役割とは?仕組みとキャッシュクリアの方法を徹底解説!

Facebookシェア LINEシェア はてなブックマークシェア

「ウェブサイトが正常に表示されない」

「ページにアクセスすることができない」

インターネットの利用、または、ウェブサイトの運営において、このようなトラブルが発生した場合は、「DNSキャッシュ」をクリアすることで、問題解決を図ることができます。

DNSキャッシュとは、DNSによる問い合わせ結果を一時的に保管することで、サーバーに対して、短期間に同じ問い合わせを繰り返し送らないようにするシステムです。

DNSキャッシュの仕組みを理解するには、DNSの基本的な仕組み、名前解決の流れなどの背景についても知る必要があります。

そこで本記事では、DNSの仕組みと名前解決の流れ、DNSキャッシュの役割と仕組み、また実際にDNSキャッシュをクリアする方法などについて詳しく紹介します。

DNSキャッシュの役割と仕組み

「DNSキャッシュ(Domain Name System Cache)」とは、DNSによるIPアドレスやドメイン名の問い合わせ結果を一時的に保管することで、DNSサーバーに対して、短期間に同じ問い合わせを繰り返し行わないようにする仕組みです。

通常、ドメイン名から対応するIPアドレスを割り出すには、ドメイン名を管理するDNSサーバーに問い合わせが行われますが、短期間に同一の問い合わせを繰り返すことは非効率かつ、DNSサーバーへの負荷も増してしまいます。

この問題に対して、問い合わせに対する応答を保管して再利用することで、効率化とサーバー負荷の軽減を測っています。

DNSキャッシュの詳しい仕組みを理解するには、DNSの仕組みと名前解決の流れ(フロー)の予備知識が必須となるため、以下で項目を分けて詳しく紹介していきます。

DNSの仕組み

DNSキャッシュについてご説明する前に、はじめに、DNSの仕組みについておさらいをしていきます。

DNS(Domain Name System)とは、インターネット上でドメイン名を管理・運用するために開発されたシステムで、インターネット通信時にドメイン名をIPアドレスに紐づけて変換する役割を担っています。

DNSはルートゾーンを起点としたツリー構造から成り立ち、「委任(delegation)」と呼ばれる仕組みで、データを各階層に分散化して保存するほか、併せてサーバーの冗長化を実現しています。

クライアント(ユーザー)が問い合わせを行い、データを取得する場合は、委任により各階層から必要な情報を集めて、最終的に必要な情報を全て集めています。

またDNSでは、ドメイン名に関する情報を検索(問い合わせ)することを「名前解決」と呼び、DNSキャッシュの仕組みを説明する上で欠かせない仕組みであることから、以下で詳しく紹介していきます。

名前解決のフロー

DNSではドメイン名に関する情報を検索(問い合わせ)することを「名前解決」と呼び、名前解決で起点となるルートゾーンを管理するサーバーは、「ルートサーバー」と言います。

通常、クライアントからルートサーバーへ直接問い合わせを行うことはなく、キャッシュサーバーと呼ばれるDNSサーバー(フルサービスリゾルバ)が、代理で名前解決を行う仕組みです。

DNSサーバーは名前解決の処理(問い合わせ)を分散化させるために、ドメイン名を「.(ドット)」で区切り、それぞれのDNSサーバーは、ツリー構造で自身の下位にあるDNSサーバーの情報を管理しています。

ここからは名前解決の仕組みについて、わかりやすい様にフロー(流れ)を細分化して説明していきます。

例として、「www.xxxxx.jp」のIPアドレスを取得するまでのフローを下記で再現します。

1.はじめに、ブラウザにURLを入力すると、「クライアントPC」から「キャッシュ
  DNSサーバー」に対して名前解決の「問い合わせ(要求)」が行われます。
2.問い合わせ(要求)を受信した「キャッシュDNSサーバー」は、「ルートサーバ
  ー」に対して、「www.xxxxx.jp」のIPアドレスについて問い合わせます。
3.「ルートサーバー」は「.jp」ドメインを管理する「JP DNS」の情報について回答
  します。
4.この回答を受けて、「キャッシュDNSサーバー」は「JP DNS」に対して、再度問
  い合わせを行います。
5.問い合わせを受けた「JP DNS」は「www.xxxxx.jp」の「DNSサーバー」情報を回
  答します。
6.「キャッシュDNSサーバー」は「www.xxxxx.jp」の「DNSサーバー」へ問い合わ
  せを行います。
7.「www.xxxxx.jp」の「DNSサーバー」は「キャッシュDNSサーバー」にIPアドレ
  スの情報を回答します。
8.「キャッシュDNSサーバー」は得られたIPアドレスの情報をクライアントPCに伝
  えます。

クライアントは上記のフローで、「www.xxxxx.jp」のIPアドレスを取得しています。

DNSキャッシュの仕組み

ここからは、DNSの概要と名前解決のフローを踏まえて、DNSキャッシュの説明をしていきます。

DNSの名前解決は、上記で説明したフローが常に実行されているわけではなく、DNSキャッシュと呼ばれる仕組みにより手順を簡略化しています。

世界中のクライアントが検索の都度、問い合わせを行うと、ルートサーバーには大量の問い合わせが同時に来てしまい、サーバーに大きな負担が掛かることに加えて、処理が遅くなるなどの問題が発生します。

このような問題を発生させないために、手順を簡略化できるDNSキャッシュが存在しています。

DNSキャッシュは、OSまたはブラウザがアクセスしたIPアドレスを取得して、データベースに保管して再利用することで、検索の都度、名前解決するよりも素早くアクセスすることが可能になります。

キャッシュDNSサーバーも同様に、名前解決の問い合わせ結果を保管して、再利用することが可能です。

つまりDNSキャッシュとは、名前解決で取得した回答を、クライアントPC、あいるは、キャッシュDNSサーバーに一時的に保管して再利用することで、問い合わせを毎回行わなくて済むようになるシステムです。

また、このDNSキャッシュには「保持期間」が存在しているため、以下で詳しく紹介していきます。

DNSキャッシュの保持期間

DNSキャッシュとして保存されたデータには、「TLL(Time To Live)」と呼ばれる保持期間が存在しており、データは一定の期間保管された後、破棄される仕組みになっています。

DNSは前章で紹介した通り、データを各階層に保管する分散データベースであり、データはサーバー管理側により、任意のタイミングで変更される可能性があります。

データが変更、または置き換えられたにも関わらず、クライアントPCのデータベースやキャッシュDNSサーバーに残された古いDNSキャッシュデータを利用し続けると、実際の状態と古いデータの状態に乖離が生じて不整合が起きてしまいます。

この不整合を発生させないために、「いつまでキャッシュを利用して良いのか」というTTLと呼ばれるパラメータが各キャッシュデータ(レコード)に設定されています。

またDNSキャッシュのデータ、つまり、TTL(保持期間)のパラメータはDNSサーバーの管理側が任意の期間に設定することが可能です。

データ(レコード)の書き換え

TTL(保持期間)パラメータの仕組みにより、キャッシュは定期的に最新の状態へ更新されますが、一定の条件を満たすと、古いデータ(情報)を参照する場合があります。

例を挙げると、ウェブサーバーのIPアドレスを変更するために、DNSサーバーに設定しているウェブサーバーのIPアドレス設定を書き換えたとします。

IPアドレスを書き換えた瞬間から、ウェブサーバーへのアクセスは新しいIPアドレスに変更されること期待しますが、実際には、上記で説明したDNSキャッシュの仕組みが働くため、キャッシュとして保管されてあるデータを参照して、古いIPアドレスへアクセスをしてしまいます。

こうした問題は、TTL(保持期間)のパラメータの数値を短く設定することで、新しいIPアドレスへの反映を早めることができます。

TTLのパラメータが短いことで、DNSキャッシュにより保管されているデータ(情報)は早く破棄されることになるため、新しいIPアドレスへの反映が早くなる仕組みです。

IPアドレスの切り替えやサーバー移管の際には、デフォルトで「86400(24時間)」に設定されていることが多いTTLパラメータを、「3600(1時間)」を目安に書き換えると良いでしょう。

DNSキャッシュの2つの脆弱性

DNSキャッシュには大きく分けて、「キャッシュポイズニング」「Ghost Domain Names」の2種類の脆弱性が存在しています。

ここからは、インターネットの利用、または、ウェブサイトの運営をする上で知っておきたい2種類の脆弱性について、項目を分けて詳しく説明していきます。

キャッシュポイズニング

「キャッシュポイズニング(Cache Poisoning)」とは、DNSのキャッシュ情報を意図的に書き換えて、訪問者を誤ったサイトに誘導する攻撃のことを指します。

キャッシュポイズニングは何らかの方法により、問い合わせを行ったDNSサーバーに対して、回答よりも先に不正な情報を送ることで、DNSキャッシュに不正な情報を保存させる仕組みです。

通常、DNSの問い合わせ(要求)と回答は、相互にポート番号やIDと呼ばれる番号が適切であるか内容を確認していますが、キャッシュポイズニングはこの番号を詐称することで、偽のキャッシュ情報をDNSサーバーに保管させています。

例えば、偽のECサイトやオンラインバイキングサイトを作成して、キャッシュポイズニングできれば、利用者の個人情報や口座番号、パスワードなどを抜き出すことが可能です。

この脆弱性は、セキュリティー研究者のDan Kaminsky氏により2008年に発見されましたが、現在ではいくつかの対策によって、攻撃のリスクは軽減されています。

しかし、対策は十分ではないという声もあることから、「DNSSEC」(Domain Name System Security Extensions)と呼ばれる公開鍵暗号方式を用いたセキュリティー技術の導入が進められています。

Ghost Domain Names

「Ghost Domain Names」とは日本語で「幽霊ドメイン名」と呼ばれ、2012年に清華大学のHaixin Duan氏による学術論文で発表されました。

Ghost Domain Namesは、委任情報の削除、または変更後も長期に渡って古い情報を参照させ続けるように仕向けることが可能になる脆弱性です。

DNSプロトコルは、保持するキャッシュレコードの上書き判定が明確に規定/定義されていない所があるため、実装依存となっている部分が存在しており、このプロトコルの不備を突いたものです。

この脆弱性によって、フィッシングサイトの抑制、マルウェアの伝播など、不正な目的で使用されているドメイン名を使用不可能にすることを妨害される可能性があります。

ただし、この脆弱性の影響を受けるのはキャッシュDNSサーバーのみで、また、キャッシュDNSサーバーで利用しているサーバーソフトウェアの更新をすることでも回避が可能です。

DNSキャッシュをクリアする方法

ウェブサイトが正常に表示されない、ページにアクセスできないなどのトラブルに見舞われた場合は、DNSキャッシュをクリアすることで、問題解決を図ることができます。

DNSのキャッシュは比較的簡単にクリアすることが可能ですが、OSによりその方法が異なるため、以下で項目を分けて、詳しくご紹介していきます。

Linux

Linux系OS「Ubuntu」のキャッシュをクリアするには、コマンドラインインタフェースとなる「ターミナル」を開いて、適切なコマンドを実行する必要があります。

ターミナルを開くには、デスクトップ画面の左上隅にある「アクティビティ」を選択すると検索バーが表示されます。

検索バーに「ターミナル」と入力してコマンドラインインタフェースを起動したら、以下のコマンドを実行します。

sudo systemd-resolve --flushcaches

上記コマンドを入力するとパスワードを求められるので、パスワードを入力することでキャッシュをクリアできます。

また、Ubuntu以外のLinuxディストリビューションでは、以下のコマンドを実行します。

sudo /etc/init.d/dns-clean start

上記コマンドが実行されると、キャッシュのクリアが完了します。

macOS

macOSはLinuxと似ており、「ターミナル」と呼ばれるコマンドラインインタフェースを開いて、適切なコマンドを実行することでキャッシュをクリアできます。

キャッシュクリアのプロセスは、macOSのバージョンにより異なります。

バージョンがわからない場合には、 デスクトップ画面の左上隅にあるリンゴのアイコンを選択して、「このMacについて」を開き、表示された画面の一番上に表示される情報が利用中のバージョンです。

利用しているバージョンがわかったら、次にコマンドラインインタフェースを開きます。

macOSバージョン10.11以降では、デスクトップ画面の上にある「移動」から「ユーティリティ」を選択して「ターミナル」を展開します。

ターミナルの画面が開いたら、以下で紹介する、バージョン毎に異なるキャッシュクリアのコマンドを実行します。

コマンドを入力すると、コンピューターのパスワードを求められるので、入力して実行することで、キャッシュクリアが完了します。

  • macOS Yosemite (10.10)

    sudo discoveryutil udnsflushcaches

  • macOS Lion (10.7)、Mountain Lion (10.8)、Mavericks (10.9)

    sudo killall -HUP mDNSResponder

  • macOS Snow Leopard (10.6)

    sudo dscacheutil -flushcache

  • macOS Leopard (10.5)

    sudo lookupd -flushcache

上記コマンドが実行されると、キャッシュのクリアが完了します。

Windows

Windowsでキャッシュクリアすることは非常に簡単ですが、Windows 10、8、7、およびXPで、それぞれ手順がそれぞれ異なるため、注意が必要です。

  • Windows10

Windows10でDNSキャッシュクリアをするには、コマンドラインインタフェースである、「コマンドプロンプト」を開きます。

デスクトップ画面の左下にある「Windowsアイコン」をクリックして、表示されたアプリの中から、「Windowsシステムツール」を開き、「コマンドプロンプト」を展開します。

コマンドラインインタフェースが開いたら、次のコマンドを実行します。

ipconfig /flushdns

DNSキャッシュが正常にクリアされたことを示す確認メッセージが表示されたら、ウィンドウを閉じて、作業は完了です。

  • Windows8

Windows8でDNSキャッシュクリアをする方法は、Windows10でご紹介した流れと同様ですが、バージョンによりコマンドプロンプトの場所が若干異なる場合があります。

Windowsアイコンをクリックして、アプリ一覧が表示されたら、Windowsシステムツールを見つけ出して、コマンドプロンプトを展開します。

ipconfig /flushdns

DNSキャッシュが正常にクリアされたことを示す確認メッセージが表示されたら、ウィンドウを閉じて、作業は完了です。

  • Windows7/WindowsXP

Windows7/WindowsXPでは、デスクトップ画面の左下にある「スタートボタン」を選択して、「全てのプログラム」から「アクセサリ」に移動して、「コマンドプロンプト」を展開します。

コマンドラインインタフェースが開いたら、以下のコマンドを実行します。

ipconfig /flushdns

DNSキャッシュが正常にクリアされたことを示す確認メッセージが表示されたら、ウィンドウを閉じて、作業は完了です。

Google Chrome

記事中にご紹介した通り、DNSキャッシュはOSだけではなく、ブラウザにも存在しています。

Google Chromeでキャッシュをクリアするには、アドレスバーに以下を入力します。

chrome://net-internals/#dns

画面が切り替わったら、次に「Clear host cache」ボタンを選択します。

この作業により、Google ChromeのDNSキャッシュは全てクリアとなります。

まとめ

今回は、DNSキャッシュの役割と仕組み、DNSキャッシュの保持期間と書き換え、またキャッシュをクリアする方法についてご紹介しました。

DNSは、インターネット上でドメイン名を管理/運用するために開発された仕組みで、現代のインターネットにおいて必要不可欠といえる、非常に重要なシステムです。

DNSの役割と仕組みを理解することは、インターネットの安定利用に役立つ他、ウェブサイトを運営する場合にも欠かせない知識です。

DNSキャッシュと聞くと少し難しいイメージを持たれるかも知れませんが、知識を身に着けておくことで、IPアドレスの切り替えやサーバー移管の際に非常に役立ちます。

万が一、サイトにアクセスできない、ページが正しく表示されないなどのトラブルに見舞われたら、状況に合わせてDNSキャッシュクリアを実行してみましょう。

独自ドメインを取得するなら「お名前.com」

「お名前.com」は、国内No.1のドメイン登録サービス。独自ドメインと合わせて、WordPressの自動インストールに対応したレンタルサーバーも利用できます。
WordPressや独自ドメインを一度も使ったことのない人でも、スムーズに始められるはず。

独自ドメインを取得しようと考えている方は、無料で好きなドメイン名を検索してみましょう。


まずは検索!ドメインは早い者勝ち

Facebookシェア LINEシェア はてなブックマークシェア
逢坂秀範の似顔絵イラスト

このサイトのライター
逢坂 秀範

ウェブメディアやメールマガジンのコンテンツ制作のプロ。
豊富な経験と知識でwebの作成や運用、用語などを分かりやすく解説します!

一覧を見る

お気に入り機能を
活用してより便利に!

お名前ID(会員ID)・パスワードでログインするとお気に入り機能をご利用できます。
お名前ID(会員ID)
パスワード

アカウント登録がまだの方

アカウント登録 (無料)