Ubuntu Server 20.04.3 LTS 構築#23 DNSサーバーの構築

実施日:2022/04/10～2022/04/17

【今回の内容】
DNSサーバーを立てる

## BINDをインストール～ポート開放まで

```
#BIND9を導入します。
sudo apt install bind9
#パスワードを入力

#BIND(DNS)は53番ポートを使用するので、開放します。
sudo ufw status

#ファイアーウォールの状態確認
sudo ufw allow 53
#ssh接続のために開放したポートのみallowになっていた。
#53番ポートを開放します。

#53番ポートが開放されたか確認します。
sudo ufw status

#53番ポートが開放されていました。
```

## キャッシュサーバーの設定

```
#/etc/bind/named.confの中は設定項目がなく、各設定は下記のように分かれています。
#/etc/bind/named.conf
#┗/etc/bind/named.conf.options
#┗/etc/bind/named.conf.local
#┗/etc/bind/named.conf.default-zones
#キャッシュサーバーの設定をします。
#/etc/bind/named.conf.optionsを編集します。
sudo nano /etc/bind/named.conf.options
 forwarders {
      8.8.8.8;
      8.8.4.4;
};

allow-query { localhost; 192.168.1.0/24; };
#IPv6は使用しないので、変更します。
listen-on-v6 { none; };
#キャッシュサーバーの場合は再帰的な問い合わせを許可にします。
recrusion yes;
#上記内容に変更し、保存します。
#bind9を起動させます。
sudo systemctl start bind9
#bind9の状態を確認します。
sudo systemctl status bind9
#状態がactiveになっていれば動作していることとなります。
```

## コンテンツサーバーの設定

```
#ゾーンファイルを作成します。
#カレントディレクトリの移動
cd /etc/bind/
#ゾーンファイルの作成
sudo nano db.XXXXXX.com
$ORIGIN XXXXXX.com
$TTL 604800
XXXXXX.com. IN SOA ns.XXXXXX.com. root.ns.XXXXXX.com.(
                20220416 ; Serial
                1D ; Refresh
                1H ; Retry
                1W ; Expire
                1D ) ; Negative TTL
ns.XXXXXX.com. IN A 192.168.1.21
XXXXXX.com.    IN NS ns.XXXXXX.com.
XXXXXX.com.    IN AAAA ::1
#上記のように設定
#ゾーンファイルのチェックを実施します。
named-checkzone XXXXXX.com /etc/bind/db.XXXXXX.com
#結果
「OK」が表示されれば完了です。

#エラー
/etc/bind$ sudo named-checkzone XXXXXX.com /etc/bind/db.XXXXXX.com
dns_master_load: /etc/bind/db.XXXXXX.com:1: unknown $ directive '$'
/etc/bind/db.XXXXXX.com:1: unknown RR type 'ORIGIN'
dns_master_load: /etc/bind/db.XXXXXX.com:2: unknown $ directive '$'
/etc/bind/db.XXXXXX.com:2: unknown RR type 'TTL'
dns_rdata_fromtext: /etc/bind/db.XXXXXX.com:3: near 'root.ns.XXXXXX.com.': not a valid number
/etc/bind/db.XXXXXX.com:9: no TTL specified; zone rejected
/etc/bind/db.XXXXXX.com:10: no TTL specified; zone rejected
/etc/bind/db.XXXXXX.com:11: no TTL specified; zone rejected
zone XXXXXX.com/IN: loading from master file /etc/bind/db.XXXXXX.com failed: syntax error
zone XXXXXX.com/IN: not loaded due to errors.

#エラー解消
$ ORIGIN XXXXXX.com
$ TTL 604800
#上記の$のあとに半角スペースがあったため、半角スペースを削除
/etc/bind$ sudo named-checkzone XXXXXX.com /etc/bind/db.XXXXXX.com
dns_master_load: /etc/bind/db.XXXXXX.com:1: unknown $ directive '$'
/etc/bind/db.XXXXXX.com:1: unknown RR type 'ORIGIN'
dns_master_load: /etc/bind/db.XXXXXX.com:2: unknown $ directive '$'
/etc/bind/db.XXXXXX.com:2: unknown RR type 'TTL'
/etc/bind/db.XXXXXX.com:9: no TTL specified; zone rejected
/etc/bind/db.XXXXXX.com:10: no TTL specified; zone rejected
/etc/bind/db.XXXXXX.com:11: no TTL specified; zone rejected
#上記の部分のエラーは解消されました。

dns_rdata_fromtext: /etc/bind/db.XXXXXX.com:3: near 'root.ns.XXXXXX.com.': not a valid number
#3行目に書式の誤りがあるのは判りました。
#XXXXXX.com. IN SOA ns XXXXXX.com. root.ns.XXXXXX.com.(
#nsとXXXXXXの間に.(ドット)が抜けていました。
#再度、構文チェックをしたところ、「OK」が表示されました。
```

## 動作確認
```
#問題なく動作するか確認します。
#BINDを起動させます。
#名前解決の参照先を自ホストにします。
sudo nano /etc/netplan/ファイル名.yaml
nameservers:
address: [192.168.1.21]
#変更を適用させます。
sudo netplan apply
#名前解決が出来るか確認します。
dig XXXXXX.com.
dig -x 192.168.1.21
#結果として、「Answer Section」が表示されていれば成功です。
```
今回はここまでです。