▪️背景と目的
前回の記事で、DNSサーバについて解説しました。今回は実際にLinux上でDNSサーバを構築します。
今回は「マスターサーバ」1台の単一構成で構築します。
本来の実務では冗長化のため「スレーブサーバ」「キャッシュサーバ」も構築するのですが、全部この記事に載せると複雑になってわかりづらくなるので、冗長化構成は次回以降の記事で紹介します。
前回の記事はこちら→「https://lovelabengineer.com/2026/05/17/「almalinux上でdnsサーバを構築してみた」_概念説明編/」
▪️構築手順
♦︎「BIND」のインストール
まず、DNSサーバを構築するには最初に「BIND」というソフトウェアをインストールする必要があります。
BINDをインストールすると「named」というデーモン(プロセス)が稼働します。このデーモンが稼働してDNSサーバの機能を提供します。
① 「sudo dnf install bind bind-utils」コマンドを実行します。
*「bind-utils」もインストールすると「nslookup」「host」コマンドなど古くから使われているクライアント用のコマンドを実行するためのパッケージが入手できます

これで「BIND」のインストールは完了です。「named」プロセスが稼働します。
♦︎「/etc/named.conf」の設定
DNSサーバでは、マスターサーバの情報やゾーンファイルの配置場所など多くの情報を「/etc/named.conf」ファイルに記載しています。したがって、このファイルを書き換えることでDNSに関する様々な設定を行えます。
対象のサーバを「マスターサーバ」「スレーブサーバ」「キャッシュサーバ」どれにするのか、接続できるサーバのフィルタリングなど様々な設定が行えるので「/etc/named.conf」ファイルの各ステートメント(項目)でどういった設定を行えるのかしっかり把握しましょう。
① 「sudo vi /etc/named.conf」を実行します。実行したらキーボードの「i」を押して「挿入モード」に切り替えてください。
② まず「options」ステートメントを見てみましょう。以下設定例です。他にも様々なオプションがありましたが、不要なので消して大丈夫です。
*今回は「マスターサーバ」1台の単一構成なのでオプションはこれだけですが、本来は他にも様々なオプションを記載します

listen-on port 53・・・DNSサーバのIPアドレスを記載
directory ・・・ゾーンファイルを格納するディレクトリ
recursion・・・再起的問い合わせを受け付けるかどうか(キャッシュサーバの場合では「yes」だが、マスターサーバのため「no」)
allow-query・・・問い合わせを受け付けるホスト(この場合、192.168.200ネットワークからの問い合わせは許可する)
③ 続いて「ゾーンファイル」を設定します。以下設定例です。今回は正引き用に「lovelab.net」逆引き用に「200.168.192.in-addr.arpa」ファイルを指定します。マスターサーバのため、typeは「master」にします。
*逆引き用のゾーンファイル名は「ネットワークアドレスを逆にしたもの + in-addr.arpa」が基本です
ネットワーク部が「192.168.200」の場合 → 200.168.192


④ 記載終了したら保存しましょう。
⑤ 「etc/named.conf」ファイルの内容に文法的な誤りがないかコマンドを実行してチェックできます。以下のコマンドを実行します。何も表示されなければ問題ありません。

♦︎ ゾーンファイルの設定
① 続いて「ゾーンファイル」を設定します。
上記②より「/var/named」配下にゾーンファイルを指定したのでここに作成します。以下のコマンドを実行して新規でファイルを作成しましょう。

② 正引き用のゾーンファイルを作成します。
以下記載例です。ここでは主に「ns.lovelab.net」がDNSサーバであること、そのIPアドレスが「192.168.200.130」であることを指定しています。

$ORIGINディレクティブ・・・ドメイン名が明示されてないレコードで保管するドメイン名を指定
$TTLディレクティブ・・・他のDNSサーバがゾーンデータをキャッシュに保存する時間を指定
⚫︎SOAレコード・・ゾーンに関する情報を記載
<構文>
名前 IN SOA DNSサーバ メールアドレス (Serial; Refresh; Retry; Expire; Negative TTL)
serial・・・シリアル番号が記載。マスターサーバでゾーンファイルを更新すると、このシリアル番号が更新され、スレーブサーバはゾーン情報を更新する。「日付+2桁」で記載することが多く、内容を更新するごとに番号を+1する
Refresh ・・・マスターDNSサーバのゾーン情報の変更をスレーブサーバがチェックする間隔を指定
Retry ・・・スレーブサーバがマスターサーバにアクセスできなかった際に、何秒後に再アクセスするかを指定
Expire・・・スレーブサーバがマスターサーバにアクセスできなかった際に、何秒後にゾーン情報を破棄するか指定
Negative TTL・・・ネガティブキャッシュの有効期限を指定
⚫︎NSレコード・・・DNSサーバをFQDNで指定(DNSサーバが複数存在するときは複数記載)
⚫︎Aレコード・・・FQDNに対するIPアドレスを指定
*NSレコード、MXレコードを記載した場合、そのFQDNのAレコードは必須(名前解決できないため)
⚫︎mxレコード・・・メールサーバをFQDNで指定
⚫︎CNAMEレコード・・・FQDNに対する別名を指定
*CNAMEレコードの宛先に「メールサーバ」「DNSサーバ」は指定できない。
③ 続いて逆引き用のゾーンファイルを作成します。「sudo vi /var/named/rev.lovelab.net」を実行してファイルを作成してください。
以下記載例です。

基本的な記載方法は正引きファイルと同じです。「PTRレコード」はIPアドレスに対応するFQDNを指定します。
④ ゾーンファイルの構文に問題がないかチェックできます。以下のコマンドを実行してください。
OKと表示されれば問題ありません。
<named-checkzone 構文>
named-check zone. -w ディレクトリ ゾーン名 ゾーンファイル名


♦︎ 「/etc/resolv.conf」を設定
以下は名前解決を依頼するクライアントで設定を行います。クライアントがどのDNSサーバを参照するかは「/etc/resolv.conf」ファイルで指定します。
① コマンド「sudo vi /etc/resolv.conf」を実行します。
② 以下設定例です。
ドメイン名に「lovely.net」、DNSサーバに「192.168.200.130」を指定します

以上で構築は完了です。試しに「ping」「nslookup」コマンドを実行して名前解決できるか確かめてください。
▪️まとめ
今回はマスターサーバ1台の単一構成のDNSサーバを構築しました。しかし、実際の実務では「スレーブサーバ」「キャッシュサーバ」などを含めた冗長化構成が基本です。
次回以降の記事ではもう少し複雑な構成を紹介します。
コメント