Bind DNSサーバ

コンテンツとキャッシュサーバー(フルリゾルバー)
クライアントが指定しているのはこの内のキャッシュサーバー(フルリゾルバー)の事です。
フルリゾルバーというのは反復問い合わせに対応しているものです。
ルートサーバーから順に検索して目的のホスト(FQDN)のアドレスを返答してくれます。
このことからインターネットに直接アクセスできることが条件になります。
コンテンツサーバーはドメイン名(FQDN)からIPアドレス(正引き)に変換するゾーン情報を持っているものです。 IPアドレスからドメイン名(FQDN)の情報(逆引き)も持っているものもあります。

正式にドメインを取得し、権限が委任されていればグローバルDNSとして機能します。

コンテンツサーバーには機能としてマスターサーバーとスレーブサーバーがあります。
その名の通りマスターサーバーは親サーバーです。スレーブサーバーはマスターサーバーの複製です。
複製するにはゾーン転送機能を利用して行われます。
マスターは1台ですが、スレーブは何台あってもよいのです。
インターネット側から見たときにはマスター・スレーブの区別はつきません。
分散型データベース構造の利点ですね。

bindでは正引き情報や逆引き情報の管理としてゾーンと言う名前の単位で管理します。

ゾーン情報のなかに管理者情報やシリアルナンバー、有効期間などが定義されます。
これがSOAレコードと言います。
レコードはリソースレコードとよばれ、この他、NS、MX、A、TXT、PTRなどがあります。
インストール例
# yum -y install bind bind-utils bind-libs bind-chroot
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Determining fastest mirrors
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
~途中省略

インストール:
bind-9.9.4-38.el7_3.x86_64
bind-chroot-9.9.4-38.el7_3.x86_64
bind-libs-9.9.4-38.el7_3.x86_64
bind-utils-9.9.4-38.el7_3.x86_64 bind-libs-lite-9.9.4-38.el7_3.x86_64
bind-license-9.9.4-38.el7_3.noarch

完了しました!
Config設定

オープンリゾルバーとならないようにviewを設定します。

# vi /var/named/chroot/named.conf
options {
  directory "/var/named";
  pid-file "/var/named/named.pid";
  version "";
  recursion no;
  blackhole { ← 問い合わせを拒否するクライアントのネットワークアドレス
    10/8;
    172.16/12;
  };
  listen-on {
    127.0.0.1;
    192.168.10.129; ← 待ち受ける(サービス提供する)I/FのIPアドレス
  };
  allow-query {
     127.0.0.1;
     192.168.0.0/24; ← 問い合わせを許可するクライアントのネットワークアドレス
  };
  allow-recursion {
     127.0.0.1;
     192.168.0.0/24; ← 再帰問い合わせを許可するクライアントのネットワークアドレス
  };
};
acl "local-net" { ← 許可するクライアントの定義 IPv4
        127.0.0.1;
        192.168.0.0/24;
};
acl "local-net6" { ← 許可するクライアントの定義 IPv6
        2001:2c0:xxxx:xxxx::/56; ← プロバイダから割り当てられたIPv6アドレスの例
        fe80::/10;
};

view "internal" {
        match-clients { ← 許可するクライアント
                local-net;
                local-net6;
        };
	allow-query { ← 許可するクライアントからの問合せを許可
		local-net;
		local-net6;
	};
	allow-recursion { ← 許可するクライアントからの再帰問合せを許可
		local-net;
		local-net6;
	};
	zone "." IN {
	  type hint;
	  file "named.root"; ← ルートネームサーバーのアドレス情報が記載されている
	};

	zone "localhost" IN { ← 自分自身の正引き用
	type master;
	  file "localhost.zone";
	  allow-update { none; };
	};

	zone "0.0.127.in-addr.arpa" IN { ← 自分自身の逆引き用
	  type master;
	  file "named.local";
	  allow-update { none; };
	};

	zone "hogehoge.com" IN { ← 管理するドメインの正引き用
	  type master;
	  file "hogehoge.com";
	  allow-update { none; };
	};

	zone "0.168.192.in-addr.arpa" IN { ← 管理するネットワークアドレスの逆引き用
	  type master;
	  file "0.168.192.in-addr.arpa";
	  allow-update { none; };
	};
};

view "global" { ← インターネット側からは問合せを拒否する例
        match-clients { any; };
        recursion no;
        allow-query { none; };
};

