優先DNSサーバと代替DNSサーバの動作についてTech TIPS

TCP/IPのDNSサーバの設定には、「優先DNSサーバ」と「代替DNSサーバ」の2種類がある。FQDN名を解決する場合は、まず優先DNSサーバへのクエリーが発生するが、応答が得られない場合は代替DNSサーバへのクエリーが発生する。クライアントのDNSキャッシュ機能を制御するにはipconfigコマンドを使う。

» 2002年09月18日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server/Windows 2000 Advanced Server


解説

 Windows 2000/XPのTCP/IPを設定する場合、IPアドレスサブネット・マスクデフォルト・ゲートウェイなどを設定しなければならないが、そのほかにも「DNSサーバ」を正しく設定しておかないと、ほかのマシンへの接続(ローカルのサーバや、インターネット上のホストなどへの接続)がうまく行えなくなったりする。ここでいう「DNSサーバ」とは、例えばwww.atmarkit.co.jpというFQDNからIPアドレスへの変換を行う、「名前解決」というサービスを担当するサーバのことである。

●「優先DNSサーバー」と「代替DNSサーバー」

 Windows 2000/XPのTCP/IP設定には、DNSサーバのIPアドレスを設定するフィールドが、次の画面のように2カ所ある。

TCP/IPにおけるDNSサーバの設定 TCP/IPにおけるDNSサーバの設定
DNSサーバとして「優先DNSサーバー」と「代替DNSサーバー」の2つを設定することができる。DHCPによる自動設定を選択している場合はここで明示的に指定しなくてもよいが、最終的には、DHCPサーバ側でこの2つのサーバ欄の値を指定していることになる。
  (1)優先されるDNSサーバ。DHCPサーバ側で指定する場合は、DNSサーバのリストのうち、先頭のものがこの「優先DNSサーバー」の設定内容として扱われる。
  (2)優先DNSサーバが利用できない場合に、代替の役割を果たすDNSサーバ。DHCPサーバ側で指定する場合は、DNSサーバのリストのうち、2番目以降のものがこの「代替DNSサーバー」として扱われる。

 この画面の[詳細設定]をクリックすると、さらに次のような[TCP/IP詳細設定]という画面が表示され、ここにある[DNS]タブでもDNSサーバのIPアドレスを(複数)セットすることができる。

より詳細なDNSサーバの設定 より詳細なDNSサーバの設定
DNSサーバは、実際には2つだけでなく、複数指定することができる。上位にあるものの方が優先度が高く、一番上は「優先DNSサーバー」で、2番目以降はすべて「代替DNSサーバー」となる。
  (1)優先DNSサーバ。
  (2)代替DNSサーバのうち、最も優先度が高いもの。
  (3)代替DNSサーバのうち、2番目に優先度が高いもの。
  (4)代替DNSサーバのうち、3番目に優先度が高いもの。

 後者の画面では複数のDNSサーバを指定することができるが、実は2つの画面は(ほぼ)同じ情報を表示している。複数並んだ「DNSサーバー アドレス」のうち、1番上のものが「優先DNSサーバー」で、2番目(以降)のものが「代替DNSサーバー」と呼ばれているにすぎない。最初の画面では最大でも2つしかDNSサーバを表示できないので、「192.168.0.3」以降は見えないが、実際には2つ目以降は(この例では「192.168.0.2」〜「192.168.0.4」)は、すべて同じく「代替DNSサーバー」として扱われることになっている。DHCPサーバを使ってDNSサーバのリストをクライアントへ渡す場合は、先頭のものが「優先DNSサーバー」となり、2番目以降のものが順番に「代替DNSサーバー」として扱われる。

 「優先DNSサーバー(英語ではPreferred DNS server)」と「代替DNSサーバー(Alternate DNS server)」は、クライアントがDNSの名前解決をする場合に、どのDNSサーバを優先して使うかを決めるためのものである。

【コラム】「プライマリ/セカンダリDNSサーバー」とは違う!

「優先DNSサーバー」と「代替DNSサーバー」に似た言葉として、「プライマリDNSサーバー」と「セカンダリDNSサーバー」という用語がある。これはまったく別の用語で、DNSのゾーン情報を提供している側のDNSサーバを指す言葉である。

 例えばatmarkit.co.jpドメインのプライマリDNSサーバといえば、atmarkit.co.jpというドメインを(SOAレコードで)定義したり、そのドメイン内に用意されているホストを定義して、外部からの問い合わせに答えたりするために用意されているDNSサーバのことである。

 これに対して、ここで説明している「優先DNSサーバー」や「代替DNSサーバー」は、それらのゾーン情報を問い合わせる側のDNSサーバのことを指している(クライアントPCからのDNS名前解決要求を中継したり、その結果をキャッシュしたりするDNSサーバのこと)。


 DNSサーバのIPアドレスが正しく設定されているかどうかを調べるには、コマンド・プロンプト上で「ipconfig /all」を実行してもよい。これにより、全アダプタの全DNSサーバ情報が表示される。DHCPでパラメータを設定しているような場合でも、このコマンドを実行すれば現在の状態がすべて表示されるので、DNSサーバの設定ミスがないかどうかなどを簡単に調べることができる。

