2009年3月6日金曜日

UbuntuにBIND9をインストール

[したいこと・しりたいこと]
UbuntuにBIND9をインストールする
Ubuntuで内向きのDNSサーバーを立てる

改定版
KRAKENBEAL RECORD: ubuntuでbind9を設定ver2
http://krakenbeal.blogspot.com/2009/08/ubuntubind9ver2.html


[環境]
Ubuntu Hardy 8.04
username:user01
USB 104Key (US)
インストール時にホストネームをpc-serverと指定した
インストール時にIPアドレスを192.168.0.2と指定した

ISPから配布されたDNSアドレス
123.45.67.89;
123.45.67.90;

一目でローカルテスト用とわかるテストドメイン名
example.localnet

接続ホスト名とIP一覧
defaultgateway:1291.68.0.1
pc-server:192.168.0.2
pc3:192.168.0.3
pc4:192.168.0.4
pc5:192.168.0.5

接続ホスト名と役割一覧
defaultgateway:Buffaloのルーター
pc-server:Ubuntu(仮想マシン)
pc3:Ubuntu(pc-serverのホストマシン)
pc4:クライアント1号
pc5:クライアント2号



1. インストール前の下準備


ホスト名とドメインの確認
/etc/hostsの修正

$ sudo vi /etc/hosts

127.0.0.1 localhost
127.0.1.1 pc-server

127.0.0.1 localhost localhost.loopback
127.0.1.1 pc-server
192.168.0.2 pc-server pc-server.example.localnet


名前解決の手段の確認と変更

$ sudo vi /etc/nsswitch.conf

#hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts: dns


サービスの再起動
$ sudo /etc/init.d/networking restart


2. BIND9のインストール

$ sudo apt-get install bind9


3. named.conf.optionsの編集

/etc/bind/named.confは変更しない方針


全体に関与するオプションの指定

$ sudo vi /etc/bind/named.conf.options

以下のコメントアウトされた部分を、

// forwarders {
// 0.0.0.0;
// };

次のように修正し、内部で解決できないgoogleのアドレス等を調べにいくISPのDNSを指定する

forwarders {
123.45.67.89;
123.45.67.90;
};

auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
上記の下にLAN内部のPCだけが参照できるように下記の内容を追記する

allow-query {
127.0.0.0/8;
192.168.0.0/24;
192.168.1.0/24;
};




4. named.conf.localの編集

/etc/bind/named.confは変更しない方針

このDNSサーバーが解決できるホスト名とIPアドレスの組み合わせ辞書の場所の指定

$ sudo vi /etc/bind/named.conf.local

次の内容を追加


// example.localnetのゾーン情報
zone "example.localnet" {
type master;
// example.localの正引きデ-タベースファイル名
file "/etc/bind/db.localnet";
};

// 192.168.0のゾーン情報
zone "0.168.192.in-addr.arpa" {
type master;
// 192.168.0の逆引きデ-タベースファイル名
file "/etc/bind/db.192.168.0";
};


// loopbackのゾーン情報
zone "loopback" {
type master;
// loopbackの正引きデ-タベースファイル名
file "/etc/bind/db.loopback";
};

// 127.0.0のゾーン情報
zone "0.0.127.in-addr.arpa" {
type master;
// 127.0.0の逆引きデ-タベースファイル名
file "/etc/bind/db.127.0.0";
};

include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1
allow { 127.0.0.1; }
keys { rndc-key; };
};


5.1 LANに接続している各マシンのホスト名とIPアドレスの対応表(正引き用)を作る
example.localのゾーン情報 (正引き用)を作る

$ sudo vi /etc/bind/db.localnet

;
; BIND data file for example.localnet
;
$TTL 86400
@ IN SOA ns.example.localnet. root.ns.example.localnet. (
2009010401 ; Serial
8H ; Refresh 28800
4H ; Retry 14400
3D ; Expire 259200
1D ) ; Negative Cache TTL 86400
IN NS ns.example.localnet.
IN A 192.168.0.2
ns IN A 192.168.0.2
pc-server CNAME ns.example.localnet.
localhost IN A 127.0.0.1

defaultgateway IN A 192.168.0.1
pc3 IN A 192.168.0.3
pc4 IN A 192.168.0.4
pc5 IN A 192.168.0.5


5.2 LANに接続している各マシンのホスト名とIPアドレスの対応表(逆引き用)を作る
example.localのゾーン情報 (逆引き用)を作る

