BIND9で内向きDNS構築 on Ubuntu

はじめに

現在の我が家のネットワーク構成はこんな感じです。

固定IPアドレスが記述してあるホストに対してドメイン名でアクセスできるようにしたいなと考えました。
で、UbuntuDNSサーバを立ててやることにします。出来上がりイメージはこちら。

機器名 機器の主な用途 ホスト名 ローカルIPアドレス 別名
WZR-HP-G450H ルータ tartan.mnb 192.168.24.1 router.mnb
CG-NSC2100GT NAS glen.mnb 192.168.24.3 nas01.mnb
MSI-Wind 各種サーバ argyle.mnb 192.168.24.93 ns.mnb

ホスト名はいろいろ考えたんですがチェック柄の種類にしました。最近アーガイル柄のカーディガンをさがしてたので。まぁ買ってないんですけどね。で、ルートドメイン名は苗字から母音を抜いた"mnb"という文字列にしました。若竹さんなら"wktk"、川崎さんなら"kwsk"なんて具合になりますね。

BIND9のインストール

まずはDNSサーバのポピュラーな実装BIND9をインストールします。

$ sudo apt-get install bind9

BIND9の設定

設定ファイルを見てみます。

/etc/bind/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";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

3つの設定ファイルをインクルードしているだけのようです。
各々の用途の設定ファイルを書き換えていきます。
まずはこのDNSサーバに対して問い合わせ可能なのは自分自身および同じネットワークからのリクエストのみとします。

/etc/bind/named.conf.options
options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want 
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.
    
    // forwarders {
    //      0.0.0.0;
    // };

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };

    // 以下を追加
    allow-query {
        // 自分自身( localhost )
        127.0.0.1;
        // 192.168.24.* ( Subnet 255.255.255.0 )
        192.168.24.0/24;
    };
};

次にどんなリクエストに対して応答するか、またその応答に関する設定ファイルをどこに置くかを定義します。
今回は、「mnb」というルートドメイン名を含むドメイン名でのリクエストか192.168.24.* というIPアドレスでのリクエストに対しての応答を受けることとしました。

/etc/bind/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";


// mnb の正引きの設定
zone "mnb" {
    // Master DNS Serverであることを明示
    type master;
    // 設定ファイル名
    file "/etc/bind/db.mnb";
};

// 192.168.24.* の逆引きの設定
zone "24.168.192.in-addr.arpa" {
    // Master DNS Serverであることを明示
    type master;
    // 設定ファイル名
    file "/etc/bind/db.24.168.192";
};

次に各々の設定ファイルの中身を記述していきます。
まずは正引きの設定ファイルのほう。

/etc/bind/db.mnb
; BIND reverse data file for empty rfc1918 zone
;
$TTL 1D    ;

@      IN SOA mnb.    root.mnb (
                           2011102401 ; Serial
                           3H         ; Refresh
                           1H         ; Retry
                           1W         ; Expire
                           1D )       ; Minimum

       IN NS  argyle.mnb. ;
tartan IN A 192.168.24.1  ;
glen   IN A 192.168.24.3  ;
argyle IN A 192.168.24.93 ;

router         IN CNAME tartan ;
nas01          IN CNAME glen   ;
ns             IN CNAME argyle ;

引き続き逆引きの設定も

/etc/bind/db.24.168.192
; BIND reverse data file for empty rfc1918 zone
;
$TTL 1D    ;

@   IN SOA ns.mnb.    root.ns.mnb (
                        2011102301 ; Serial
                        3H         ; Refresh
                        1H         ; Retry
                        1W         ; Expire
                        1D )       ; Minimum

    IN NS  ns.mnb.     ; Name Server を指定
    IN PTR mnb.        ; 解決するドメイン
    IN A 255.255.255.0 ; サブネットマスク
1   IN PTR tartan ; 192.168.24.1  の逆引き
3   IN PTR glen   ; 192.168.24.3  の逆引き
93  IN PTR argyle ; 192.168.24.93 の逆引き

設定は以上。
BIND9をリスタートしてみます。

$ sudo service bind9 restart
 * Stopping domain name service... bind9
   ...done.
 * Starting domain name service... bind9
   ...done.

問題なく起動できたようです。

DHCPサーバの設定

次にDHCPサーバがIP供給している端末たちにネームサーバの所在を教えてあげるように設定します。
ルータにDHCPサーバが備わっているのでWebの設定画面から設定してやります。
使用しているルータ(WZR-HP-G450H)のWeb設定画面にログインして Internet/LAN > LAN の画面で「DHCPサーバ設定[拡張設定]」の拡張設定を表示するをチェックします。

すると設定画面がスルスルッと出てきます。
ここで「DNSサーバーの通知」で「指定したIPアドレス」を選択してプライマリに先ほどBIND9を設置したマシンのIPアドレスを記入します。セカンダリーにはルータ自身(DHCPサーバ自身?)のIPアドレスを、とのことが参考にしたサイトなどに書いてあったのでそうしておきます。その有用性についてはまた機会があれば調べておく、ということで。

MacBook Proにてネットワーク構成からDHCPリースを更新してみました。

ルータで設定した値がDNSサーバとして採用されています。
ではちゃんとひけるのかテストォ!

確認

mac$ nslookup
> argyle.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

Name: argyle.mnb
Address: 192.168.24.93
> tartan.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

Name: tartan.mnb
Address: 192.168.24.1
> glen.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

Name: glen.mnb
Address: 192.168.24.3
> ns.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

ns.mnb  canonical name = argyle.mnb.
Name: argyle.mnb
Address: 192.168.24.93
> nas01.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

nas01.mnb canonical name = glen.mnb.
Name: glen.mnb
Address: 192.168.24.3
> router.mnb
Server:   192.168.24.93
Address:  192.168.24.93#53

router.mnb  canonical name = tartan.mnb.
Name: tartan.mnb
Address: 192.168.24.1
> 192.168.24.1
Server:   192.168.24.93
Address:  192.168.24.93#53

1.24.168.192.in-addr.arpa name = tartan.24.168.192.in-addr.arpa.
> 192.168.24.3
Server:   192.168.24.93
Address:  192.168.24.93#53

3.24.168.192.in-addr.arpa name = glen.24.168.192.in-addr.arpa.
> 192.168.24.93
Server:   192.168.24.93
Address:  192.168.24.93#53

93.24.168.192.in-addr.arpa  name = argyle.24.168.192.in-addr.arpa.

正引きも逆引きもできてます。別名でのアクセスも大丈夫そうです。
よかったよかった。
冒頭のネットワーク構成図にホスト名も加えておきます。

次はVPN越しにもホスト名でアクセスできるように設定してみるつもりです。