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 アドレスやネットワークをグループ化し、そのグループに対してアクセス権を設定します。
- アクセス制御リストを定義し、特定の IP アドレスやネットワークに対するアクセス権を制御します。ACL は、後のセクションで使用されることが多いです。
- Zone セクション
- DNS ゾーンの定義を行うセクションです。プライマリ、セカンダリ、フォワードゾーンなどを定義します。
- type: ゾーンの種類を指定します。master(プライマリ)、slave(セカンダリ)、forward などがあります。
- file: ゾーンデータが保存されているファイルを指定します。
- allow-transfer: ゾーン転送を許可するサーバのリストを指定します。
- DNS ゾーンの定義を行うセクションです。プライマリ、セカンダリ、フォワードゾーンなどを定義します。
下記コマンドで 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 ファイルの設定でユーザーの認証や通信の暗号化を行っていません。必要に応じてご検討ください。