Red Hat Enterprise Linux 8でシンプルなDNSサーバーを構築する

VMware vCenter Server (以下、vCenter)などの仮想環境を構築する際には、DNSによる名前解決が必要です。

本記事では、vCenter を構築するための名前解決環境を準備することを目的として、Red Hat Enterprise Linux 8(以下、RHEL8)で DNS サーバーを構築する手順を説明します。

環境の準備

環境の全体像

本記事では、vCenter の構築に使用する DNS サーバーとして、vCenter および VMware ESXi(以下、ESXi)の管理用 IP アドレスと同じセグメントに RHEL8 の仮想マシンを作成します。

今回は、検証環境として10.87.72.0/24のネットワークを利用します。本環境の名前解決に必要な情報を、以下の表にまとめました。

FQDN IP アドレス 役割
testESXi01.example.com 10.87.72.1/24 ESXi1号機
testESXi02.example.com 10.87.72.2/24 ESXi2号機
testESXi03.example.com 10.87.72.3/24 ESXi3号機
testVC01.example.com 10.87.72.4/24 vCenter
testDNS.example.com 10.87.72.5/24 DNS

Red Hat Enterprise Linux Download | Red Hat Developer

事前準備

事前準備として、ESXiを3台構築します。構築手順は割愛いたします。

また、RHEL の公式サイトから ISO ファイルをダウンロードし、ESXi 上のストレージにアップロードしておきます。

※ ISO ファイルのダウンロードには、無料アカウントの作成が必要です。

RHEL8 のインストールと初期設定

ESXi 上で仮想マシンを作成し、電源を入れます。インストーラーで使用する言語を選択します。

ダッシュボードが表示されるので各項目を入力します。[ ! ]アイコンは必須入力事項です。

ソフトウェアの選択では、[サーバー] > [DNS ネームサーバー]を選択します。

※ DNS ネームサーバーを選択しておくことで、OSインストールと同時にBIND がインストールされます。

ネットワークとホスト名では、左下のホスト名を入力し[適用]をクリックします。

上図で[設定]をクリックし、ネットワークインターフェースを設定します。

一通り設定を終えたら、[インストールの開始]をクリックします。

インストールが完了したのち、[システムの再起動]をクリックすれば、初期設定は完了です。

named.conf ファイルの設定

named.conf ファイルの基本構造

今回の構成では、DNSサーバー用のソフトウェアとしてBINDを利用します。

named.conf ファイルはBINDの設定ファイルです。このファイルには、DNS サーバーの動作を制御するための様々な設定が含まれています。

以下に、named.conf ファイルの基本構造と主要な設定項目について説明します。

  • Option セクション
    • サーバー全体の動作に関する設定を行うセクションです。たとえば、リスンするポート、フォワーダー、キャッシュサイズなどが設定されます。
      • listen-on: DNS サーバがリクエストを受け付ける IP アドレスとポートを指定します。
      • allow-query: クエリを許可するクライアントのリストを定義します。
      • forwarders: 解決できないドメイン名のクエリを転送する上位 DNS サーバの IP アドレスを指定します。
      • directory: BIND が動作するディレクトリを指定します。
  • Logging セクション
    • ログ出力に関する設定を行います。どの情報をどのログファイルに出力するか、ログのレベルなどを指定できます。
      • channel: ログの出力先と出力形式を指定します。
  • ACL セクション
    • アクセス制御リストを定義し、特定の IP アドレスやネットワークに対するアクセス権を制御します。ACL は、後のセクションで使用されることが多いです。
      • acl: 特定の IP アドレスやネットワークをグループ化し、そのグループに対してアクセス権を設定します。
  • Zone セクション
    • DNS ゾーンの定義を行うセクションです。プライマリ、セカンダリ、フォワードゾーンなどを定義します。
      • type: ゾーンの種類を指定します。master(プライマリ)、slave(セカンダリ)、forward などがあります。
      • file: ゾーンデータが保存されているファイルを指定します。
      • allow-transfer: ゾーン転送を許可するサーバのリストを指定します。

下記コマンドで named.conf ファイルを確認します。

cat /etc/named.conf

named.conf のデフォルト値は下記の通りです。

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
        include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

必要な設定項目の説明

下記コマンドで named.conf ファイルを編集します。

※ テキストファイルの編集方法の説明は割愛します。

vi /etc/named.conf

本環境での named.conf ファイルの設定例です。

