星と猫の数学

私を退屈から救いに来た、夢のヒーロー

BIND9によるDNSサーバ構築

ネットワーク内のPCやサーバにアクセスする時にIPアドレスで指定すると、IPアドレスが変わった時に修正しなければならないので面倒です。
DNSサーバを立ててドメイン名*1でアクセスできるようにすれば、DNSサーバの設定を変えるだけで済むようになります。

BIND9のインストール

BIND9とはインターネットで最も利用されている(らしい)DNSサーバを構築するためのソフトです。

  • 端末から以下のコマンドを入力してBIND9をインストールする
sudo apt-get install bind9

ネットワークの前提条件

以下の説明では、構築するネットワークを以下の様にするという前提で進めていきます。

ネットワーク設定 IPアドレス
ローカルネットワーク 192.168.96.*
サブネットマスク 255.255.255.0
種類 IPアドレス ドメイン名
ルータ 192.168.96.1 router.ranger
サーバ 192.168.96.10 kuroneko.ranger

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;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

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

        // ↓ここから
        allow-query {
                127.0.0.1;
                192.168.96.0/24;
        };
        // ↑ここまでを追記する
};
  • 自分自身(127.0.0.1)とローカルネットワーク(192.168.96.*)内のマシンのみ問い合わせが可能

DNSサーバの応答設定

「/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";

// ↓ここから
zone "ranger" {
        type master;
        file "/etc/bind/db.ranger";
};

zone "96.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.96.168.192";
};
// ↑ここまでを追記する
  • 「ranger」というルートドメイン名かローカルネットワーク内でのリクエストにのみ応答する

正引き設定

「/etc/bind/db.ranger」を作成し、エディタで開いて以下のように設定する。

$TTL 1D

@ IN SOA ranger. root.ranger. (
        2013040701
        3H
        1H
        1W
        1D)
  IN NS kuroneko.ranger.
router IN A 192.168.96.1
kuroneko IN A 192.168.96.10
  • 「@ IN SOA」と記載された文には「[ルートドメイン名].」と、空白を挟んで「root.[ルートドメイン名].」
  • その次から5行分は勉強中
  • 「IN NS」と記載された文には「[DNSサーバのドメイン名].」
  • 以下はそれぞれ「[ドメイン名] IN A [IPアドレス]」で記載

逆引き設定

「/etc/bind/db.96.168.192」を作成し、エディタで開いて以下のように設定する。

$TTL 1D

@ IN SOA kuroneko.ranger. root.kuroneko.ranger. (
        2013040701
        3H
        1H
        1W
        1D )
  IN NS kuroneko.ranger.
  IN PTR ranger.
1 IN PTR router
10 IN PTR kuroneko
  • 「@ IN SOA」と記載された文には「[ドメイン名].」と、空白を挟んで「root.[ドメイン名].」
  • その次から5行分は勉強中
  • 「IN NS」と記載された文には「[DNSサーバのドメイン名].」
  • 「IN PTR」のみ記載された文には「[ルートドメイン名].」
  • 以下はそれぞれ「[IPアドレスの末尾の番号] IN PTR [IPアドレスに対応したマシンのドメイン名]」で記載

BIND9の実行

  1. 以下のコマンドを入力してBIND9を再起動する。設定を書き間違えると再起動しない。
sudo services bind9 restart
  1. ルータや各マシンの設定で「プライマリDNS」をDNSサーバのIPアドレスに設定する
    • ルータの場合は機器によって異なるので割愛します
    • Windows 7なら「コントロールパネル」→「ネットワークと共有センター」→「接続」に書かれた接続名称をクリック→「プロパティ」→「インターネットプロトコルバージョン 4」をクリック→「プロパティ」ボタンを押下
    • Linuxなら「/etc/network/interfaces」を開いて「dns-nameservers」に記載されたIPアドレスDNSサーバのIPアドレスに設定し、以下のコマンドでネットワークを再起動する
sudo /etc/init.d/networking restart
  • ネットワークの再起動はSSHのセッションが切れないので、わざわざサーバのコンソールで行う必要は無い

確認

WindowsでもLinuxでも「nslookup」というコマンドを実行後、各ドメイン名を入力して確認が可能です。設定に成功していれば以下の様な実行結果が出力されます。

> kuroneko.ranger
Server:         192.168.96.10
Address:        192.168.96.*#53

Name:   kuroneko.ranger
Address: 192.168.96.10
  • 上の「Server」はDNSサーバの、「Address」の項目はnslookupを実行したマシンのIPアドレスが記載されています。

参考資料

BIND9で内向きDNS構築 on Ubuntu - ペイパー・プログラマーズ・ダイアリー

DNS & BIND 第5版

DNS & BIND 第5版

*1:インターネットのWebサイトのアドレスみたいな形式の識別名。