Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

 内部向け DNS サーバの構築

DNS サーバとして有名な BIND を使用して、LAN 内部向けの DNS サーバを構築します。
LAN 内部向けの設定ですので、外部(インターネット側)からのアクセスは一切関係ありません。

LAN 内に サーバ以外のパソコン(以下、クライアント)がある場合、クライアントから自分のドメインでアクセスした場合、
ルータの設定画面が表示されます。これは簡単に言うと、LAN 内の名前解決が出来ていないからです。
クライアント毎に hosts ファイルを設定しても良いのですが、クライアントが複数台ある場合、その設定を行うのも面倒ですよね。

そこで、LAN 内部の名前解決を一括管理する DNS サーバを構築します。
このページでの実現させる事を以下に示します。

ページ内コンテンツ一覧

▲ページの最上部に戻る

 LAN 構成の見直し

実際に 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 アドレスを設定します。

▲ページの最上部に戻る

 BIND のインストール

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 の設定

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 の情報 - named.ca

ルート 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 の起動

ここまでの設定でサーバ機の設定は全て終了です。
早速 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 アドレスを指定 ]

図BIND-001 「プライマリ」に DNS サーバを構築したサーバ機のローカル IP アドレスを指定

設定ができたら忘れずに「設定」ボタンをクリックし、変更を反映させます。

▲ページの最上部に戻る

 や、やっと終わったよ・・・(^-^;

このページはちょっと長いですね・・・。しかも文字ばっかり!

ネットワークの事が絡むとどうしても解説が長くなってしまいます。
常々思うことなのですが、ネットワークは奥が深い!
これまで私は「ややこしそう」との理由で、DNS サーバの構築を鬼門としてましたが、遂に設定してしまいました。
DNS は特に専門用語が多いです。しかし、出来てしまえばそうでもありません。
私の周辺にも「ネットワークは難しい」と嘆いている人々がいますが、実際にやってみると理解度が全然違います。
「百聞は一見にしかず」!一度実践してみてはいかがでしょうか?

▲ページの最上部に戻る

Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net