acl"mynetworks"{10.87.72.0/24};
options {
        #listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { none; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; mynetwork;};
        allow-transfer {none;};
        recursion no;
        dnssec-enable no;
        dnssec-validation no;
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
        include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "example.com" {
      type master;
      file "/var/named/testDNS.example.com.zone";
};
zone "72.87.10.in-addr.arpa" in {
     type master;
    file "/var/named/72.87.10.in-addr.arpa.zone";
};

DNS ゾーンの設定

ゾーンファイルの構成と役割

ゾーンファイルは、DNS においてドメイン名と IP アドレスの対応を管理するための重要なファイルです。特定のドメインの DNS レコードを含むテキストファイルであり、DNS サーバーにより管理されます。

以下に、ゾーンファイルの各レコードについて説明します。

SOA レコード

ゾーンの権威情報を定義します。

これには、ゾーンのマスター DNS サーバー、ゾーンの管理者のメールアドレス、ゾーンのシリアル番号、リフレッシュタイム、リトライタイム、エクスパイアタイム、TTL が含まれます。

※ ここではそれぞれの役割の説明は割愛します。

A レコード

ドメイン名を IPv4 アドレスに対応付けます。

AAAA レコード

ドメイン名を IPv6 アドレスに対応付けます。

CNAME レコード

ドメイン名のエイリアスを定義します。

MX レコード

ドメインのメールサーバーを指定します。

正引きゾーンと逆引きゾーンの設定

正引きゾーンの設定

正引きゾーンは、ドメイン名を IP アドレスに変換するためのゾーンです。通常、ドメイン名の解決に使用されます。

下記コマンドで正引きゾーンファイルを作成および編集します。

vi /var/named/testDNS.example.com.zone

以下は、本環境での正引きゾーンの設定例です。

$ORIGIN example.com.
$TTL 3600
@	IN	SOA	testDNS.example.com. root.example.com.(
				2024070701      ; Serial
				10800            ; Refresh
				1800             ; Retry
				604800         ; Expire
				3600 )          ; Minimum
;Name Server
	IN      NS      testDNS.example.com.
;A Records
testESXi01	IN	A	10.87.72.1
testESXi02	IN	A	10.87.72.2
testESXi03	IN	A	10.87.72.3
testVC01	IN	A	10.87.72.4
testDNS       IN	A	10.87.72.5
逆引きゾーンの設定

逆引きゾーンは、IP アドレスをドメイン名に変換するためのゾーンです。通常、IP アドレスの PTR レコードを管理します。逆引きゾーンは、ネットワークアドレスの逆順で設定されます。下記コマンドで逆引きゾーンファイルを作成および編集します。

vi /var/named/72.87.10.in-addr.arpa.zone

以下は、本環境での逆引きゾーンの設定例です。

$TTL 3600
@	IN	SOA	testDNS.example.com. root.example.com.(
				2024070701      ; Serial
				10800            ; Refresh
				1800             ; Retry
				604800         ; Expire
				3600 )          ; Minimum
;Name Server
	IN      NS      testDNS.example.com.
;PTR Records
1	IN	PTR	testESXi01.example.com.
2	IN	PTR	testESXi02.example.com.
3	IN	PTR	testESXi03.example.com.
4	IN	PTR	testVC01.example.com.
5	IN	PTR	testDNS.example.com.

DNS サーバーの起動と管理

named-chroot

本環境では、DNS サーバーのセキュリティを強化するため、named-chroot を使用しています。named-chroot は named 同様に、セットアップ時に自動でインストールされています。

named-chroot は、BIND を制限された仮想的なディレクトリツリー(chroot 環境)内で動作させることで、万が一サーバーが侵害された場合でも、システム全体への影響を最小限に抑えることができます。

これにより、セキュリティリスクを減らし、サーバーをより安全に運用することが可能です。

BIND のコマンド

以下に、BIND のサービスを扱うコマンドを記します。

※ 前述の通り、今回はnamed-chroot を使用しているため、その前提のコマンドとなります

BIND のインストール
sudo yum install bind bind-utils

※ 本記事の様に、初期設定のソフトウェアの選択にてDNS ネームサーバーを選択している場合、インストールは不要です。

BIND の起動方法
sudo systemctl start named-chroot
BIND の自動起動設定
sudo systemctl enable named-chroot
BIND の再起動
sudo systemctl restart named-chroot
BIND の状態確認
sudo systemctl status named-chroot
ログの確認
sudo tail -f /var/named/chroot/var/log/named.log

名前解決確認

設定が完了しているので、digコマンドを使用してドメインの名前解決が可能か確認します。

dig testESXi01.example.com

逆引き確認を行いたい場合は、IPアドレスからドメイン名を取得します。

dig -x 10.87.72.1

DNS キャッシュのクリア方法

DNSキャッシュクリアが必要となる場面はいくつかありますが、主に以下のような状況で行われます。

  • DNSレコードの変更後
  • 名前解決の問題が発生した場合
  • DNSサーバーのトラブルシューティング
全キャッシュのクリア
sudo rndc flush
特定のゾーンのキャッシュのクリア
sudo rndc flushname example.com

おわりに

本記事では、DNSサーバーの基本やRHEL8 上に DNS サーバーを構築する手順を説明し、仮想環境での名前解決を行うための設定について解説しました。

なお、本環境では、named.conf ファイルの設定でユーザーの認証や通信の暗号化を行っていません。必要に応じてご検討ください。

執筆担当者プロフィール
谷 誠人

谷 誠人(日本ビジネスシステムズ株式会社)

ハイブリッドクラウド本部でオンプレミス製品の導入を行っています。

担当記事一覧