イントラ用DNSサーバの設定手順について


イントラ用のDNSサーバを設定する方法についてのメモです。
上図ネットワーク構成の環境でDNSサーバ(sargens.kfeed.com,192.168.0.12)を設定します。
本手順で使用するドメイン名「kfeed.com」はイントラ内でのみ使用するテスト用のドメイン名となります。

本手順作成の際には下記のサイトを参照させていただきました。



今回の手順で登場するサーバ

ホスト名 OS 役割 FQDN IPアドレス
sargens Debian 3.1 DNSサーバ sargens.kfeed.com 192.168.0.12
sargesmb Debian 3.1 WEBサーバ sargesmb.kfeed.com 192.168.0.10
sargemx Debian 3.1 Mailサーバ sargemx.kfeed.com 192.168.0.15
macxubuntu Xubuntu 10.04 Linuxクライアント macxubuntu.kfeed.com 192.168.0.3
- - デフォルトゲートウェイ - 192.168.0.1

サブネットマスクについてはすべて 255.255.255.0 となります。

bind のインストール

sargens の端末に bind をインストールします。

apt-get install bind

sargens に root ユーザとしてログインし、上記コマンドを実行します。

Reading Package Lists... Done
Building Dependency Tree... Done
Suggested packages:
  dnsutils bind-doc
The following NEW packages will be installed:
  bind
0 upgraded, 1 newly installed, 0 to remove and 25 not upgraded.
Need to get 903kB of archives.
After unpacking 2122kB of additional disk space will be used.
Get:1 http://ftp.riken.jp sarge/main bind 1:8.4.6-1 [903kB]
Fetched 903kB in 3s (298kB/s)
Selecting previously deselected package bind.
(Reading database ... 9649 files and directories currently installed.)
Unpacking bind (from .../bind_1%3a8.4.6-1_i386.deb) ...
Setting up bind (8.4.6-1) ...
Starting domain name service: named.

bind がインストールされました。

bind の設定ファイルを編集

インストール後は bind の設定ファイルを編集します。

named.conf ファイルの編集

「/etc/bind/named.conf」ファイルを編集します。

 1    // This is the primary configuration file for the BIND DNS server named.
 2    //
 3    // Please read /usr/share/doc/bind/README.Debian for information on the
 4    // structure of BIND configuration files in Debian for BIND versions 8.2.1
 5    // and later, *BEFORE* you customize this configuration file.
 6    //
 7    
 8    include "/etc/bind/named.conf.options";
 9    
10    // reduce log verbosity on issues outside our control
11    logging {
12            category lame-servers { null; };
13            category cname { null; };
14    };
15    
16    options {
17    
18            allow-query {
19                    127.0.0.1;
20                    192.168.0.0/24;
21            };
22    
23            forwarders {
24                    8.8.8.8;
25                    8.8.4.4;
26            };
27    
28    };
29    
30    // prime the server with knowledge of the root servers
31    zone "." {
32            type hint;
33            file "/etc/bind/db.root";
34    };
35    
36    // be authoritative for the localhost forward and reverse zones, and for
37    // broadcast zones as per RFC 1912
38    
39    zone "localhost" {
40            type master;
41            file "/etc/bind/db.local";
42    };
43    
44    zone "0.0.127.in-addr.arpa" {
45            type master;
46            file "/etc/bind/db.0.0.127";
47    };
48    
49    zone "kfeed.com" {
50            type master;
51            file "/etc/bind/db.kfeed.com";
52    };
53    
54    zone "0.168.192.in-addr.arpa" {
55            type master;
56            file "/etc/bind/db.0.168.192";
57    };
58    
59    // add local zone definitions here
60    include "/etc/bind/named.conf.local";

allow-query(18〜21行目)では、問い合わせを受け付けるネットワークを指定します。
forwarders(23〜26行目)では、問い合わせの転送先DNSサーバを指定します。上記では Google Public DNS を指定しました。
ルートネームサーバについての設定は30〜34行目です。本手順ではゾーンファイル「/etc/bind/db.root」の内容はデフォルトのものを使用しました。
localhost の正引き設定は 39〜42行目、逆引き設定は44〜47行目です。
kfeed.com の正引き設定は 49〜52行目、逆引き設定は54〜57行目です。

