DNSサーバーのBINDを設定する
2005年2月13日 掲載
2006年6月14日 改訂
DNSとはDomain Name Systemの略であり、ドメイン名をIPアドレスに変換する仕組みのことだ。インターネット上のコンピュータは数字の羅列であるIPアドレスでアクセスするが、DNSを用いることで人間が覚えやすいドメイン名で指定できる。たとえば、ブラウザにwww.jitaku-server.netのようなURLを入力すると、DNSサーバーへと問い合わせを行う。そして、DNSからIPアドレスを取得し、そのIPアドレスで接続をおこなうわけだ。
DNSサーバーを設置するメリット
一般家庭ではプロバイダが用意したDNSサーバーを利用するのがふつうだ。だが、自宅サーバーを設置したなら、自分のところでDNSサーバーを動かすこともできる。自前のDNSサーバーを持つメリットは2つある。
まずはレスポンスが良くなるところ。DNSサーバーには過去に問い合わせた内容をキャッシュする機能があり、次に同じドメイン名を指定するとキャッシュされたデータを使用する。いちいち外部のDNSサーバーに問い合わせるよりも、LANの中にあるDNSサーバーを使った方が速いのだ。また、インターネットへの接続に使うルーターにはプロバイダのDNSサーバーへの問い合わせを中継する機能を持つものが多い。だが、ルーターの機能では速度が遅く、そこが原因となってインターネットへのアクセスが遅く感じられることもある。
もうひとつの利点は、LANの中のサーバーにホスト名でアクセスできるようになること。たとえば、LANの中でウェブサーバーを立ち上げたとき、ページがうまく表示されるか確認するにはサーバーのプライベートIPアドレスを指定して接続する。これがDNSサーバーを設置することで、www.jiitaku-server.netのような名前で見られるようになる。LANの中ではドメイン名を省略することができるので、wwwだけでアクセスすることも可能だ。
キャッシュだけのDNSサーバーを作る
Linuxの世界ではBINDというソフトウェアを使ってDNSサーバーを構築する。Vine LinuxではこのBINDが標準で組み込まれるので、あとからインストールする必要はないはずだ。もし何らかの理由でインストールされていないときは、「apt-get install bind」「apt-get install bind-utils」でインストールすることができる。
まずはLAN内のホスト名の通知を行わない、キャッシュだけのDNSサーバーを作ることから始めてみよう。BINDの設定はけっこう面倒なので、難しいことをやりたくない人はキャッシュだけでも快適に使えるようになると思う。
BINDの設定ファイルは/etc/named.confだ。しかし、なぜか標準インストールではこのファイルが作成されないので、次の内容のファイルを一から作成する必要がある。まずは理屈を考えることなく、ファイルをそのまま作成しよう。下の例を入力するとき、太字で示したプロバイダのDNSサーバーのアドレスだけは自分の環境に合わせて変更してほしい。
options {
directory "/var/named"; ZONEファイルの保存場所を指定
forwarders { ZONEファイルにないホスト名の検索先を指定
202.248.37.74; プロバイダのDNSサーバーのアドレス
202.219.63.253;
};
allow-query { DNSサーバーに接続できる端末を制限する
127.0.0.1; サーバー自身を示す
192.168.0.0/24; LAN内の端末を示す
};
};
zone "localhost" IN { localhostの正引きの設定
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN { localhostの逆引きの設定
type master;
file "0.0.127.in-addr.arpa";
};
次に/var/namedディレクトリにZONEファイルというホスト名とIPアドレスの対応を記述したファイルを作成する。ここではキャッシュとしてだけ使うので、localhostという自分を指し示すホスト名についてだけ情報を設定する。まずはlocalhostと指定したときにループバックアドレス(127.0.0.1)を通知するために、localhost.zoneというファイルを作る。
$TTL 1D
@ IN SOA localhost. root.localhost. (
2005021401
3H
15M
1W
1D )
IN NS localhost.
IN A 127.0.0.1
同じ/var/namedディレクトリに0.0.127.in-addr.arpaというファイルを作成する。こちらのファイルは127.0.0.1というアドレスからlocalhostというホスト名を導き出すために使う。IPアドレスからホスト名を探すことを逆引きという。
$TTL 1D
@ IN SOA localhost. root.localhost. (
2005021401
3H
15M
1W
1D )
IN NS localhost.
1 IN PTR localhost.
BINDを起動する
ファイルを作成したら、次はDNSサーバーを起動する。起動スクリプトは/etc/rc.d/init.d/namedである。次のようにコマンドを入力しよう。
# /etc/rc.d/init.d/named start namedを起動中: [ OK ] #
さらに標準ではシステム起動時にDNSサーバーが起動しない設定になっているので、chkconfigコマンドで自動起動するように設定する。「chkconfig named on」で設定を行い、「chkconfig --list named」で設定が正しくなされたかを確認する。「3:on」と表示されていることをチェックしよう。
# chkconfig named on # chkconfig --list named named 0:off 1:off 2:off 3:on 4:on 5:on 6:off #
DNSサーバーのテストを行う
設定が終わったら、DNSサーバーが正しく動作するかを確かめてみよう。まずはサーバーマシンが参照するDNSサーバーのアドレスを変更する。DNSサーバーのアドレスは/etc/resolv.confに保存されているので、これを編集する。DNSサーバーは自分自身なのでループバックアドレス(127.0.0.1)と指定する。設定は再起動しなくても反映するはずだが、念のために再起動しておくと安心だ。
nameserver 127.0.0.1
設定が正しいかどうかはhostコマンドで検証する。チェックのポイントは次の3つだ。
- localhostから127.0.0.1に変換できるか
- 127.0.0.1からlocalhostに変換できるか
- 外部のサーバーを指定したときにIPアドレスに変換できるか
次のように表示されればDNSサーバーは正しく動いている。
# host localhost localhostのIPアドレスを調べる localhost has address 127.0.0.1 # host 127.0.0.1 127.0.0.1のホスト名を調べる 1.0.0.127.in-addr.arpa domain name pointer localhost. # host www.vinelinux.org 外部のサーバーのIPアドレスを調べる www.vinelinux.org is an alias for vinelinux.org. vinelinux.org has address 133.1.84.71 #
また、WindowsのパソコンでもDNSサーバーの設定を変更してみる。
WindowsXPの場合はコントロールパネルの「ネットワーク接続」を開き、「ローカルエリア接続」か「ワイヤレスネットワーク接続」をダブルクリック。ネットワークの状態画面があらわれるので「プロパティ」をクリックすると、ネットワークの詳細設定を行う画面になる。ここで「この接続は次の項目を使用します」の中にある「インターネットプロトコル(TCP/IP)」をダブルクリックすれば、DNSサーバーの指定を行える。「次のDNSサーバーのアドレスを使う」を選択し、「優先DNSサーバー」のところに自宅サーバーのプライベートIPアドレスを入力しよう。
設定を保存したら、ブラウザを起動して、いろんなウェブサイトを開いてみる。少しは速くなったことを感じられるだろうか。