お家環境でDNSサーバ構築と検証

これまでなんとなくDNSサーバを扱ってきたので
DNSサーバの挙動を理解するために実際にDNSサーバを立ててみようかと思います。

その際の手順や設定を記載していきます。

今回は下記のDNSサーバ構築を解説してくれているサイトがあったのでこちらを参考に進めていこうと思います。
※手持ちで所持している機器で構築していくのである程度妥協があるかも
参考：https://www.isoroot.jp/blog/2929/

ちなみに現状の構成です。
よく家庭用にあるONU兼wifiルータ(dhcp,dns機能諸々込みのやつ)です。
ルータに有線で差し込んであるだけでHUBなど何も嚙ましてない拡張性皆無の構成です。
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/c4e1bcfb-e869-e4b1-d5ee-c4d69c938f46.png">

DNSサーバはPC上でサーバソフト(BlackJumboDog)とかで建てるのもいいかなとは思ったけど
折角なので仮想マシンの構築からやっていきます。




## まず仮想マシンのおさらいから ##
■ホスト型とハイパーバイザー型について↓↓

https://itengine.seesaa.net/article/443541579.html#:~:text=%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A8%98%E8%BC%89%E3%81%99%E3%82%8B%E3%80%82-,%E3%83%9B%E3%82%B9%E3%83%88%E5%9E%8B%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%90%E3%82%A4%E3%82%B6%E3%83%BC%E5%9E%8B,-%E4%B8%BB%E3%81%AB%E4%B8%8B%E8%A8%982


上記のサイトを見ておさらい終わり、忘れたら見に行こう。

次、

ESXiはよく聞くけど何かよくわからない物の認識だったので調べるところから。↓
* ハイパーバイザ型の仮想マシン
* ESXiはVMware社の製品vSphereの中核的な物で、vSphereはVcenterという複数のESXiを管理できるものがついてくる。
* 有償版と無料版(評価用)がある。
参考：https://frontl1ne.net/2019/12/vmware-esxi-install/

調べていく内にESXiを入れるには空のHDD、SSDを丸ごと1つ食いつぶす。
なのでほかのOSとは別のストレージに入れてあげる必要がある。(デュアルブート出来ないね)

サーバ専用マシンは用意していないので敷居の低いホスト型の仮想マシンを使うことにしました。
過去に触ったことのある**Virtual box**を使おうと思います。


## 仮想マシンのセットアップ手順 ##
仮想マシン上でCentOSを起動させるにあたり必要なものは以下の2つ。
* 仮想化マシン (virtual box)
* CentOSのisoファイル (仮想マシンとして建てたいマシンのOS)

やり方は先人が残したものがあるのでそちらを参照。

https://qiita.com/apricotcomic/items/035dc1c0c7ad08054495

ちなみにisoファイルは複数のファイルで構成された一つのファイル。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/d8eaa9a3-e058-12ca-331b-652301fa9d10.png">


これでCentOSを仮想マシン上で稼働できるようになった。

※ちなみに仮想マシンのネットワークの種類(NWの割り当て(A):)はブリッジアダプターにした↓↓
未割当：ネットワークアダプタを有効にするが通信はさせない。異常試験の時に使う模様。
ブリッジアダプター：仮想SWの配下にホストOSとゲストOSがいる構成となる。
NAT：ホストOSのIPを共有して外部の物理ネットワークと接続するモード。
　　　ホストOSとゲストOSの間でvitual boxがNATを行う。

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/f303fa3b-bd36-982b-624c-7038be145020.png">


現状の構成としては以下のようになっている。↓↓
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/e38c76c9-7aea-c858-d6bc-59a2d4383788.png">


## CentOS上でDNSサーバを立てる

ここからCentOS上でのCLI操作となるので**DNSソフト bind**のセットアップの一連の動作を記載する。


~~~md:bindのインストール
#yum install bind
~~~

~~~md:CentOSのfirewallの停止
#systemctl stop firewalld
~~~
↑これがないとDNS関連の通信がブロックされます。

~~~md:bind(DNSサーバ)のサービスを開始する
#systemctl start named
~~~

~~~md:bind(DNSサーバ)のstatusやlogなど確認できるコマンド(困ったらここを見よう)
#systemctl status named
~~~

これでDNSサーバの起動と確認ができたので今の構成はこんな感じ。↓↓

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/8fab514b-c3ce-66a6-f175-2057deaf1d52.png">


次はDNSの設定について。
**/etc/named.conf**でDNSサーバの設定ができるので設定していきます。

~~~md:DNS設定コマンド
#vi /etc/named.conf
~~~

設定すべき点は以下の4つ。(最初に紹介した今回構築にあたって参考にしたサイトに詳しい説明があったのでそちらから抜粋↓↓)

* listen-on port 53
LISTENするIPアドレスを指定します。
自身のIPアドレスを追記しています。
* allow-query
問い合わせを受け付けるネットワークを制限します。
今回はClientのネットワークも含めた192.168.0.0/16で許可します。
* forwarders
再帰問い合わせ先を指定します。
GoogleのパブリックDNSサーバーを指定します。
* recursion
再帰問い合わせ機能を利用するかを記述します。
利用する場合は yes , 利用しない場合は no と記述します。


なので自分は以下の通りに設定しました。
* listen-on port 53 { 127.0.0.1; 192.168.0.12;};
* allow-query     { localhost; 192.168.0.0/16;};
* forwarders{ 8.8.8.8; };
* recursion yes;

■変更後のconfig
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/f8ec11a8-da0c-c504-84a7-d5123816baf6.png">


:::note info
変更後にDNSを立ち上げたままでconfファイルの中身を変更しても反映されないので注意！
下記のrestartコマンドでDNSサービスを再起動する必要あり↓↓
:::

~~~md:nmaed.confの変更を反映する
#systemctl restart named
~~~



これでDNSのセットアップは一通り終わりのはずです。


## 通信確認

ホストOS端末はこれまでwifiルータのDHCP機能でipを自動取得してきたので、ホストOS端末の**ipアドレス、サブネット、デフォゲ、DNSサーバ**の**ipアドレス**をstaticで設定してWeb閲覧できるかチェックしてみます。


ホストOS端末でstaticで以下の通りに設定して
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/012b5749-d90d-a9a2-618c-8c5678f18a3a.png">

***自分で建てたDNSサーバでうまくWebサイト見れました！！***

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3088255/4029014d-6e91-117e-2456-f23670f5e635.png">


**再帰問い合わせ名前解決**のパターンを確認できたので今度は**非再帰問い合わせ**もできるかやってみる予定。
LAN内でNTPサーバ立ててclientからFQDNで名前解決できてることを確認するとか。