ゾーンファイルの編集
   localhost の正引き用ゾーンファイル

localhost の正引き用ゾーンファイル「/etc/bind/db.local」は以下の内容で保存しました。
/etc/bind/db.local

 1    ;
 2    ; BIND data file for local loopback interface
 3    ;
 4    $TTL    604800
 5    @       IN      SOA     sargens.kfeed.com. root.sarge.kfeed.com. (
 6                         2010070401         ; Serial
 7                             604800         ; Refresh
 8                              86400         ; Retry
 9                            2419200         ; Expire
10                             604800 )       ; Negative Cache TTL
11    ;
12    @       IN      NS      sargens.kfeed.com.
13    @       IN      A       127.0.0.1

SOAレコード部分(5〜11行目)にはDNSサーバのホスト名、管理者のメールアドレス(@の代わりに . を使う)、スレーブネームサーバがマスターネームサーバのゾーン情報を参照する際のシリアル番号やチェック間隔等を指定します*1
NSレコード部分(12行目)にはDNSサーバ名を FQDN で指定します。
Aレコード部分(13行目)にはホスト名に対応するIPアドレス(上記ではlocalhostなので127.0.0.1)を指定します。

   localhost の逆引き用ゾーンファイル

localhost の逆引き用ゾーンファイル「/etc/bind/db.0.0.127」は以下の内容で保存しました。
/etc/bind/db.0.0.127

 1    ;
 2    ; BIND reverse data file for local loopback interface
 3    ;
 4    $TTL    604800
 5    @       IN      SOA     sargens.kfeed.com. root.sargens.kfeed.com. (
 6                         2010070401         ; Serial
 7                             604800         ; Refresh
 8                              86400         ; Retry
 9                            2419200         ; Expire
10                             604800 )       ; Negative Cache TTL
11    ;
12    @       IN      NS      sargens.kfeed.com.
13    1       IN      PTR     localhost.

SOAとNSレコード部分は正引きと同じ内容としました。
PTRレコード(13行目)はIPアドレスに対応するホスト名を指定しました。

   kfeed.com の正引き用ゾーンファイル

kfeed.com の正引き用ゾーンファイル「/etc/bind/db.kfeed.com」は以下の内容で保存しました。
/etc/bind/db.kfeed.com

 1    $TTL    604800
 2    @       IN      SOA     sargens.kfeed.com. root.sargens.kfeed.com. (
 3                         2010070401         ; Serial
 4                             604800         ; Refresh
 5                              86400         ; Retry
 6                            2419200         ; Expire
 7                             604800 )       ; Negative Cache TTL
 8    ;
 9    @               IN      NS      sargens.kfeed.com.
10    @               IN      MX 10   sargemx.kfeed.com.
11    kfeed.com       IN      A       192.168.0.12
12    sargens         IN      A       192.168.0.12
13    sargesmb        IN      A       192.168.0.10
14    sargemx         IN      A       192.168.0.15
15    macxubuntu      IN      A       192.168.0.3
16    
17    www             IN      CNAME   sargesmb

SOAとNSレコード部分はlocalhost正引き用ゾーンファイルと同じ内容にしました。
MXレコード部分(10行目)にはメールサーバ名を FQDN で指定します。
Aレコード(11行目〜15行目)にはホスト名に対応するIPアドレスを指定します。
CNAMEレコード(17行目)にはホストの別名を指定します。

   192.168.0.* の逆引き用ゾーンファイル

192.168.0.* の逆引き用ゾーンファイル「/etc/bind/db.0.168.192」は以下の内容で編集しました。
/etc/bind/db.0.168.192

 1    $TTL    604800
 2    @       IN      SOA     sargens.kfeed.com. root.sargens.kfeed.com. (
 3                         2010070401         ; Serial
 4                             604800         ; Refresh
 5                              86400         ; Retry
 6                            2419200         ; Expire
 7                             604800 )       ; Negative Cache TTL
 8    ;
 9    @       IN      NS      sargens.kfeed.com.
