DNSの概要を知ろう
DNSの概要
インターネットでは、すべてのホスト(コンピュータ)をIPアドレスで区別しています。IPアドレスは、0~255の数値を4つ、ピリオドで区切って表記 (例:192.168.0.1)したもので、インターネット上の住所のようなものです。ただこの住所は人間にとって扱いやすいものではないので、IPアドレスをコンピュータ名に置き換え、ホストを簡単に特定するための別名、ドメイン名が考え出されました。その機構をDNS(Domain Name System)と呼び、それを実現するためのサーバをDNSサーバと呼びます。
ここで、DNSを簡単に説明しておきます。DNSはドメイン名に対応した階層構造になっており、最上位に位置するDNSサーバをルートサーバと呼びます。このルートサーバから、下位のDNSサーバへとホスト名の問い合わせが行われていくことにより、最終的にホスト名に対応するIPアドレスが返されます。これがDNSの仕組みです。
BINDの概要
DNSの実装には、BIND(Berkeley Internet Name Domain)というアプリケーションが一般に使われています。BINDは、ドメイン名からIPアドレスを引く正引き辞書と、IPアドレスからドメイン名を捜す逆引き辞書の2つで構成されています。外部から問い合わせがあれば、これらの辞書を使って、IPアドレス、もしくはドメイン名を答えます。
DNSサーバーは、役割/機能に応じて以下の4 つのタイプに分類されます。
- プライマリDNSサーバ
- ドメイン内のすべての情報を保持しているサーバ。
- セカンダリDNSサーバ
- ドメイン内のすべての情報を保持しているサーバ。
- キャッシュDNSサーバ
- クライアントからの問い合わせに対して、指定されたDNSサーバーへその問い合わせを転送します。名前の通り一度あった問い合わせを一定時間キャッシュ(保持)しますので、次回からの問い合わせには迅速に回答することが可能です。大規模なサイトなどではプライマリやセカンダリの負荷を軽減するメリットがあります。
- スレーブサーバ
- プライマリサーバーとほぼ同様のデータベースを保持しています。相違点は、自分自身で解決できない要求があった場合に指定された特定のサーバーに問い合わせるよう設定されていることです。
用語集
- DNS
- インターネット上のホスト名とIPアドレスを対応させるシステム。全世界のDNSサーバが協調して動作する分散型データベースである。IPアドレスをもとにホスト名を求めたり、その逆を求めたりすることができる。各DNSサーバは自分の管理するドメインについての情報を持っており、世界で約10台運用されているルートサーバにドメイン名と自分のアドレスを登録しておく。リゾルバと呼ばれるクライアントプログラムは、調べたいドメイン名(またはIPアドレス)をまずルートサーバに照会し、そのドメインを管理するDNSサーバを調べ、そのDNSサーバに情報を聞き出すことで変換を行う。
- IPアドレス
- インターネットやイントラネットなどのIPネットワークに接続されたコンピュータ1台1台に割り振られた識別番号。123.123.0.1などのように表現する。インターネット上ではこの数値に重複があってはならないため、割り当てなどの管理は各国のNICが行っている。
- ドメイン
- インターネット上に存在するコンピュータやネットワークにつけられる識別子。インターネット上の住所のようなもの。数字の羅列であるIPアドレスは人間にとって扱いにくいため、アルファベットと数字(と一部の記号)を使うことができるドメイン名を別名として運用するようになった。ドメイン名とIPアドレスを対応させるシステムはDNSと呼ばれ、全世界のDNSサーバが連携して運用されている。ドメイン名の衝突を防ぐため、ドメイン名の管理はIANAが一元管理しており、下部組織である各国のNICが割り当て業務を行う。
- NIC
- インターネット上で利用されるIPアドレスやドメイン名などを割り当てる民間の非営利機関。NICの総本山はアメリカにあるInterNIC。
BINDの基本設定
設定ファイル
設定が必要なファイルは以下の6つで、このうちブートファイルと呼ばれるものと、/etc/resolv.conf 以外のファイル名は任意です。他の設定ファイルの名前は、ブートファイルの中で指定します。
- ブートファイル: /etc/named.boot、もしくは /etc/named.conf
- リゾルバファイル: /etc/resolv.conf
- 正引きファイル(ゾーンファイル)
- 逆引きファイル(リバースファイル)
- キャッシュファイル
- ループバックファイル
ブートファイル
DNSサーバの設定・運用に関するファイルは、いくつかのテキストファイルです。DNSサーバ用のファイルのうち、一番最初に設定するファイルはブートファイルと呼ばれ、/etc/ディレクトリにあります。ブートファイルはBINDのバージョンによって名前が異なり、書式も違います。
BINDのバージョン | ブートファイル名 |
---|---|
BIND 4.x.x | /etc/named.boot |
BIND 8.x.x | /etc/named.conf |
もし、設定ファイルの格納場所が不明な場合は
# whereis named
で格納場所を突き止めることができます。
named-bootconf.pl
BIND 4.x.xからBIND 8.x.xに移行する際、その手助けをしてくれる変換スクリプトが用意されています。それ以外にも、BIND 8.x.xの記述は多少複雑になっているので、設定する際はBIND4.x.xで設定し、BIND 8.x.x形式に変換してもよいでしょう。
変換スクリプトはPerlスクリプト(named-bootconf.pl)としてBINDのソースに添付されています。
named-bootconf.plファイルを検索する
# find / -name named-boot* /usr/doc/bind-8.1.2/named-bootconf.pl
検索結果の場所に移動
# cd /usr/doc/bind-8.1.2/
named.bootファイルを変換
# named-bootconf.pl < /etc/named.boot > /etc/named.conf
named.bootファイルの書式
primaryで始まる行は、指定したドメインあるいはネットワークに対してプライマリになることを設定します。primaryの書式は次のとおりです。
primary ドメイン名/ネットワーク名の指定 ゾーンデータファイル名
他のドメインのセカンダリを引き受ける場合の設定
ほかのドメインのセカンダリになることをネームサーバに指示する場合には、次のような行をブートファイルに追加します。
secondary ドメイン名 ゾーン転送元 バックアップファイル名
[ドメイン名]は、セカンダリとなるドメイン名の指定です。[ゾーン転送元]は、ゾーン転送元となるプライマリDNSのIPアドレスを指定します。[バックアップファイル名]はセカンダリに設置されるバックアップファイル名を指定します。
named.bootファイル
; ■各設定ファイルを置くディレクトリを指定 ; directory /var/namedb ; ※プロパイダをフォワーダーにする場合 forwarders xxx.xxx.xxx.xxx ; ■キャッシュファイルを指定 ; 3項目は世界中のルートサーバをリストしたファイル。 ; キャッシュファイルの入手先: ; 「ftp://ftr.rs.internic.net/domain/named.root」 ; 2項目のピリオド( . )を忘れないこと ; ------------------------------------------------- ; 1項 2項 3項(ファイル名) ; ------------------------------------------------- cache . named.ca ; ■ループバックファイルの指定 ; ループバックネットワークのアドレスは127.0.0で、ローカルホストのIPアドレスは127.0.0.1。 ; ------------------------------------------------- ; 1項 2項(ループバック) 3項(ファイル名) ; ------------------------------------------------- primary 0.0.127.in-addr.arpa named.local ; ■ゾーンファイルの指定 ; 2項目はドメイン名を指定。 ; ------------------------------------------------- ; 1項 2項(ドメイン名) 3項(ファイル名) ; ------------------------------------------------- primary domain.co.jp named.hosts ; ■逆引きファイルの指定 ; 2項目はネットワークアドレスを逆順にし、in-addr.arpaを追加する。 ; ------------------------------------------------- ; 1項 2項 3項(ファイル名) ; ------------------------------------------------- primary 12.345.123.123.in-addr.arpa named.rev ; ※プロパイダをフォワーダーにする場合 slave
hostsファイルとリゾルバ
/etc/hostsファイルの編集
ホスト名検索の一種に /etc/hosts ファイルがあります。これは、ホスト自身が自ホスト内の/etc/hostsファイルを検索する仕組みです。簡単に説明すると、ホストのIPアドレスと、ドメイン名の対応を記録したファイルのことです。hostsファイルにIPアドレスと名前の対応を書いておくことで、DNSを参照することなく名前の解決ができます。
hostsファイルは簡単なテキストファイルで、1行に1つの IP アドレスがあり、 IPアドレスとホスト名を関連づけていいます。/etc/hostsファイルの編集は次のように記述することになっています。
IPアドレス ホスト名 エイリアス名
/etc/hostsの中身
127.0.0.1 localhost.localdomain localhost 123.123.123.123 www.rfs.jp www
先頭にある「127.0.0.1」というIPアドレスはループ・バック・アドレスと呼ばれ、自分自身を指すIPアドレスです。
hostsファイルによるネームサービスは、大きなネットワークでは維持管理の手間が大きく、現実的ではありませんが、4~5台までのホスト数の少ないネットワークではDNSサーバーの負荷を軽減でき、レスポンスが良好となるというメリットがあります。
リゾルバ
リゾルバは、クライアントからの名前要求に対してDNSサーバーに要求を送り、回答をクライアントに返すプログラムです。DNSサーバーが名前解決用のサーバープログラムであるのに対し、リゾルバは名前解決用クライアントプログラムで、/etc/host.confと/etc/resolv.confの2つのファイルを必要とします。
/etc/host.conf
主にLinuxでは、IPアドレスとホスト名の変換に、/etc/hostファイルを用いる方法と、DNSを用いる方法の2つが用意されています。この2つのどちらを優先するかを決めるのが、 /etc/host.confファイルです。
/etc/host.conf の中身
order hosts,bind multi on
この表記は、まず /etc/hosts ファイルを参照し、もし見つからなければDNSを参照するようにするための設定です。
- order: 実行される順番を指定します。「order hosts,bind」の場合、まずhostsファイルによる名前解決を試みて、解決できない場合にBINDを使うという意味です。
- multi on: 名前解決の結果が複数だった場合の処理方法について指定します。"multi
on"は複数のアドレスをそのまま返し、"multi off" は最初に見つかった物のみを返すという意味です。
DNSを利用する場合には、次のように記述する必要があります。
order hosts,bind multi
/etc/resolv.conf
/etc/resolv.conf は、ドメイン名とDNSサーバーに関して記述してあるファイルです。/etc/
resolv.conf ファイルの内容の一例を以下に記します。
;このホストが所属するデフォルトドメインの名前を指定します。 domain example.jp ; domainディレクティブとは別のサーチリストを定義したい場合に指定します。 search example.jp ;参照するネームサーバのIPアドレスを指定します(ここでは自分自身を指定)。 nameserver 129.0.0.1 nameserver 123.123.123.123
"domain" は、サーバーが属しているドメイン名、"search" は、ドメイン名の無いホストからの問い合わせの際に補うドメイン名、"nameserver" は、使用するDNSサーバーを指定します。
nameserverディレクティブは、最大3行まで定義することが可能で、上から順番に利用されます。
- ブート時
- 大部分のシステムは、ローカルネットワークにおいて重要なホストの名前とアドレスが含まれた小さなホストテーブルを持っている。これは、システムのブート時などのDNSが稼働していないときに役立つ。
- NIS
- NISを使用しているサイトは、ホストテーブルを NIS ホストデータベースの入力として用いる。NISをDNSと共に使用できるにもかかわらず、大部分のNISサイトは未だに、全てのローカルホストのエントリをもつホストテーブルをバックアップとして使用している。
- 隔絶されたノード
- ネットワークから隔絶された非常に小さなサイトは、DNSの代わりにホストテーブルを使用している。ローカル情報が稀にしか変更されず、ネットワークがインターネットと接続されていない場合、DNSにそれほどの利点はない。