【サーバ構築】UnboundにてDNSキャッシュサーバを作成する。

bindにかなり多くの脆弱性がでているため、新しいソフトでDNSを構築していきたい。
今回は、DNSキャッシュサーバ用のunboundを持ちいてDNSキャッシュサーバを作成していく。

# 実行環境

OS：CentOs8Stream

fireWallの設定など、基本的なサーバの設定は済んでいるものとする。

# unboundのインストール

以下のコマンドを実行する。
```
sudo yum install unbound
```

unboud-server.keyを作成しないと、 unbound-checkconf でエラーが表示されるため、これを作成する。 まずは以下コマンドで、存在するかどうか確認する。
```
sudo systemctl status unbound-keygen
```
以下のような表示になる。
```
sudo systemctl status unbound-keygen
------------------------------------------------------------
● unbound-keygen.service - Unbound Control Key And Certificate Generator
  Loaded: loaded (/usr/lib/systemd/system/unbound-keygen.service; disabled; vendor preset: disabled)
  Active: inactive (dead)
```
次のコマンドで、keyファイルを作成する。

```
sudo systemctl start unbound-keygen
```
この状態でもう一度確認すると、Activeになっているのが分かる。

```
sudo systemctl status unbound-keygen
結果
● unbound-keygen.service - Unbound Control Key And Certificate Generator
   Loaded: loaded (/usr/lib/systemd/system/unbound-keygen.service; disabled; vendor preset: disabled)
   Active: active (exited) since Tue 2021-09-14 14:29:54 JST; 6s ago
```
また、lsコマンドで、 unbound_server.key  がある事も確認できる。
```
ls -l /etc/unbound/*.key
```

# コンフィグの変更
`/etc/unbound/unbound.conf` を設定する。
デフォルトでは全てコメントアウトされている。必要な部分を追記したり、アンコメントしたりする。

1. 以下の部分を検索し、設定を変更する。
許可する範囲は、管理ネットワークを包括する範囲である、10.0.0.0/8 である
```
sudo vi /etc/unbound/unbound.conf
```
内容
```
------------------------------------------------------------
server:
interface: 0.0.0.0     ←すべてのアドレスからの問い合わせに回答(IPv4)
interface: ::0       ←すべてのアドレスからの問い合わせに回答(IPv6)
access-control: 0.0.0.0/0 refuse   ←デフォルト拒否(IPv4)
access-control: 127.0.0.0/8 allow  ←ループバックアドレスを許可(IPv4)
access-control: 192.168.160.0/24 allow ←問い合わせを許可するネットワーク
access-control: ::0/0 refuse     ←デフォルト拒否(IPv6)
access-control: ::1 allow       ←ループバックアドレスを許可(IPv6)
access-control: ::ffff:127.0.0.1 allow ←ループバックアドレスを許可(IPv6)

interface-automatic: yes(この場合、すぐ下にあるNoをコメントアウトすること。VIPなどを使うために、
複数のアドレスをDNSサーバのアドレスとして使用するときに使う。)
 ------------------------------------------------------------
```
変更したら:wqで保存する。

以下のコマンドで確認を行う。
```
sudo unbound-checkconf
```
問題なければ、以下のように出力が出る。
```
unbound-checkconf: no errors in /etc/unbound/unbound.conf
```

動作させる。
以下コマンドで、unboundの再起動と、自動起動の設定をする。
```
sudo systemctl restart unbound
sudo systemctl enable unbound
```
起動の確認を行う。 成功すれば、以下のような出力結果が出てくる。

```
unbound.service - Unbound recursive Domain Name Server
Loaded: loaded (/usr/lib/systemd/system/unbound.service; enabled; vendor preset: disabled)
  Active:
Main PID:
   Tasks:
  Memory:
  CGroup:
active (running) since Fri 2021-10-01 16:37:11 JST; 8s ago
5645 (unbound)
4 (limit: 10993)
20.5M
/system.slice/unbound.service
└─5645 /usr/sbin/unbound -d
```

自分自身のDNSの名前解決の設定(本来は、8.8.8.8など、信頼できるDNSサーバにすべきだが、あくまで動作確認のため行なっている。)`/etc/resolv.conf`を編集する。

```
sudo vi /etc/resolv.conf
```
以下に変更
```
nameserver 127.0.0.1（8.8.8.8など、信頼できるDNSサーバ）
nameserver (他のDNSサーバなど)
```
nslookupコマンドで、自分自身(127.0.0.1)を参照しているか確認できる。 
これで、今回作ったサーバが、ちゃんと名前解決ができるサーバである事を確認できる。
```
nslookup www.google.com
```
Serverの部分は127.0.0.1と出ること
```
Server: 127.0.0.1
Address: 127.0.0.1#53
 Non-authoritative answer:
 Name: www.google.com
 Address: 172.217.175.36
 Name: www.google.com
 Address: 2404:6800:4004:81f::2004

```

以上

# 参考サイト
https://tech-mmmm.blogspot.com/2017/03/centos-7unbounddns.html
https://blog.goo.ne.jp/a-storm/e/7e33c2195e2658ed9d45f27f005ad369