2009年12月13日日曜日

DebianとBIND9でDNSサーバを作成

サーバの台数が増え、/etc/hostsにいちいち書くのが流石に面倒になってきた。そこで、何度か挑戦して諦めることを繰り返していたBIND9をいい加減覚えようとやる気を出してみた。

今回は、できる限りデフォルト設定を利用し、基本のみを設定することを目標にして纏めてみる。
外部には公開せず、LAN内部のみで利用することを前提として作成する。よって、公開サーバを立てる場合は、これらの設定に加え、セキュリティ対策が必要となる。


サーバとして使用するのは、VPNサーバとしてもお世話になっているMac Mini(中身はDebian 5.03。ホスト名megurine)。
ネットワークの構造はこんな感じ。



ネットワークアドレス 192.168.0/24
ネットワーク名 h.hachune.net
router 192.168.0.1
hatsune 192.168.0.100
oldfox 192.168.0.101
hachune 192.168.0.102
360 192.168.0.103
megurine 192.168.0.104
kagamine 192.168.0.105


この中で、hatsune、hachune、kagamine、megurineには、それぞれmiku、eee、rin、lukaとCNAMEレコード(Alias)を付ける。
更に、megurineにはAレコードでnsとも付けておく。


1. BIND9をインストール


Debianなので
% sudo aptitude install bind9
で一発インストール可能。

この時、BINDを実行するグループ bindユーザ bindが、自動的に追加される。


2. named.confの変更


…と思ったが、named.confで弄るところは無い模様。

一度設定したら滅多に変更することの無い、ルートサーバ、ループバックアドレス正引き・逆引きの設定がnamed.confに既に用意されていて、ドメイン設定はnamed.conf.local、BINDのオプションはnamed.conf.optionsに書くように、とのことらしい。

※named.confの内容(変更なし)

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";


※/etc/bind/db.rootの内容(変更なし)

; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.root
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: Feb 04, 2008
; related version of root zone: 2008020400
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803f:235
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; operated by VeriSign, Inc.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30
;
; operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1
;
; operated by ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
;
; operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35
; End of File


※/etc/bind/db.localの内容(変更なし)

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


※/etc/bind/db.127の内容(変更なし)

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


※/etc/bind/db.0の内容(変更なし)

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


※/etc/bind/db.255の内容(変更なし)

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



3. named.conf.localの変更


ようやく設定ファイルを弄ることになる。
ここでは、/etc/bind/zones.rfc1918を参考にしながら、named.conf.localのみの変更を行う。
h.hachune.netの正引きと、そのネットワークの逆引き168.192.addr-arpaの設定を行う。

※zones.rfc1918の内容(変更なし)

zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };


※named.conf.local(変更前)

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";



※named.conf.local(変更後)

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";


zone "h.hachune.net"{
type master;
file "/etc/bind/h.hachune.net/h.hachune.net.zone";
};

zone "0.168.192.in-addr.arpa"{
type master;
file "/etc/bind/h.hachune.net/h.hachune.net.rev";
};




4. /etc/bind/h.hachune.net/h.hachune.net.zoneの設定


h.hachune.netの正引きの設定を行う。
ここでは、/etc/bind/db.emptyを参考に、設定を行う。

※/etc/bind/db.emptyの内容(変更なし)

; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL 86400
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS localhost.


※/etc/bind/h.hachune.net/h.hachune.net.zoneの内容

$TTL 86400
@ IN SOA ns.h.hachune.net. lefay.g.hachune.net.(
200912120 ;
3600 ;
900 ;
604800 ;
86400 ;
)
@ IN NS ns.h.hachune.net.
@ IN A 192.168.0.104

router IN A 192.168.0.1

hatsune IN A 192.168.0.100
miku IN CNAME hatsune

oldfox IN A 192.168.0.101

hachune IN A 192.168.0.102
eee IN CNAME hachune

360 IN A 192.168.0.103

megurine IN A 192.168.0.104
luka IN CNAME megurine
ns IN A 192.168.0.104

kagamine IN A 192.168.0.105
rin IN CNAME kagamine



5. /etc/bind/h.hachune.net/h.hachune.net.revの設定


正引きの設定と同様に、逆引きの設定も行う。

$TTL 86400

@ IN SOA ns.h.hachune.net. lefay.g.hachune.net.(
200912120 ;
3600 ;
900 ;
604800 ;
3600 ;
)

@ IN NS ns.h.hachune.net.
1 IN PTR router.h.hachune.net.
100 IN PTR hatsune.h.hachune.net.
101 IN PTR nec.h.hachune.net.
102 IN PTR hachune.h.hachune.net.
103 IN PTR 360.h.hachune.net.
104 IN PTR megurine.h.hachune.net.
105 IN PTR kagamine.h.hachune.net.


以上の設定が終了したら、BINDデーモンの再起動を行う。
% sudo /etc/init.d/bind9 restart
もしうまく起動しない場合は、% sudo tail /var/log/syslogして、どこでエラーが発生しているのか確認する。


6. 正しく設定が反映されているか確認


デーモンが正しく再起動出来たら、digコマンドを利用しレコードを確認する。

※正引きレコードの確認

master@megurine:/etc/bind$ dig @127.0.0.1 miku.h.hachune.net

; <<>> DiG 9.5.1-P3 <<>> @127.0.0.1 miku.h.hachune.net
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19223
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;miku.h.hachune.net. IN A

;; ANSWER SECTION:
miku.h.hachune.net. 86400 IN CNAME hatsune.h.hachune.net.
hatsune.h.hachune.net. 86400 IN A 192.168.0.100

;; AUTHORITY SECTION:
h.hachune.net. 86400 IN NS ns.h.hachune.net.

;; ADDITIONAL SECTION:
ns.h.hachune.net. 86400 IN A 192.168.0.104

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 13 02:41:46 2009
;; MSG SIZE rcvd: 107


※逆引きレコードの確認

master@megurine:/etc/bind$ dig @127.0.0.1 -x 192.168.0.100

; <<>> DiG 9.5.1-P3 <<>> @127.0.0.1 -x 192.168.0.100
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24508
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;100.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
100.0.168.192.in-addr.arpa. 86400 IN PTR hatsune.h.hachune.net.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS ns.h.hachune.net.

;; ADDITIONAL SECTION:
ns.h.hachune.net. 86400 IN A 192.168.0.104

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 13 02:42:16 2009
;; MSG SIZE rcvd: 112


※キャッシュサーバの確認

master@megurine:/etc/bind$ dig @127.0.0.1 crypton.co.jp.

; <<>> DiG 9.5.1-P3 <<>> @127.0.0.1 crypton.co.jp.
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31873
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;crypton.co.jp. IN A

;; AUTHORITY SECTION:
crypton.co.jp. 892 IN SOA dns-b.iij.ad.jp. dns-managers.iij.ad.jp. 63 3600 1800 3600000 900

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 13 02:46:34 2009
;; MSG SIZE rcvd: 93



以上で、とりあえずは使えるDNSサーバができた。
弄ったのは、named.conf.localh.hachune.net.zoneh.hachune.net.revのみ。
…ここまではそんなに難しくはないんだが…('A`)


・参考
@IT 実用 BIND9で作るDNSサーバ 第2回 すべての基礎、マスター・ゾーンサーバの設定
http://www.atmarkit.co.jp/flinux/rensai/bind902/bind902a.html

0 件のコメント: