■概要

DNSサーバー(BIND)はwakuwakustation.comというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバー。
ここでは、内部でサーバーにアクセスするときにIPアドレスではなく、wakuwakustation.comでアクセスできるようにする。⇒内部向けDNSサーバー
また、外部からサーバーにアクセスするときの自ドメイン名からIPアドレスへの変換(名前解決)を行なうようにする。⇒外部向けDNSサーバー
外部向けDNSサーバー設定により、自宅サーバーが稼動中にも係わらず、ダイナミックDNSサービス側が保守やトラブル等によりサービス停止したことによりドメイン名でサーバーにアクセスできなくなるということがなくなる。

※非固定IPアドレス環境の場合はサブドメイン取得済であること
※固定IPアドレス環境の場合は独自ドメイン取得済であること
※外部向けDNSサーバーは固定IPアドレス環境の場合のみ
※wakuwakustation.comは当サイトの例なので、各自で置き換えること!


■BINDインストール

[root@centos ~]# yum -y install bind bind-chroot caching-nameserver ← bind,bind-chroot, caching-nameserverインストール

■BIND設定

(1)BIND設定
[root@centos ~]# cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf
 ← BIND設定ファイルコピー

[root@centos ~]# chgrp named /var/named/chroot/etc/named.conf ← BIND設定ファイル所有グループ変更

[root@centos ~]# vi /var/named/chroot/etc/named.conf ← BIND設定ファイル編集
options {
        #listen-on port 53 { 127.0.0.1; }; ← 行頭に#を追加してコメントアウト
        #listen-on-v6 port 53 { ::1; }; ← 行頭に#を追加してコメントアウト
        version "unknown"; ← bindのバージョン情報の非表示化
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;
        query-source-v6 port 53;
        allow-query     { localhost; localnets; }; ← 変更(サーバー及び、サーバーと同じネットワーク内のホストからの問合せのみ許可)
        追加(ここから)※
        forwarders{
                192.168.1.1; ← ルーター経由接続環境の場合はルーターのIPアドレスを指定
                XXX.XXX.XXX.XXX; ← PPPoE接続環境の場合はプロバイダから通知されたDNSサーバー(プライマリ)のIPアドレスを指定
                XXX.XXX.XXX.XXX; ← PPPoE接続環境の場合はプロバイダから通知されたDNSサーバー(セカンダリ)のIPアドレスを指定
        };
        追加(ここまで)
};

view localhost_resolver {
        match-clients      { localhost; };
        match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
        include "/etc/named.wakuwakustation.com.zone"; ← 追加
};

最終行へ追加(ここから)
view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
        include "/etc/named.wakuwakustation.com.zone";
};
最終行へ追加(ここまで)

最終行へ追加(ここから)※固定IPアドレス環境の場合のみ
view "external" {
        match-clients { any; };
        match-destinations { any; };
        recursion no;
        include "/etc/named.wakuwakustation.com.zone.wan";
};
最終行へ追加(ここまで)

[root@centos ~]# vi /var/named/chroot/etc/named.wakuwakustation.com.zone ← wakuwakustation.comの内部向けゾーン定義ファイル作成
zone "wakuwakustation.com" {
        type master;
        file "wakuwakustation.com.db";
};
zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.db";
};

[root@centos ~]# vi /var/named/chroot/etc/named.wakuwakustation.com.zone.wan ← wakuwakustation.comの外部向けゾーン定義ファイル作成※固定IPアドレス環境の場合のみ
zone "wakuwakustation.com" {
        type master;
        file "wakuwakustation.com.db.wan";
        allow-query { any; };
};
※forwardersには、このDNSサーバーのキャッシュで名前解決ができなかった場合に問合せにいくDNSサーバー(ルーターまたは、プロバイダから通知されたDNSサーバー)を指定する

(2)ルートゾーン最新化
ルートゾーンは世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理しているファイルで、めったに更新されることはないが、念のため最新化しておく。
[root@centos ~]# dig . ns @198.41.0.4 > /var/named/chroot/var/named/named.ca ← ルートゾーン(named.ca)最新化

(3)ルートゾーン自動更新
1ヶ月に一度、ルートゾーンが最新かチェックし、更新されていればルートゾーンの最新化及び、BINDの再起動を自動的に行うようにする。
※ルートゾーンが更新されていた場合のみ、新旧ルートゾーン情報及び、新旧ルートゾーンの差分情報をroot宛にメールする
[root@centos ~]# vi named.root_update ← ルートゾーン最新化スクリプト作成
#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 > $new 2> $errors

if [ $? -eq 0 ]; then
    sort_new=`mktemp`
    sort_old=`mktemp`
    diff_out=`mktemp`
    sort $new > $sort_new
    sort /var/named/chroot/var/named/named.ca > $sort_old
    diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
    if [ $? -ne 0 ]; then
        (
         echo '-------------------- old named.root --------------------'
         cat /var/named/chroot/var/named/named.ca
         echo
         echo '-------------------- new named.root --------------------'
         cat $new
         echo '---------------------- difference ----------------------'
         cat $diff_out
        ) | mail -s 'named.root updated' root
        cp -f $new /var/named/chroot/var/named/named.ca
        chown named. /var/named/chroot/var/named/named.ca
        chmod 644 /var/named/chroot/var/named/named.ca
        /etc/rc.d/init.d/named restart > /dev/null
    fi
    rm -f $sort_new $sort_old $diff_out
else
    cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors

[root@centos ~]# chmod 700 named.root_update ← ルートゾーン最新化スクリプトへ実行権限付加

[root@centos ~]# mv named.root_update /etc/cron.monthly/ ← ルートゾーン最新化スクリプトを毎月自動実行されるディレクトリへ移動

(4)内部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成
[root@centos ~]# vi /var/named/chroot/var/named/wakuwakustation.com.db ← 正引きゾーンデータベース作成
$TTL    86400
@       IN      SOA     wakuwakustation.com.  root.wakuwakustation.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    wakuwakustation.com.
        IN MX 10 wakuwakustation.com.
@       IN A     192.168.1.3 ← サーバーのプライベートIPアドレスを指定(wakuwakustation.com用)
*       IN A     192.168.1.3 ← サーバーのプライベートIPアドレスを指定(*.wakuwakustation.com用)

(5)内部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成
[root@centos ~]# vi /var/named/chroot/var/named/1.168.192.in-addr.arpa.db ← 逆引きゾーンデータベース作成
$TTL    86400
@       IN      SOA     wakuwakustation.com.  root.wakuwakustation.com.(
                                      2004031901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    wakuwakustation.com.
3             IN      PTR   wakuwakustation.com. ← サーバーIPアドレス最下位部(192.168.1.3)とドメイン名を指定

(6)外部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成※固定IPアドレス環境の場合のみ
[root@centos ~]# vi /var/named/chroot/var/named/wakuwakustation.com.db.wan ← 外部向け正引きゾーンデータベース作成
$TTL    86400
@       IN      SOA     ns1.wakuwakustation.com.  root.wakuwakustation.com.(
                                      2006041401 ; Serial
                                      7200       ; Refresh
                                      7200       ; Retry
                                      2419200    ; Expire
                                      86400 )    ; Minimum
        IN NS    ns1.wakuwakustation.com. ← ネームサーバー名
        IN MX 10 wakuwakustation.com.
ns1     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ns1.wakuwakustation.com用)
@       IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(wakuwakustation.com用)
www     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(www.wakuwakustation.com用)
ftp     IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ftp.wakuwakustation.com用)
mail    IN A     XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(mail.wakuwakustation.com用)
wakuwakustation.com. IN TXT "v=spf1 a mx ~all"
※ゾーン情報変更時は、Serial行を年月日通番2桁(YYYYMMDDXX)のようにして、必ず変更前よりも大きい数値に変更すること(例:変更前が2005011001なら、変更後は2005011002にする)。これにより、後述するセカンダリ側へのゾーン情報の変更が正しく行われるようになる

■BIND起動

(1)BIND起動
[root@centos ~]# /etc/rc.d/init.d/named start ← BIND起動
namedを起動中:                                             [  OK  ]

[root@centos ~]# chkconfig named on ← BIND自動起動設定

[root@centos ~]# chkconfig --list named ← BIND自動起動設定確認
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

(2)UDPの53番ポートとTCPの53番ポートをオープンする※固定IPアドレス環境の場合のみ
ルーターの設定で、UDPの53番ポートとTCPの53番ポートへのアクセスをサーバーに転送するようにする

