内部向け DNS サーバの構築
DNS サーバとして有名な BIND を使用して、LAN 内部向けの DNS サーバを構築します。
LAN 内部向けの設定ですので、外部(インターネット側)からのアクセスは一切関係ありません。
LAN 内に サーバ以外のパソコン(以下、クライアント)がある場合、クライアントから自分のドメインでアクセスした場合、
ルータの設定画面が表示されます。これは簡単に言うと、LAN 内の名前解決が出来ていないからです。
クライアント毎に hosts ファイルを設定しても良いのですが、クライアントが複数台ある場合、その設定を行うのも面倒ですよね。
そこで、LAN 内部の名前解決を一括管理する DNS サーバを構築します。
このページでの実現させる事を以下に示します。
ページ内コンテンツ一覧
実際に DNS サーバを構築する前に、やっておかなければならない事があります。それは、LAN 構成の見直しです。
具体的には、ルータ、サーバなどの IP アドレスとホスト名をキチンと考えます。
私は以下の様に LAN 設定を行いました。
ドメイン名、ホスト名、ローカル IP アドレスはご自分の環境と読み替えて下さい。
機器の用途 | ホスト名 | ローカル IP アドレス |
ルータ | router.miloweb.net | 192.168.0.1 |
サーバ | linux.miloweb.net | 192.168.0.2 |
メインのクライアント | pc01.miloweb.net | 192.168.0.3 |
その他のクライアント | 適当に・・・ | DHCP より取得 |
そして更にちょっとプロっぽくする為に、サーバ機に以下の別名( CNAME )を付ける事にします。
これは、あくまで LAN 内でのみ有効な設定方法です。
ホストの別名 | ローカル IP アドレス |
www.miloweb.net | 192.168.0.2 |
ftp.miloweb.net | 192.168.0.2 |
smtp.miloweb.net | 192.168.0.2 |
pop.miloweb.net | 192.168.0.2 |
dns.miloweb.net | 192.168.0.2 |
それぞれのホストに該当のホスト名とローカル IP アドレスを設定します。
Vine Linux にはデフォルトで BIND がインストールされます。
私は RPM インストールで BIND9 でやりたかったのですが、依存関係で BIND9 がインストールできず、断念。
しかたがないので、BIND8 系で行いました。
インストールしたのは以下の3つのパッケージです。
インストールは以下のコマンドで行います。
# rpm -ivh bind-8.3.1-0vl2 bind-devel-8.3.1-0vl2 bind-utils-8.3.1-0vl2
実際にインストールされたかどうかを確認するには以下のコマンドを実行します。
# rpm -qa | grep bind
bind-8.3.1-0vl2
bind-devel-8.3.1-0vl2
bind-utils-8.3.1-0vl2
インストールしたパッケージが表示されればオッケーです
これでインストールは完了です。
BIND 本体の設定します。
設定ファイルへのフルパスは /etc/named.conf になります。
もし、 named.conf が存在しない場合、自分で新規作成しても構いません。
/etc/named.conf をエディタで開き、以下の様に追加・編集して行きます。
なお、「 // 」の行はコメントです。( コメントの付け方は C 言語と同じです )
options { // zone ファイルの格納場所 directory "/var/named"; // BIND の利用を許す範囲を指定 allow-query { // 自分自身( localhost ) 127.0.0.1; // 192.168.0.* ( Subnet 255.255.255.0 ) 192.168.0.0/24; }; // スレーブ DNS のアドレスを記述。内向き DNS の場合は必要ないが一応記載。 allow-transfer { // 自分自身( localhost ) 127.0.0.1; // 192.168.0.* ( Subnet 255.255.255.0 ) 192.168.0.0/24; }; // 自前で名前解決できないとき、まずはプロバイダの DNS へ聞きに行く様にする。 // LAN 内名前解決のパフォーマンス向上にもつながるらしい。 2003/07/29 追記 forwarders { XXX.XXX.XX.XX; // プロバイダのプライマリ DNS の IP アドレス ( 注1 XXX.XXX.XX.XX; // プロバイダのセカンダリ DNS の IP アドレス ( 注1 }; }; // ルート DNS の情報 zone "." { // ルート DNS の情報である事を明示 type hint; // ファイル名 file "named.ca"; }; // localhost の正引きの設定 zone "localhost" { // Master DNS Serverであることを示す type master; // ファイル名 file "localhost.zone"; }; // localhost の逆引きの設定 zone "0.0.127.in-addr.arpa" { // Master DNS Serverであることを明示 type master; // ファイル名 file "0.0.127.in-addr.arpa"; }; // miloweb.net の正引きの設定 zone "miloweb.net" { // Master DNS Serverであることを明示 type master; // ファイル名 file "miloweb.net"; }; // 192.168.0.* の逆引きの設定 zone "0.168.192.in-addr.arpa" { // Master DNS Serverであることを明示 type master; // ファイル名 file "0.168.192.in-addr.arpa"; };
注1 )
「 forwarders 」の記述が無いと、BIND は自分で名前解決できない場合に直接ルートサーバに名前解決を求める様です。
「 forwarders 」にプロバイダの DNS サーバを指定する事により、名前解決のパフォーマンスが向上します。
プロバイダが DNS サーバの IP アドレスを公開していない場合は、ルータが自動的に取得する WAN 側の DNS サーバの IP アドレスを指定しても構いません。私( プロバイダ:Yahoo!BB )はそうしています。
この場合は、「 DNS サーバの IP アドレスが変化してもプロバイダに文句は言わない 」というスタンスで行かなければなりません。
2003/07/29 注1 を追記
ルート DNS の設定をします。
保存する場所は /var/named/named.ca
named.ca はインターネット上で公開されているので、それをダウンロードします。
その際、ファイル名が「 named.root 」になっていたので、named.ca に変更します。
以下のコマンドでダウンロード&指定の場所にコピーします。
# wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
指定の場所に指定のファイル名でコピー
# cp named.root /var/named/named.ca
localhost の正引きの設定 - localhost.zone
localhost.zone を設定します。
保存する場所は /var/named/localhost.zone
ファイル名はこのままで構いません。
このファイルが存在しない場合は、新規作成します。
なお、これから説明する localhost.zone , 0.0.127.in-addr.arpa , miloweb.net , 0.168.192.in-addr.arpa 中の「 ; (セミコロン) 」より後はコメントになります。
$TTL 1D ; このファイルの情報は、他の DNS に 1D ( = 1 Day ) の間キャッシュされる @ IN SOA linux.miloweb.net. root.linux.miloweb.net. ( 2003072501 ; シリアル番号。yymmdd の後にシリアル番号 2 桁を付加 3H ; Slave Server は 3H ( = 3 Hoour ) に 1 回 Master Server から情報を更新 1H ; Slave Server が情報更新に失敗したら 1H ( = 1 Hour ) 後に再挑戦 1W ; Slave Server が 1W ( = 1 Week ) の間情報更新に失敗したら応答しなくなる 1D ) ; 他の DNS がクエリに失敗した時、 1D ( = 1 Day ) の間失敗したことがキャッシュされる IN NS linux.miloweb.net. ; Name Server を指定 localhost. IN A 127.0.0.1 ; A は実際のアドレスを示す。 localhost = 127.0.0.1
localhost の逆引きの設定 - 0.0.127.in-addr.arpa
0.0.127.in-addr.arpa を設定します。
保存する場所は /var/named/0.0.127.in-addr.arpa
ファイル名はこのままで構いません。
このファイルが存在しない場合は、新規作成します。
$TTL 1D @ IN SOA linux.miloweb.net. root.linux.miloweb.net. ( 2003072501 3H 1H 1W 1D ) IN NS linux.miloweb.net. 1 IN PTR localhost. ; 1 は、127.0.0.1 を、PTR は逆引きを示す。127.0.0.1 = localhost
miloweb.net の正引きの設定 - miloweb.net
miloweb.net を設定します。
保存する場所は /var/named/miloweb.net
ファイル名は自分の取得したドメイン名を付けます。
これは、named.conf で指定したものに限ります。
$TTL 1D @ IN SOA linux.miloweb.net. root.linux.miloweb.net. ( 2003072501 3H 1H 1W 1D ) IN NS linux.miloweb.net. IN MX 10 linux.miloweb.net. ; メールサーバのホスト名を指定。10 は優先順位。 router IN A 192.168.0.1 ; A は実際のアドレスを示す。 router = 192.168.0.1 linux IN A 192.168.0.2 ; A は実際のアドレスを示す。 linux = 192.168.0.2 miloweb.net IN A 192.168.0.2 ; A は実際のアドレスを示す。 miloweb.net = 192.168.0.2 pc01 IN A 192.168.0.3 ; A は実際のアドレスを示す。 pc01 = 192.168.0.3 dns IN CNAME linux ; CNAME は別名を示す。dns = linux ==> 192.168.0.2 www IN CNAME linux ; これらはお好みで名付けて下さい smtp IN CNAME linux pop IN CNAME linux ftp IN CNAME linux
192.168.0.* の逆引きの設定 - 0.168.192.in-addr.arpa
0.168.192.in-addr.arpa を設定します。
保存する場所は /var/named/0.168.192.in-addr.arpa
ファイル名はこのままで構いません。
このファイルが存在しない場合は、新規作成します。
$TTL 1D @ IN SOA linux.miloweb.net. root.linux.miloweb.net. ( 2003072501 3H 1H 1W 1D ) IN NS linux.miloweb.net. IN PTR miloweb.net. ; 解決するドメイン IN A 255.255.255.0 ; サブネットマスク 1 IN PTR router.miloweb.net. ; 192.168.0.1 の逆引き 行頭の数字は IP アドレスのホストアドレス部とリンクしている 2 IN PTR linux.miloweb.net. ; 192.168.0.2 の逆引き 行頭の数字は IP アドレスのホストアドレス部とリンクしている 3 IN PTR pc01.miloweb.net. ; 192.168.0.3 の逆引き 行頭の数字は IP アドレスのホストアドレス部とリンクしている
これまでは、BIND に関するファイルを編集しましたが、ここからは サーバ機のネットワークに関するファイルを設定します。
設定すべきファイルを以下に挙げます。
/etc/hosts
元々の内容を以下の記述に変更します。
DNS サーバの情報と hosts の情報が不整合を起こさない為に localhost 以外はコメントアウトします。
# that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost #192.168.0.2 linux
/etc/resolv.conf
元々の内容を以下の記述に変更します。
「 search 」の値は、ホスト名検索時に省略できるドメイン名、
「 nameserver 」の値は、ネームサーバは localhsot である事を示しています。
search miloweb.net nameserver 127.0.0.1
/etc/nsswitch.conf
以下の記述があるかを確認します。
名前解決をする順番を示しています。
hosts ファイル、nisplus, nis, dns の順に名前解決します。
hosts: files nisplus nis dns
/etc/host.conf
以下の記述があるかを確認します。
「 order hosts,bind 」は、 hosts ファイル、dns の順に名前解決
「 multi on 」の記述は /etc/hosts のホスト名に複数のIPを割り当てる事を示しています。
order hosts,bind multi on
ここで、一度サーバ機を再起動し、設定を確実に反映させる事をお勧めいたします。
私は再起動しました。
ここまでの設定でサーバ機の設定は全て終了です。
早速 BIND を起動してみましょう。
# /etc/rc.d/init.d/named start Starting named: [ OK ]
BIND が本当に起動しているかを以下のコマンドで調べます。
# ps aux | grep named named 1133 0.0 0.7 3296 2212 ? S 13:28 0:00 named -u named root 2360 0.0 0.2 2488 688 pts/0 R 16:42 0:00 grep named
上記のレスポンスが返ってくれば BIND は起動しています。
次に BIND の起動ログを見てみましょう。以下の様なログが残っていれば BIND の起動と設定は問題無い、という事になります。
/var/log/messages に以下のログがあるかを確認します。もしエラーがあればログをみれば対策が立てやすくなります。
# cat /var/log/messages 下記ログは必要箇所のみ抜粋 Jul 24 16:45:31 linux named[2388]: starting (/etc/named.conf). named 8.3.1-REL 2002年 11月 14日 木曜日 12:54:17 JST ^Itomop@hangar:/export/home/tomop/rpm/BUILD/bind-8.3.1/src/bin/named Jul 24 16:45:31 linux named[2388]: hint zone "" (IN) loaded (serial 0) Jul 24 16:45:31 linux named[2388]: master zone "0.0.127.in-addr.arpa" (IN) loaded (serial 20030724) Jul 24 16:45:31 linux named[2388]: master zone "miloweb.net" (IN) loaded (serial 20030724) Jul 24 16:45:31 linux named[2388]: master zone "0.168.192.in-addr.arpa" (IN) loaded (serial 20030724) Jul 24 16:45:31 linux named[2388]: listening on [127.0.0.1].53 (lo) Jul 24 16:45:31 linux named[2388]: listening on [192.168.0.2].53 (eth0) Jul 24 16:45:31 linux named[2388]: Forwarding source address is [0.0.0.0].32780 Jul 24 16:45:31 linux named[2389]: group = 25 Jul 24 16:45:31 linux 7月 24 16:45:31 named: named起動 succeeded Jul 24 16:45:31 linux named[2389]: user = named Jul 24 16:45:31 linux named[2389]: Ready to answer queries.
上記の様なログが残っていれば、BIND の設定は正常です。
(このログの様式はディストリビューションやバージョンによって微妙に異なります)
動作テストを行います。
まずはサーバ機からの動作テストを行います。動作テストには nslookup コマンドを使用しました。
# nslookup Default Server: linux.miloweb.net Address: 192.168.0.2 > このコマンドより対話モードに入ります
localhost の正引き > localhost Server: linux.miloweb.net Address: 192.168.0.2 Name: localhost Address: 127.0.0.1
localhost の逆引き > 127.0.0.1 Server: linux.miloweb.net Address: 192.168.0.2 Name: localhost Address: 127.0.0.1
LAN 内の正引き > www.miloweb.net Server: linux.miloweb.net Address: 192.168.0.2 Name: linux.miloweb.net Address: 192.168.0.2 Aliases: www.miloweb.net
LAN 内の逆引き > 192.168.0.2 Server: linux.miloweb.net Address: 192.168.0.2 Name: linux.miloweb.net Address: 192.168.0.2
LAN 外の正引き > www.yahoo.com Server: linux.miloweb.net Address: 192.168.0.2 Non-authoritative answer: Name: www.yahoo.akadns.net Addresses: 66.218.71.93, 66.218.71.81, 66.218.71.92, 66.218.71.87 66.218.70.48, 66.218.70.49, 66.218.71.90, 66.218.71.91 Aliases: www.yahoo.com
LAN 外の逆引き > 66.218.71.93 Server: linux.miloweb.net Address: 192.168.0.2 Name: w14.www.scd.yahoo.com Address: 66.218.71.93
存在しないホストへの正引き・逆引き > sonzai-shinai Server: linux.miloweb.net Address: 192.168.0.2 *** linux.miloweb.net can't find sonzai-shinai: Non-existent host/domain > 192.168.0.99 Server: linux.miloweb.net Address: 192.168.0.2 *** linux.miloweb.net can't find 192.168.0.99: Non-existent host/domain > exit 「 exit 」と入力すると nslookup の対話モードを終了します
これだけのテストで同様の結果を得る事が出来たら、名前解決は正常に行われています。
普通のクライアントが LAN に接続する場合、DNS サーバの設定はしていません。
それは、ルータ自身がプライマリ DNS サーバの機能を持っているからです。
クライアント毎に DNS サーバを指定しても良いのですが、そんな事したら本末転倒なので、
ルータ自身が参照する DNS サーバをサーバ機である 192.169.0.2 に変更します。
ルータ毎に設定方法が違うので「こうするのだ!」とは言えませんが、大抵のルータでは「 DHCP 」に関する設定項目の辺りに DNS サーバの指定フォームがある様です。
DHCP サーバにもなっているルータは、初期状態でルータのローカル IP アドレスをDNS サーバの IP アドレスとして返します。
ルータが DNS サーバとして DHCP クライアントに通知する DNS サーバの DNS サーバ名を、
自前の DNS サーバが動いてる linux.miloweb.net のローカル IP アドレスである 192.168.0.2 に変更します。
下図は私が使用しているルータ( MELCO BUFFALO Broad Station BLR-TX4 )の設定画面です。
多分、同じ MELCO のルータを使用されている方なら操作に大差はないと思いますので、解説します。
Broad Station BLR-TX4 の設定画面を表示したら、「 詳細設定 」をクリックし、左フレームの「 拡張設定 」項目の中の「 DHCPサーバ 」をクリックします。
すると、右フレームに「 DHCPサーバ(IPアドレス自動割当)設定 」画面が表示されますので、その中の 「 DNSサーバの通知 」の項目を設定します。
設定する箇所は、
です。
図BIND-001 「プライマリ」に DNS サーバを構築したサーバ機のローカル IP アドレスを指定
設定ができたら忘れずに「設定」ボタンをクリックし、変更を反映させます。
このページはちょっと長いですね・・・。しかも文字ばっかり!
ネットワークの事が絡むとどうしても解説が長くなってしまいます。
常々思うことなのですが、ネットワークは奥が深い!
これまで私は「ややこしそう」との理由で、DNS サーバの構築を鬼門としてましたが、遂に設定してしまいました。
DNS は特に専門用語が多いです。しかし、出来てしまえばそうでもありません。
私の周辺にも「ネットワークは難しい」と嘆いている人々がいますが、実際にやってみると理解度が全然違います。
「百聞は一見にしかず」!一度実践してみてはいかがでしょうか?