$ sudo vi /etc/bind/db.192.168.0

;
; BIND data file for example.localnet
;
$TTL 86400
@ IN SOA ns.example.localnet. root.ns.example.localnet. (
2009010401 ; Serial
8H ; Refresh 28800
4H ; Retry 14400
3D ; Expire 259200
1D ) ; Negative Cache TTL 86400
IN NS ns.example.localnet.
2 IN PTR ns.example.localnet.

1 IN PTR defaultgateway.
3 IN PTR pc3.
4 IN PTR pc4.
5 IN PTR pc5.


6.1 loopbackに接続しているマシンのホスト名とIPアドレスの対応表(正引き用)を作る
loopbackのゾーン情報 (正引き用)を作る

$ sudo vi /etc/bind/db.loopback

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA loopback. root.loopback. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS loopback.
@ IN A 127.0.0.1
@ IN AAAA ::1
localhost IN A 127.0.0.1


6.2 loopbackに接続しているマシンのホスト名とIPアドレスの対応表(逆引き用)を作る
loopbackのゾーン情報 (逆引き用)を作る

$ sudo vi /etc/bind/db.127.0.0

;
; BIND reverse data file for loopback interface
;
$TTL 604800
@ IN SOA loopback. root.loopback. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS loopback.
1 IN PTR localhost.


7. 作成したゾーンファイルの検証
$ named-checkzone example.localnet /etc/bind/db.localnet
$ named-checkzone example.localnet /etc/bind/db.192.168.0
$ named-checkzone 127.0.0.1 /etc/bind/db.loopback
$ named-checkzone 127.0.0.1 /etc/bind/db.127.0.0

8.resolv.confの確認と修正

以下をコメントアウトして、nameserverにpc-serverのアドレスを指定する
nameserver 123.45.67.89
nameserver 123.45.67.90

変更後
#nameserver 123.45.67.89
#nameserver 123.45.67.90
nameserver 192.168.0.2


9. サービスの再起動


$ sudo /etc/init.d/networking restart
$ sudo /etc/init.d/bind9 restart


10. 確認

$ dig @pc-server.example.localnet example.localnet
$ nslookup


[注意]

※nslookupでは名前解決できるがFireFoxで名前解決できない場合

nsswitch.conf
最小限の設定でDNSを使う - adsaria mood
http://d.hatena.ne.jp/adsaria/20090131/1233383628
の解説では /etc/nsswitch.conf が設定済みを想定している模様

/etc/nsswitch.conf の
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

hosts: dns
に変更したらFireFoxで名前解決できるようになった

※ $ sudo /etc/init.d/bind9 restartが失敗して[fail]になる場合

named.conf.optionsまたはnamed.conf.localが書き間違っている場合
全角空白、全角スペースは見た目ではわからないので注意

// loopbackのゾーン情報
zone "loopback" {
type master;
file "/etc/bind/db.loopback";
};

// 127.0.0のゾーン情報
zone "loopback" {
type master;
file "/etc/bind/db.127.0.0";
};

のようにzoneネームが、ぶつかっている場合

※ 正引きできない

$ named-checkzone example.localnet /etc/bind/db.localnetがokと帰ってきた?
/etc/hostsの記述違い ?

誤)
192.168.0.2 pc-server pc-server.example.localnet
正)
192.168.0.2 pc-server example.localnet

誤)
192.168.0.2 pc-server .example.local
正)
192.168.0.2 pc-server example.localnet

誤)
192.168.0.2 pc-server localnet
正)
192.168.0.2 pc-server example.localnet

/etc/bind/db.localnet /etc/bindnamed.conf.local /etc/hosts の3つのファイルの確認
192.168.0.2 example.localnet の組み合わせを書く所に記述ミスはある?






[参考]


最小限の設定でDNSを使う - adsaria mood
http://d.hatena.ne.jp/adsaria/20090131/1233383628

BIND (DNSサーバー)/Ubuntu 8.04
http://www.shitomi.jp/ubuntu804/bind.html

http://www.atmarkit.co.jp/flinux/rensai/bind915/bind915b.html

@IT:すべての基礎、マスター・ゾーンサーバの設定(2/3)
http://www.atmarkit.co.jp/flinux/rensai/bind902/bind902b.html

@IT:BIND 9のチューニングと大規模運用(2/2)
http://www.atmarkit.co.jp/flinux/rensai/bind911/bind911b.html

0 コメント: