Linuxサーバー構築標準教科書通りにDNSサーバーを構築してみる(備忘録)その1

# はじめに
本業はネットワーク周りを触っています。
Linuxの勉強ということでDNSサーバーを構築しようと思もった。
備忘録的に投稿

# 内容
今回は、[Linuxサーバー構築標準教科書(Ver.3.0.2) ](https://linuc.org/textbooks/server/)を参照し構築。
資料と異なり、Oracle Linuxを使用。
また、今回はキャッシュサーバーの構築のみで、コンテンツサーバーについては、後日投稿予定。
ほぼほぼ書いてあるままやっている。

# 参考資料
>[Linuxサーバー構築標準教科書(Ver.3.0.2) ](https://linuc.org/textbooks/server/)


# 検証環境
* VMware Workstation 16 Player
  * Oracle Linux　8.7.0
* unbound-1.16.2-2.el8.x86_64
* bind9.16-utils.x86_64

# 構成図

```mermaid
flowchart TD
     cache o--o ContentsB;
     cache　o--o ContentsC;
```

* Cache searver
  * IP address:192.168.10.1/24
* ContentsB(zone:alpha.jp)
  * IP address:192.168.10.2/24
* ContentsC(zone:beta.jp)
  * IP address:192.168.10.3/24


# インストール

キャッシュサーバーへunboundをインストール。また、動作確認用にbind-utilsもダウンロードする。
バージョンのみ、若干新しいバージョンへ変更。


```shell-session:
[root@cacheServer ~]# dnf list | grep unbound.x86_64
unbound.x86_64                                                    1.16.2-2.el8
[root@cacheServer ~]# dnf list | grep bind
bind9.16-utils.x86_64                                             32:9.16.23-0.9
```
<br>
unboundとbind-utilsをインストール。

```shell-session:
[root@cacheServer ~]#dnf install unbound.x86_64 bind9.16-utils.x86_64 
```
<br>
正常にインストールされていることを確認

```shell-session:
[root@cacheServer ~]# dnf list installed | grep bind
bind-libs.x86_64                            32:9.11.36-5.el8_7.2                        @ol8_appstream
bind-libs-lite.x86_64                       32:9.11.36-5.el8_7.2                        @ol8_appstream
bind-license.noarch                         32:9.11.36-5.el8_7.2                        @ol8_appstream
bind9.16-libs.x86_64                        32:9.16.23-0.9.el8.1                        @ol8_appstream
bind9.16-license.noarch                     32:9.16.23-0.9.el8.1                        @ol8_appstream
bind9.16-utils.x86_64                       32:9.16.23-0.9.el8.1                        @ol8_appstream
python3-bind.noarch                         32:9.11.36-5.el8_7.2                        @ol8_appstream
[root@cacheServer ~]# dnf list installed | grep unbound
python3-unbound.x86_64                      1.16.2-2.el8                                @AppStream
unbound.x86_64                              1.16.2-2.el8                                @ol8_appstream
unbound-libs.x86_64                         1.16.2-2.el8                                @AppStream
```

# 設定
<b>1. インターフェースの指定</b>
`/etc/unbound/local.d/interface.conf`を作成し、IPアドレスを指定する。
```shell-session:/etc/unbound/local.d/interface.conf
interface: 192.168.10.1
interface: 127.0.0.1
```
<br>
<b>2. クライアントの設定</b>
`/etc/unbound/local.d/client.conf`を作成する。
利用可能なクライアントを指定し、キャッシュサーバーを利用できるクライアントを制限する。
```shell-session:/etc/unbound/local.d/client.conf
access-control: 192.168.10.0/24 allow
```
<br>
<b>3. ドメインの設定</b>
検証環境であり、JPドメインへ登録していないため、今回はスタブゾーンを設定し、
JPを使用できるようにする。

:::note warn
注意
JPドメインへ自ドメインを登録できる場合は不要な設定。
:::
<br>

`/etc/unbound/conf.d/stub.conf`を作成する。
利用可能なクライアントを指定し、キャッシュサーバーを利用できるクライアントを制限する。

```shell-session:/etc/unbound/conf.d/stub.conf
stub-zone:
    name: alpha.jp.
    stub-addr: 192.168.10.2
    stub-prime: no
    stub-first: no
stub-zone:
    name: beta.jp.
    stub-addr: 192.168.10.3
    stub-prime: no
    stub-first: no
```
<br>

<b>4. 鍵の生成</b>
unboundの制御に使用する鍵を生成する。
```shell-session:
[root@cacheServer ~]# systemctl start unbound-keygen.service
```
<br>
<b>5. 書式チェック</b>
作成したファイルの書式チェックを行う。
問題がなければ、下記の出力が表示される。

```shell-session:
[root@cacheServer ~]# unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf
```
<br>
<b>6. Firewall穴あけ</b>

```shell-session:
[root@cacheServer ~]# firewall-cmd --add-service=dns --permanent
```
<br>
<b>7. 起動と自動起動</b>

```shell-session:
[root@cacheServer ~]# systemctl start unbound
[root@cacheServer ~]# systemctl enable unbound
```
<br>


# 最後に
初投稿。投稿するのは大変ですね。
簡単に作ってみましたが、まだまだ分からないことがたくさんで、正直何をしているかわからない状態。
いろいろ調べながら、わかってくるといいなと思ってます。
ネットワーク周りの検証も投稿できたらうれしいな。