※iptablesでファイアウォールを構築している場合はこちらを参照

■問合せ先DNSサーバーをLinuxサーバーに変更

(1)サーバー自身の問合せ先DNSサーバーを自分自身に変更
[root@centos ~]# echo "nameserver 127.0.0.1" > /etc/resolv.conf ← Linuxサーバー自身を問合せ先DNSサーバーとする

(2)問合せ先DNSサーバーをLinuxサーバーに変更
ルーターのDHCP設定でDNSサーバーのIPアドレスをLinuxサーバーのIPアドレスに変更する

(3)問合せ先DNSサーバー変更反映
Linuxサーバー⇒クライアントの順に再起動し、問合せ先DNSサーバーの変更を反映させる

■BIND確認

(1)BIND確認(クライアントがWindowsの場合)
C:>nslookup ← nslookup起動
Default Server:  wakuwakustation.com
Address:  192.168.1.3

> wakuwakustation.com ← Linuxサーバーの正引きテスト
Server:  wakuwakustation.com
Address:  192.168.1.3

Name:    wakuwakustation.com
Address:  192.168.1.3 ← IPアドレスが返ってきた

> 192.168.1.3 ← Linuxサーバーの逆引きテスト
Server:  wakuwakustation.com
Address:  192.168.1.3

Name:    wakuwakustation.com ← ドメイン名が返ってきた
Address:  192.168.1.3

> www.linux.or.jp ← 外部ドメインの正引きテスト
Server:  wakuwakustation.com
Address:  192.168.1.3

Non-authoritative answer:
Name:    mizuho.linux.or.jp
Address:  210.171.226.47 ← IPアドレスが返ってきた
Aliases:  www.linux.or.jp

> 210.171.226.47 ← 外部ドメインの逆引きテスト
Server:  wakuwakustation.com
Address:  192.168.1.3

Name:    mizuho.linux.or.jp ← ドメイン名が返ってきた
Address:  210.171.226.47

> exit ← nslookup停止

C:>

(2)BIND確認(クライアントがLinuxの場合)
[root@centos ~]# dig wakuwakustation.com ← Linuxサーバーの正引きテスト

; <<>> DiG 9.2.3 <<>> wakuwakustation.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59712
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;wakuwakustation.com.               IN      A

;; ANSWER SECTION:
wakuwakustation.com.        86400   IN      A       192.168.1.3 ← IPアドレスが返ってきた

;; AUTHORITY SECTION:
wakuwakustation.com.        86400   IN      NS      wakuwakustation.com.

;; Query time: 8 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Mon Oct  4 17:39:31 2004
;; MSG SIZE  rcvd: 63

[root@centos ~]# dig -x 192.168.1.3 ← Linuxサーバーの逆引きテスト

; <<>> DiG 9.2.3 <<>> -x 192.168.1.3
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14938
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
1.1.168.192.in-addr.arpa. 86400 IN      PTR     wakuwakustation.com. ← ドメイン名が返ってきた

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400   IN      NS      wakuwakustation.com.

;; ADDITIONAL SECTION:
wakuwakustation.com.        86400   IN      A       192.168.1.3

;; Query time: 8 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Mon Oct  4 17:39:39 2004
;; MSG SIZE  rcvd: 101

[root@centos ~]# dig www.linux.or.jp ← 外部ドメインの正引きテスト

; <<>> DiG 9.2.3 <<>> www.linux.or.jp
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50380
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 0

;; QUESTION SECTION:
;www.linux.or.jp.               IN      A

;; ANSWER SECTION:
www.linux.or.jp.        78406   IN      CNAME   mizuho.linux.or.jp.
mizuho.linux.or.jp.     36827   IN      A       210.171.226.47 ← IPアドレスが返ってきた

;; AUTHORITY SECTION:
jp.                     41652   IN      NS      E.DNS.jp.
jp.                     41652   IN      NS      F.DNS.jp.
jp.                     41652   IN      NS      A.DNS.jp.
jp.                     41652   IN      NS      B.DNS.jp.
jp.                     41652   IN      NS      C.DNS.jp.
jp.                     41652   IN      NS      D.DNS.jp.

