LinuC 202「BINDの設定と管理」を見てBIND9の権威DNSを構築してみた (1)

「2.08.1 BINDの設定と管理」の出題内容については以下をご参照ください。
Version 10.0になって少々内容が変更されているようです。

LinuCレベル2 202試験（Version 10.0）出題範囲 | LPI-Japan
https://linuc.org/linuc2/range/202.html

LinuC レベル 1、レベル 2 の出題範囲改定について
https://linuc.org/docs/linuc_ver10.pdf

## この記事のアジェンダ
- 権威DNS用にnamed.confをカスタマイズする方法について
- rndc, named-checkconfの使い方を紹介

## 権威DNS用にnamed.confをカスタマイズする方法

BIND9を権威DNSサーバとして使うためには、/etc/named.confとゾーンファイルの設定をする。
/etc/named.confはいくつかのステータスメントがあるため、それぞれ設定する。

以下、詳細です。

+ controlsステートメント
   - namedをrndcコマンドで操作する許可ホストを指定
   - ひとまずローカルホストだけ許可

```/etc/named.conf
controls {
        inet 127.0.0.1 allow { localhost; };
};
```

+ optionsステートメント
   - グローバル設定を指定する
   - マスターDNSとスレーブDNSで必要な設定が若干違う点に注意する

- マスターDNSの場合

```/etc/named.conf
options {
        listen-on port 53 { 127.0.0.1;
                            <ローカルホストのIP>; };
        listen-on-v6 port 53 { ::1; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        #allow-query     { localhost; };
        allow-query     { any; };
        allow-transfer  { <スレーブのIP>; };
        allow-update { none; };
        notify yes;

        #recursion yes;
        recursion no;

        ~
        ~
};
```

<ポイントとなる設定>
- listen-on: LISTEN IPを指定
- allow-query: DNSクエリ受付け元を全許可
- allow-transfer: ゾーン転送を許可するホスト
- notify: マスターDNSのゾーンが更新された時にスレーブDNSに通知
- recursion: 再起クエリの禁止

- スレーブDNSの場合

```/etc/named.conf
options {
        listen-on port 53 { 127.0.0.1;
                            <ローカルホストのIP>; };
        listen-on-v6 port 53 { ::1; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        #allow-query     { localhost; };
        allow-query     { any; };

        #recursion yes;
        recursion no;

        ~
        ~
};
```

+ loggingステートメント

```/etc/named.conf
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
```

+ zoneステートメント
   - ゾーン名、ゾーンタイプ、ゾーンファイルパスを指定する
   - ここもマスターDNSとスレーブDNSで設定が違う

- マスターDNSの場合

```/etc/named.conf
zone "example.com" IN {
        type master;
        file "example.com.db";
};
```

- スレーブDNSの場合

```/etc/named.conf
zone "example.com" IN {
        type slave;
        masters { <マスターのIP>; };
        file "slaves/example.com.db";
};
```

## rndc, named-checkconfの使い方

+ rndc
   - 用途: BIND管理ユーティリティ

<オプション>
reload: 設定ファイルとゾーンを再読み込み

```
# rndc reload
server reload successful
```

+ named-checkconf
   - 用途: 設定ファイルのテスト

<オプション>
-z: named.confと全てのゾーンファイルをテスト

```
# named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
```