10            IN      PTR     kfeed.com.
11            IN      A       255.255.255.0
12    
13    12      IN      PTR     sargens.kfeed.com.
14    10      IN      PTR     sargesmb.kfeed.com.
15    15      IN      RTP     sargemx.kfeed.com.
16    3       IN      PTR     macxubuntu.kfeed.com.

SOAとNSレコード部分はlocalhost正引き用ゾーンファイルと同じ内容にしました。
10行目のPTRレコードでは名前解決を行うドメインを、11行目のAレコードでは「192.168.0.*」のネットワークのサブネットマスクを指定しました。
13〜16行目のPTRレコードでは、IPアドレスIPアドレスの第4オクテットを指定しています)に対応するホスト名を FQDN で指定しました。

DNSサーバのホスト名設定、ネットワーク設定、名前解決設定を確認

ホスト名設定を確認

/etc/hostname ファイルの内容 --> ホスト名が記載されていることを確認

sargens

/etc/hosts ファイルの内容 --> localhost 以外の内容は記述しない

127.0.0.1	localhost.localdomain	localhost
ネットワーク設定を確認

/etc/network/interfaces ファイルの内容 --> IPアドレスサブネットマスクデフォルトゲートウェイ等のアドレスが指定されていることを確認

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
   address 192.168.0.12
   netmask 255.255.255.0
   network 192.168.0.0
   broadcast 192.168.0.255
   gateway 192.168.0.1
名前解決設定を確認

/etc/resolv.conf ファイルの内容 --> nameserver に localhost(127.0.0.1)が指定されていることと、search の行に所属しているドメイン名が記載されていることを確認

nameserver 127.0.0.1
search kfeed.com

/etc/nsswitch.conf ファイル hosts の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認

hosts:    files dns

/etc/host.conf ファイル order の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認

order   hosts, bind

上記の内容を確認後、DNSサーバを再起動します。

DNSサーバ以外の端末での設定

DNSサーバ以外の端末にてホスト名設定、ネットワーク設定、名前解決設定の確認を行います。設定変更をした場合は念のため1度再起動を実施します。
下記では sargesmb の端末を例に設定内容を確認します。

ホスト名設定を確認

/etc/hostname ファイルの内容を確認 --> ホスト名が記載されていることを確認

sargesmb

/etc/hosts ファイルの内容を確認 --> 自ホストの内容のみを記載

127.0.0.1	localhost.localdomain	localhost	sargesmb
ネットワーク設定を確認

/etc/network/interfaces ファイル*2の内容を確認 --> DNSサーバのアドレスが指定されていることと、IPアドレスサブネットマスクデフォルトゲートウェイ等のアドレスが指定されていることを確認

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
   address 192.168.0.10
   netmask 255.255.255.0
   network 192.168.0.0
   broadcast 192.168.0.255
   gateway 192.168.0.1
   dns-search kfeed.com
   dns-nameservers 192.168.0.12
名前解決設定を確認

/etc/resolv.conf ファイル*3の内容を確認 --> nameserver の行にDNSサーバのIPアドレスが指定されていることと、search の行に所属しているドメイン名が記載されていることを確認

nameserver 192.168.0.12
search kfeed.com

/etc/nsswitch.conf ファイル hosts の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認

hosts:    files dns

/etc/host.conf ファイル order の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認

order   hosts, bind

DNSサーバ以外の端末については上記の例にならい、設定を行います。

DNS設定の確認

macxubuntu(192.168.0.3)の端末から確認を行います。
ping コマンドを sargesmb.kfeed.com (WEBサーバ)に送信してみます。