;; Query time: 13 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Thu Oct  7 14:43:58 2004
;; MSG SIZE  rcvd: 170

[root@centos ~]# dig -x 210.171.226.47 ← 外部ドメインの逆引きテスト

; <<>> DiG 9.2.3 <<>> -x 210.171.226.47
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47908
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 7

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

;; ANSWER SECTION:
47.226.171.210.in-addr.arpa. 3462 IN    PTR     mizuho.linux.or.jp. ← ドメイン名が返ってきた

;; AUTHORITY SECTION:
210.in-addr.arpa.       33382   IN      NS      NS3.APNIC.NET.
210.in-addr.arpa.       33382   IN      NS      NS4.APNIC.NET.
210.in-addr.arpa.       33382   IN      NS      DNS1.TELSTRA.NET.
210.in-addr.arpa.       33382   IN      NS      TINNIE.ARIN.NET.
210.in-addr.arpa.       33382   IN      NS      NS.RIPE.NET.
210.in-addr.arpa.       33382   IN      NS      NS1.APNIC.NET.

;; ADDITIONAL SECTION:
NS1.APNIC.NET.          599     IN      A       202.12.29.25
NS1.APNIC.NET.          3462    IN      AAAA    2001:dc0:2001:0:4608::25
NS3.APNIC.NET.          1064    IN      A       202.12.28.131
NS3.APNIC.NET.          3462    IN      AAAA    2001:dc0:1:0:4777::131
NS4.APNIC.NET.          2938    IN      A       202.12.31.140
DNS1.TELSTRA.NET.       40038   IN      A       203.50.5.200
TINNIE.ARIN.NET.        62039   IN      A       69.25.34.195

;; Query time: 12 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Thu Oct  7 14:44:27 2004
;; MSG SIZE  rcvd: 351

■プライマリネームサーバー変更※固定IPアドレス環境の場合のみ

wakuwakustation.comのプライマリネームサーバーをレジストラのDNSサーバーから自宅DNSサーバーに変更する。
VALUE DOMAINで独自ドメインを取得した場合のプライマリネームサーバーの変更手順を以下に示す。
その他のレジストラで独自ドメインを取得した場合は各レジストラのWebサイトで確認すること

(1)ユーザ登録時のユーザIDとパスワードでログインする。

(2)「ドメイン操作」⇒「ネームサーバーの変更」⇒「このドメインでネームサーバーを作成」で、「ネームサーバー名」はデフォルト(ns1.wakuwakustation.com)のまま、「ネームサーバーのIPアドレス」に現在のグローバルIPアドレス(確認くんで「現在接続している場所(現IP)」からコピー)を入力して「追加」ボタンを押下し、ネームサーバーを追加する。

(3)「ドメイン操作」⇒「ネームサーバーの変更」⇒「方法選択」で"他社提供/自前ネームサーバー"を選択し、「他社・自前のネームサーバー」に"ns1.wakuwakustation.com"と入力して「変更」ボタンを押下する。※デフォルトで記述されているネームサーバー名は全てクリアすること

※なお、プライマリネームサーバー変更が反映されるまで24~48時間程度掛かる

■プライマリネームサーバー確認※固定IPアドレス環境の場合のみ

※レジストラでのプライマリネームサーバー変更後24~48時間程度経過後に行うこと

Free DNS Reportで、テキストボックスにドメイン名(例:wakuwakustation.com)を入力して「DNS report」ボタンを押下する。

「Category」="Parent"、「Test name」="Parent nameservers wakuwakustation.com"の「Information」に以下のような結果が表示されればOK
Your NS records at the parent server l.gtld-servers.net are:

ns1.wakuwakustation.com [XXX.XXX.XXX.XXX]
 ← ネームサーバーが自宅DNSサーバーになっていること
 ← サーバーのグローバルIPアドレスになっていること

■セカンダリネームサーバー登録※固定IPアドレス環境の場合のみ

セカンダリネームサーバーはプライマリネームサーバーのゾーン定義ファイルをコピーして、プライマリネームサーバーと同じようにwakuwakustation.comからグローバルIPアドレスへの変換を行なってくれるサーバーで、プライマリネームサーバーへの負荷分散が行なえる。
ここでは、無料でセカンダリネームサーバーを請け負ってくれるマイハマネットのサービスを利用する。

