第14章 DNS サーバー

ネームサーバー としても知られる DNS (Domain Name System ドメインネームシステム) は、ホスト名とその IP アドレスを関連付けるネットワークシステムです。ユーザーにとっては、ネットワーク上のマシンを名前で参照できるという利点があります。数字で表されるネットワークアドレスを覚えるより通常は簡単でしょう。システム管理者にとっては、ネームサーバーを使用すると、名前ベースのクエリに影響を与えることなくホスト用の IP アドレスを変更でき、そうしたクエリをどのマシンが処理するか決定することができます。

14.1. DNS の概要

DNS は通常、特定のドメインに権威ある 1 つまたは複数の集中型サーバーを使用して実装されています。クライアントホストがネームサーバーから情報を要求すると、ネームサーバーは通常ポート 53 に接続します。その後、ネームサーバーは要求された名前の解決を試行します。ネームサーバーに権威ある回答がない場合、または以前のクエリよりキャッシュされた回答がない場合は、ルートネームサーバー と呼ばれる他のネームサーバーにクエリを行い、問題の名前に対して権威あるネームサーバーがどれか決定します。その後、要求した名前を取得するためにルートネームサーバーにクエリを行います。

14.1.1. ネームサーバーのゾーン

BIND (Berkeley Internet Name Domain) などの DNS サーバーでは、全情報は リソースレコード (RR) と呼ばれる基本的なデータ要素に保存されています。リソースレコードは通常、ホストの完全修飾ドメイン名 (FQDN) であり、ツリーのような階層で構成された複数のセクションに分かれています。この階層はメイントランク、プライマリブランチ、セカンダリブランチというように構成されています。

例14.1 シンプルなリソースレコード

bob.sales.example.com
階層の各レベルはピリオド (.) で分かれています。例14.1「シンプルなリソースレコード」 では、comトップレベルドメインexample がそのサブドメイン、example のサブドメインである sales が定義されています。この場合は、sales.example.com ドメインの一部である bob がリソースレコードを識別します。左端の部分 (bob) を除いては、これらのセクションはそれぞれ ゾーン と呼ばれ、特定の 名前空間 を定義します。
ゾーンは ゾーンファイル を使用して権威ネームサーバー上で定義されます。ゾーンファイルには、各ゾーンのリソースレコードの定義が含まれています。ゾーンファイルは、ファイルへの変更が行われる プライマリネームサーバー (別名 マスターネームサーバー) 、プライマリネームサーバーからゾーン定義を受け取る セカンダリネームサーバー (別名 スレーブネームサーバー) に保存されています。プライマリネームサーバー、セカンダリネームサーバーともゾーンに対し権威があり、クライアントには同一に見えます。設定により、どのネームサーバーも複数ゾーンに対してプライマリサーバーまたはセカンダリサーバーとして同時に機能することができます。

14.1.2. ネームサーバーのタイプ

ネームサーバーの設定タイプには以下のように 2 つあります。
権威
権威ネームサーバーはゾーンの一部であるリソースレコードに対してのみ回答します。このカテゴリにはプライマリ (マスター) ネームサーバーとセカンダリ (スレーブ) ネームサーバーの両方が含まれます。
再帰
再帰ネームサーバーは解決サービスを行いますが、どのゾーンに対しても権威ではありません。すべての解決への回答は一定期間はメモリにキャッシュされ、取得したリソースレコードで指定されます。
ネームサーバーは権威的であると同時に再帰的でもありますが、設定タイプを組み合わせることは推奨されません。権威サーバーが機能できるようにするには、常にすべてのクライアントが利用できるものでなくてはなりません。一方で、再帰的ルックアップは権威ある応答よりはるかに時間がかかるため、再帰的なサーバーは限られた数のクライアントだけが利用できるものでなくてはなりません。そうでないと、DDoS 攻撃 (分散型サービス拒否攻撃) の可能性が高まります。

14.1.3. ネームサーバーとしての BIND

BIND は一連の DNS 関連プログラムで構成されています。それには named と呼ばれるネームサーバー、rndc という管理ユーティリティ、dig というデバッグツールが含まれています。Red Hat Enterprise Linux におけるサービスの実行方法については 10章サービスとデーモン を参照してください。