$ ping sargesmb.kfeed.com
PING sargesmb.kfeed.com (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=4.93 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.298 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.275 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=64 time=0.274 ms

192.168.0.10 のアドレス宛に送信されています。

次は ping コマンドを sargemx.kfeed.com (Mailサーバ)に送信してみます。

$ ping sargemx.kfeed.com
PING sargemx.kfeed.com (192.168.0.15) 56(84) bytes of data.
64 bytes from 192.168.0.15: icmp_seq=1 ttl=64 time=1.34 ms
64 bytes from 192.168.0.15: icmp_seq=2 ttl=64 time=0.277 ms
64 bytes from 192.168.0.15: icmp_seq=3 ttl=64 time=0.247 ms
64 bytes from 192.168.0.15: icmp_seq=4 ttl=64 time=0.288 ms

192.168.0.15 のアドレス宛に送信されています。

次は dig コマンドを使って sargemx.kfeed.com の情報を表示します。

$ dig 192.168.0.12 sargemx.kfeed.com

; <<>> DiG 9.7.0-P1 <<>> 192.168.0.12 sargemx.kfeed.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39832
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;192.168.0.12.			IN	A

;; Query time: 1 msec
;; SERVER: 192.168.0.12#53(192.168.0.12)
;; WHEN: Sun Jul  4 02:15:30 2010
;; MSG SIZE  rcvd: 30

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60874
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;sargemx.kfeed.com.		IN	A

;; ANSWER SECTION:
sargemx.kfeed.com.	604800	IN	A	192.168.0.15

;; AUTHORITY SECTION:
kfeed.com.		604800	IN	NS	sargens.kfeed.com.

;; ADDITIONAL SECTION:
sargens.kfeed.com.	604800	IN	A	192.168.0.12

;; Query time: 11 msec
;; SERVER: 192.168.0.12#53(192.168.0.12)
;; WHEN: Sun Jul  4 02:15:30 2010
;; MSG SIZE  rcvd: 89

ANSWER SECTION の部分で 192.168.0.15 のアドレスが表示されました。

外部のサイトについての情報も問い合わせてみます。下記では www.google.com について問い合わせました。

# dig 192.168.0.12 www.google.com

; <<>> DiG 9.7.0-P1 <<>> 192.168.0.12 www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 50407
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;192.168.0.12.			IN	A

;; AUTHORITY SECTION:
.			10800	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2010070300 1800 900 604800 86400

;; Query time: 78 msec
;; SERVER: 192.168.0.12#53(192.168.0.12)
;; WHEN: Sun Jul  4 02:24:40 2010
;; MSG SIZE  rcvd: 105

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51554
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;www.google.com.			IN	A

;; ANSWER SECTION:
www.google.com.		604800	IN	CNAME	www.l.google.com.
www.l.google.com.	300	IN	A	66.249.89.104
www.l.google.com.	300	IN	A	66.249.89.99

;; AUTHORITY SECTION:
google.com.		172800	IN	NS	ns1.google.com.
google.com.		172800	IN	NS	ns2.google.com.
google.com.		172800	IN	NS	ns3.google.com.
google.com.		172800	IN	NS	ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.		172800	IN	A	216.239.32.10
ns2.google.com.		172800	IN	A	216.239.34.10
ns3.google.com.		172800	IN	A	216.239.36.10
ns4.google.com.		172800	IN	A	216.239.38.10

;; Query time: 244 msec
;; SERVER: 192.168.0.12#53(192.168.0.12)
;; WHEN: Sun Jul  4 02:24:40 2010
;; MSG SIZE  rcvd: 234

www.google.com は www.l.google.com の別名であることや、www.l.google.com のIPアドレスのほかに、DNSサーバのFQDNやアドレスなども表示されました。

最後にブラウザから確認を行います。ブラウザのアドレス欄に sargesmb.kfeed.com(WEBサーバのアドレス)を入力します。

Apache の初期画面が表示されました。

今回はイントラネットワーク用のDNSサーバを設定しました。DNSサーバの設定ファイルでは、問い合わせの転送先DNSサーバも指定しましたので、外部のサイトについても名前解決することができるようになりました。

*1:SOAレコードの詳細については @IT:DNS Tips:SOAレコードには何が記述されている? が参考になります。

*2:/etc/network/interfaces ファイルでアドレスを指定しない場合は、root権限で”ifconfig eth0 192.168.0.10 netmask 255.255.255.0”,”route add default gw 192.168.0.1” のようにコマンドで指定します。

*3:筆者の環境では端末が Xubuntu の場合は自動的に /etc/resolv.conf ファイルが上書きされてしまうので、/etc/resolv.conf ファイルを都度編集しています /etc/network/interfaces ファイルにDNSサーバのアドレスを記載していますが、効果が定かではありません。