(1)セカンダリネームサーバー申し込み
マイハマネットでユーザ登録し、登録時のメールアドレス宛にきたメールに従い、プライマリネームサーバー情報として自宅DNSサーバーの情報を登録する。
※なお、ユーザ登録時に指定するメールアドレスは、登録するドメイン名のメールアドレス(例:webmaster@wakuwakustation.com)でなければならないため、先にメールサーバー(Postfix編qmail編)を構築しておく

(2)セカンダリネームサーバー設定
[root@centos ~]# vi /var/named/chroot/etc/named.wakuwakustation.com.zone.wan ← 外部向けゾーン定義ファイル編集
zone "wakuwakustation.com" {
        type master;
        file "wakuwakustation.com.db.wan";
        allow-query { any; };
        allow-transfer { 219.109.237.3; }; ← このゾーン情報の転送先として123.50.202.226(ns1.maihama-net.comのIPアドレス)を追加
        notify yes; ← このゾーン情報変更時は即座に上記セカンダリへ反映させる
};

[root@centos ~]# vi /var/named/chroot/var/named/wakuwakustation.com.db.wan ← 外部向け正引きゾーンデータベース編集
$TTL    86400
@       IN      SOA     ns1.wakuwakustation.com.  root.wakuwakustation.com.(
                                      2006041401 ; Serial
                                      7200       ; Refresh
                                      7200       ; Retry
                                      2419200    ; Expire
                                      86400 )    ; Minimum
        IN NS    ns1.wakuwakustation.com.
        IN NS    ns1.maihama-net.com. ← セカンダリネームサーバーとしてns1.maihama-net.comを追加
        IN MX 10 wakuwakustation.com.
ns1     IN A     XXX.XXX.XXX.XXX
@       IN A     XXX.XXX.XXX.XXX
www     IN A     XXX.XXX.XXX.XXX
ftp     IN A     XXX.XXX.XXX.XXX
mail    IN A     XXX.XXX.XXX.XXX
wakuwakustation.com. IN TXT "v=spf1 a mx ~all"

[root@centos ~]# /etc/rc.d/init.d/named reload ← BIND設定反映
named を再読み込み中:                                      [  OK  ]

(3)レジストラへセカンダリネームサーバー登録
VALUE DOMAINで独自ドメインを取得した場合、「■プライマリネームサーバーの変更」を参考にwakuwakustation.comのセカンダリネームサーバーをレジストラに登録する。
その他のレジストラで独自ドメインを取得した場合は各レジストラのWebサイトで確認すること

■セカンダリネームサーバー確認※固定IPアドレス環境の場合のみ

(1)セカンダリネームサーバーでの正引き確認
[root@centos ~]# dig @219.109.237.3 wakuwakustation.com ← セカンダリネームサーバーで正引きできるか確認

; <<>> DiG 9.2.3 <<>> @219.109.237.3 wakuwakustation.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22588
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;wakuwakustation.com.                 IN      A

;; ANSWER SECTION:
wakuwakustation.com.          86090   IN      A       XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスが返ってきた

;; AUTHORITY SECTION:
wakuwakustation.com.          86090   IN      NS      ns1.wakuwakustation.com.

;; ADDITIONAL SECTION:
ns1.wakuwakustation.com.      86090   IN      A       XXX.XXX.XXX.XXX

;; Query time: 612 msec
;; SERVER: 219.109.237.3#53(219.109.237.3)
;; WHEN: Fri Nov 26 20:32:23 2004
;; MSG SIZE  rcvd: 81

(2)セカンダリネームサーバー情報確認
※レジストラでのセカンダリネームサーバー登録後24~48時間程度経過後に行うこと

Free DNS Reportで、テキストボックスにドメイン名(例:wakuwakustation.com)を入力して「DNS report」ボタンを押下する。

「Category」="Parent"、「Test name」="Parent nameservers wakuwakustation.com"の「Information」に以下のような結果が表示されればOK
Your NS records at the parent server l.gtld-servers.net are:

ns1.maihama-net.com [XXX.XXX.XXX.XXX]
 ← セカンダリネームサーバーが表示されていること
 ← セカンダリネームサーバーのIPアドレスがあっていること
ns1.wakuwakustation.com [XXX.XXX.XXX.XXX]