logging{
        channel default_channel {
                file "/var/log/named/default.log" versions 3 size 20m;
                severity debug 5;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        channel general_channel {
                file "/var/log/named/general.log" versions 3 size 20m;
                severity debug 5;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        channel queries_channel {
                file "/var/log/named/queries.log" versions 3 size 20m;
                severity debug 5;
                print-category yes;
                print-severity yes;
                print-time yes;
        };

	category default { default_channel; };
	category general { general_channel; };
	category queries { queries_channel; };
};
# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
     algorithm hmac-md5;
     secret "{md5}secret";
};
#
controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1; } keys { "rndc-key"; };
};

Zoneファイルの設定
# vi hogehoge.com
$TTL 86400 ← ゾーンの各レコードの寿命(Time To Live)の値を秒単位で指定
@ IN SOA ns.hogehoge.com. info.hogehoge.com.(
		2002091903 ;  ← SERIAL ゾーン情報のシリアル番号(ヴァージョン番号)
		3600 ;  ← REFRESH  スレーブサーバがゾーン情報の更新の有無
						「SERIAL」の増加)をチェックする周期
		900 ;  ← RETRY 再試行の周期、原則としてREFRESHの値の整数分の1の値
		1209600 ;  ← EXPIRE マ スターサーバがダウンした場合、スレーブサーバは
					この数値で提示された期間が経過するまで保持する。
					RFC1912は、2~4週間(1209600~2419200)を推奨
		43200 ;  ← MINIMUM 「存在しないレコード」の保持期間
)
;
; Name Server Section
;
	IN		NS	ns.hogehoge.com.	 ← 「.」ピリオドを忘れずに
;
; Mail Server Section
;
@	IN		MX 	10 smtp.hogehoge.com.	 ← 「.」ピリオドを忘れずに
;
; Host Section
;
router	IN	A	192.168.0.1
ns	IN	A	192.168.0.2
smtp	IN	A	192.168.0.3
pop	IN	A	192.168.0.3
www	IN	A	192.168.0.5

# vi 0.168.192.in-addr.arpa
$TTL 86400
@ IN SOA ns.hogehoge.com. info.hogehoge.com.(
	2002091904 ; serial
	3600 ; refresh
	900 ; retry
	1209600 ; expire
	43200 ; minimum
)
;
; Name Server Section
;
IN NS ns.hogehoge.com. ← 「.」ピリオドを忘れずに
;
; Host Section
;
1 IN PTR router.hogehoge.com. ← 「.」ピリオドを忘れずに
2 IN PTR ns.hogehoge.com.
5 IN PTR www.hogehoge.com.
7 IN PTR smtp.hogehoge.com.
7 IN PTR pop.hogehoge.com.

hint zone
hint zoneはルートサーバーの情報です、キャッシュサーバーで動作させる為に最新情報に入れ替えます。
ルートサーバーから順に検索して目的のホスト(FQDN)のアドレスを取得するわけですから、
これが正しくないと名前解決できないなどの不具合が発生する可能性がありますので定期的にチェックしてみてください。

ゾーンファイルのある場所に移動
# cd /var/named/chroot/var/named/
バックアップ
# mv named.root named.root.old

直接ルートサーバから取得する方法
# dig +norec ns . @a.root-servers.net > named.root

公開情報から取得する方法
# wget ftp://ftp.rs.internic.net/domain/named.root
文法チェック
# named-checkconf -t /var/named/chroot/
bind起動
# systemctl start named-chroot
ルートサーバーのIPアドレス変更
2017年7月26日(協定世界時)L.ROOT-SERVERS.NETのIPv6アドレスが変更されました。
旧IPv6アドレス: 2001:500:3::42
新IPv6アドレス: 2001:500:9f::42

2015年12月1日(協定世界時)H.ROOT-SERVERS.NETのIPv4/IPv6アドレスが変更されました。
旧IPv4アドレス: 128.63.2.53
旧IPv6アドレス: 2001:500:1::803f:235

新IPv4アドレス: 198.97.190.53
新IPv6アドレス: 2001:500:1::53

2013年1月3日(協定世界時)D.ROOT-SERVERS.NETのIPv4アドレスが変更されました。
旧IPv4アドレス: 128.8.10.90
新IPv4アドレス: 199.7.91.13

2007年11月1日(協定世界時)L.ROOT-SERVERS.NETのIPv4アドレスが変更されました。
旧IPv4アドレス: 198.32.64.12
新IPv4アドレス: 199.7.83.42

↑先頭