●複数のDNSサーバの動作の違いについて

 以上のように、TCP/IPのDNS設定では2種類のDNSサーバが定義されているが、これらのDNSサーバ・リストは、ネットワークのアダプタごとに定義することができる。アダプタごとに異なるDNSサーバを設定すれば(ネットワーク・カードを複数枚装備したサーバなどでは、このような状況が起こる可能性がある)、最終的には2つ以上のDNSサーバが使われることになるが、その優先順序や利用される順番はどのようになるのであろうか? それをまとめるのが本稿の目的である。

 DNSサーバに対する問い合わせ(クエリー)は、UDPというデータグラム・プロトコルが使われるが、DNSサーバがダウンしていたり、ネットワークが込んでいたりすると、応答が得られないことがある。そのため、応答が戻ってこない場合は、複数のサーバに対して、繰り返しクエリーが行われる。そして最初に肯定応答(指定された名前がそのドメインに「存在する」という応答)が戻ってくるか、否定応答(指定された名前がそのドメインには「存在しない」という応答)が戻ってくるまで、繰り返しクエリーが行われる。肯定にしろ否定にしろ、いずれかの応答が得られれば、それ以上のクエリーは行われない(否定応答だからといって、次のDNSサーバに問い合わせたりはしない)。何回か繰り返してもまったく応答が得られない場合は、名前解決は失敗したものとして扱われる。

 以上のようなクエリーの過程では複数のDNSサーバが使われるが、そのクエリーの順番を簡単にいうと、まず「優先アダプタ」の「優先DNSサーバ」が最優先で使われ、それがタイムアウトするとほかのアダプタの「優先DNS」が使われる。それでも名前解決が失敗するようなら、それ以外の「代替DNSサーバ」が使われ、これを3回繰り返す。これを図にすると次のようになる。

利用されるDNSサーバとその順序 利用されるDNSサーバとその順序
DNSサーバへの問い合わせ(クエリー)は、サーバ自身がダウンしていたり、ネットワークが込んでいたりするかもしれないので、複数のサーバへ向かって、複数回クエリーが行われる。クエリーの順番は、優先アダプタの優先DNSが最優先であり、次いでそれ以外の優先DNS、そして最後にそのほかの代替DNSという順番になっている。赤い矢印がDNSサーバへのクエリーであり、最初のクエリーから1秒、2秒、2秒、4秒間隔で再クエリーが行われている。最初のクエリーは1つだけだが、再クエリーは複数のサーバへ同時に行われている。

 ここでいう「優先アダプタ」とは、最もバインドの優先度の高いネットワーク・アダプタのことを指す。バインドの優先度は、[スタート]メニューの[設定]−[ネットワークとダイヤルアップ接続](Windows XPでは「[スタート]メニューの[ネットワーク接続])にある、[詳細設定]−[詳細設定]の[接続]メニューで設定することができる。最上位にあるものが優先アダプタとなる。

 図から分かるように、応答が得られない場合は、最初のクエリーから1秒、2秒、2秒、4秒間隔で再クエリーが行われている。最初のクエリーは1つだけだが、再クエリーは複数のサーバへ同時に行われ、どれか1つでも応答が得られれば、その後のクエリーは行われない。

 最初のクエリーから数えると、17秒経過しても応答が得られなければ、タイムアウトすることになっている。だが実際には、名前解決は、DNS以外にもWINSNBT(およびhostsファイルlmhostsファイル、DNSのクライアント・キャッシュ)、ブロードキャストなども使われるので、常にタイムアウトの秒数が17秒というわけではない。

 なお、以上の動作から分かるように、優先DNSサーバや代替DNSサーバは、お互いにバックアップとして機能するようになっている。別々のドメインを担当する2つのDNSサーバを使うため、というわけではない。例えば社外向け(インターネットのドメイン・サービス向け)と社内向け(社内のActive Directory向け)に2台のDNSサーバがあるような組織において、2つのDNSサーバをクライアント側のTCP/IPのパラメータにセットしても、どちらか一方しか使われないだろう(1台が無応答の場合に限り、他方のサーバへのクエリーが発生するので)。TCP/IPのパラメータとして設定する2種類のDNSサーバは、同じサービスを提供する、(通常運用向けとバックアップ用の)DNSサーバであることが望ましい。

●DNSのクライアント側キャッシュの制御

 Windows 2000/XPでは、以上のようにして得られたDNSのクエリーとその結果を、クライアント側にキャッシュするメカニズム(「DNS Client」サービス)を持っている。これにより、一度実行した名前解決は、毎回DNSサーバに問い合わせなくても、その結果を素早く得ることができる。このキャッシュ機構を制御するためにいくつかのコマンドが用意されている。

■キャッシュ内容の表示
 DNSのクライアント側のキャッシュの内容を表示させるには、コマンド・プロンプト上で「ipconfig /displaydns」を実行する。これにより、現在DNSキャッシュに入っているDNSのクエリーの内容とその応答が表示される。1度キャッシュされた結果は、元のDNSレコードのTTL(Time To Live、生存時間)が有効な間、保持されている。

■キャッシュ内容の破棄
 クライアント・キャッシュの内容は一時的に保持されているが、これが不要な場合(手動でDNSレコードを変更したので、強制的にキャッシュを更新させたい、という場合など)には、手動でキャッシュの内容をすべて破棄させることができる。このためには、コマンド・プロンプト上で「ipconfig /flushdns」を実行する。これにより、現在のDNSキャッシュの内容がすべて破棄される。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。