CentOS7でDNSサーバの構築

# CentOS7上でDNSサーバ構築
bindを使用してのDNSサーバを構築手順を記載していきます。
IPアドレスやドメイン名等はご自身の環境に置き換えてください。
内容の細かな説明等は省略しています。
設定は検証用の設定です。

## 1. パッケージなどを最新の状態にする

```shell

yum install update 
```

## 2. bindのインストール
```shell
yum install bind
```

## 3. bind-chrootのインストール
```shell
yum install bind-chroot
```

## 4. bind-utilsのインストール
```shell
yum install bind-utils
```

## 5. named-chrootの自動起動
```shell
systemctl start named-chroot
```
```shell
systemctl status named-chroot
```
```shell
systemctl enable named-chroot
```

## 6. 正引きゾーンファイルの作成・編集
```shell
cd /var/named/chroot/var/named
```

```shell
cp -ip named.localhost test.local.zone
```

```shell
vim test.local.zone
```
下記のIPアドレスやドメイン名等はご自身の環境に合わせてください。

``` test.local.zone
$TTL 1D
@　　　 IN 　SOA 　   ns.test.local. root.test.local. (
　　　　　　　　　　　　　　　　　　　　0 　　; serial
　　　　　　　　　　　　　　　　　　　　1D 　 ; refresh
　　　　　　　　　　　　　　　　　　　　1H 　 ; retry
　　　　　　　　　　　　　　　　　　　　1W 　 ; expire
　　　　　　　　　　　　　　　　　　　　3H )  ; minimum
      IN   NS       ns.test.local.
　　　 IN   MX       10 mail.test.local.
@     IN   A 　　　  192.168.1.13
ns    IN   A 　　　  192.168.1.13
mail  IN   A 　　　  192.168.1.13
```

## 7. 設定ファイルの構文が正しいかチェック
```shell
named-checkzone test.local /var/named/chroot/var/named/test.local.zone
```
エラーではなく、OKが出れば問題ないです。

## 8. /etc/resolv.confの編集
/etc/resolv.confに今回のDNSサーバのIPアドレスを追加します。

```shell

vim /etc/resolv.conf
```

下記の設定に変更します。

```shell
nameserver 127.0.0.1
```

## 9. named.confの編集
- listen-on port 53をanyに変更
- allow-queryをanyに変更
- ゾーン情報の追加
- forwardersの追加

```shell
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; };
        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";
        allow-query     { any; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
        forwarders{
            8.8.8.8;
            1.1.1.1;
       };
};

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

zone "." IN {
        type hint;
        file "named.ca";
};

zone "test.local" IN {　←この test.local のゾーン情報を追加します。
        type master;
        file "test.local.zone";
        allow-query {any;};
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
``` 

## 10. bind(named-chroot)の再起動
```shell
systemctl restart named-chroot
```

下記のコマンドで正常に起動できている事を確認します。

```shell
systemctl status named-chroot
```

## 11. その他の変更点

SELinuxのアクセス制限を解除

```shell
setenforce 0
```

firewalldの無効化

```shell
systemctl stop firewalld
```

## 12. 名前解決の確認
```shell
dig test.local
```

```shell
dig google.com
```