はじめに
クローズド(インターネット非接続) 検証環境で、ホスト名による通信を可能にするため、RHELサーバーで BINDを用いてDNSサーバーを構築しました。その際の設定手順と確認方法の記録です。
動画
当記事のご参考動画です。音声動画で理解の一助にお役立てください。
環境
ppc64le アーキテクチャ RHEL 8.10 を使用しています。
# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.10 (Ootpa)"
(省略)
# uname -a
Linux rhel810-mtest 4.18.0-553.el8_10.ppc64le #1 SMP Fri May 10 14:40:31 EDT 2024 ppc64le ppc64le ppc64le GNU/Linux
- 192.18.10.251 : DNS サーバー自身(ns1.test.com)
- 192.18.81.21 : testvm1.test.com
- 192.18.81.22 : testvm2.test.com
- 今回実装したいDNS設定のイメージ図
BINDのインストール
前提として DNF リポジトリは RHEL Base と AppStream を設定済です。
# mkdir -p /media/rhel810dvd/
# mkdir -p /media/rhel810-sup-dvd/
# mount -t iso9660 -o loop /work/iso/rhel-8.10-ppc64le-dvd /media/rhel810dvd/
# mount -t iso9660 -o loop /work/iso/supp-supplementary-8.10-rhel-8-ppc64le-dvd.iso /media/rhel810-sup-dvd/
/etc/dnf/dnf.conf 設定 (クリックで展開)
[RHEL-BaseOS]
name=RHEL810_BaseOS
baseurl=file:///media/rhel810dvd/BaseOS/
enabled=1
gpgcheck=0
gpgkey=file:///media/rhel810dvd/RPM-GPG-KEY-redhat-release
[RHEL-AppStream]
name=RHEL810_AppStream
baseurl=file:///media/rhel810dvd/AppStream/
enabled=1
gpgcheck=0
gpgkey=file:///media/rhel810dvd/RPM-GPG-KEY-redhat-release
[RHEL-Supplement]
name=RHEL_Supplement
baseurl=file:///media/rhel810-sup-dvd/
enabled=1
gpgcheck=0
gpgkey=file:///media/rhel810-sup-dvd/RPM-GPG-KEY-redhat-release
- DNSサーバー本体である bind と動作確認ツール(digコマンド等)を含む bind-utils をインストールします。
# dnf install bind bind-utils -y
実行ログ (クリックで展開)
# dnf install bind bind-utils -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Last metadata expiration check: 0:03:08 ago on Fri 30 Jan 2026 07:14:35 PM EST.
Package bind-utils-32:9.11.36-13.el8.ppc64le is already installed.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
bind ppc64le 32:9.11.36-13.el8 RHEL-AppStream 2.1 M
Transaction Summary
================================================================================
Install 1 Package
Total size: 2.1 M
Installed size: 5.0 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: bind-32:9.11.36-13.el8.ppc64le 1/1
Installing : bind-32:9.11.36-13.el8.ppc64le 1/1
Running scriptlet: bind-32:9.11.36-13.el8.ppc64le 1/1
Verifying : bind-32:9.11.36-13.el8.ppc64le 1/1
Installed products updated.
Installed:
bind-32:9.11.36-13.el8.ppc64le
Complete!
正引き(ホスト名 → IP)の設定
- ゾーンの定義
/etc/named.conf を編集し、test.com というドメインをこのサーバーが管理するように定義を追加します。
# 以下の内容を追記
#===add===
zone "test.com" IN {
type master;
file "test.com.db";
allow-update { none; };
};
- ゾーンデータベースファイルの作成
/var/named/ 配下に、具体的なホスト名とIPアドレスの紐付けを記載するファイル (/var/named/test.com.db ) を作成します。
IPアドレスとホスト名を紐づける実体ファイル を作成
$TTL 1D
@ IN SOA ns1.test.com. root.test.com. (
2026013101 ; シリアル番号
1D ; リフレッシュ
1H ; リトライ
1W ; エクスパイア
3H ) ; 最小TTL
IN NS ns1.test.com.
ns1 IN A 192.18.10.251 ; DNSサーバー自身のIP
testvm1 IN A 192.18.81.21
testvm2 IN A 192.18.81.22
-
パーミッション確認と設定
-
所有権をBIND実行ユーザーに変更
# chown named:named /var/named/test.com.db
- named.conf の構文チェック(何も表示されなければOK)
# named-checkconf /etc/named.conf
# echo $?
0
- ゾーンファイルの構文チェック
# named-checkzone test.com /var/named/test.com.db
zone test.com/IN: loaded serial 2026013101
OK
# echo $?
0
- named サービス再起動
# systemctl restart named
*稼働確認
testvm1.test.com の確認
# dig @localhost testvm1.test.com
; <<>> DiG 9.11.36-RedHat-9.11.36-13.el8 <<>> @localhost testvm1.test.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14952
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b6559a4559dde788e87264d1697d4c2d425ee5a5f1001f41 (good)
;; QUESTION SECTION:
;testvm1.test.com. IN A
;; ANSWER SECTION:
testvm1.test.com. 86400 IN A 192.18.81.21
;; AUTHORITY SECTION:
test.com. 86400 IN NS ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 86400 IN A 192.18.10.251
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Jan 30 19:26:21 EST 2026
;; MSG SIZE rcvd: 123
testvm2.test.com の確認
# dig @localhost testvm2.test.com
; <<>> DiG 9.11.36-RedHat-9.11.36-13.el8 <<>> @localhost testvm2.test.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53376
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: c8fab7a532d9804edf845156697d4c5e43c506bee7326731 (good)
;; QUESTION SECTION:
;testvm2.test.com. IN A
;; ANSWER SECTION:
testvm2.test.com. 86400 IN A 192.18.81.22
;; AUTHORITY SECTION:
test.com. 86400 IN NS ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 86400 IN A 192.18.10.251
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Jan 30 19:27:10 EST 2026
;; MSG SIZE rcvd: 123
逆引き(IP → ホスト名)の設定
-
/etc/named.confに、IPアドレスからホスト名を引くための設定を追加します。
#===add2===
zone "81.18.192.in-addr.arpa" IN {
type master;
file "192.18.81.db";
allow-update { none; };
};
- 逆引き用データベースファイル (
/var/named/192.18.81.db) の作成
IPアドレスの末尾(第4オクテット)とホスト名の対応を記述します。
※ホスト名の末尾には . (ドット) が必須です。
$TTL 1D
@ IN SOA ns1.test.com. root.test.com. (
2026013101 ; シリアル
1D ; リフレッシュ
1H ; リトライ
1W ; エクスパイア
3H ) ; 最小TTL
IN NS ns1.test.com.
21 IN PTR testvm1.test.com.
22 IN PTR testvm2.test.com.
※ホスト名の末尾に . (ドット) を忘れないように注意
- 所有権の変更とパーミッション設定
# chown named:named /var/named/192.18.81.db
- ゾーンファイルの構文チェック
# named-checkzone 81.18.192.in-addr.arpa /var/named/192.18.81.db
zone 81.18.192.in-addr.arpa/IN: loaded serial 2026013101
OK
- named サービス再起動
# systemctl reload named
- 稼働確認
# dig @localhost -x 192.18.81.21
; <<>> DiG 9.11.36-RedHat-9.11.36-13.el8 <<>> @localhost -x 192.18.81.21
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3152
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 0310dea05352ca8f7bc98b52697d4e92882a57c21f100ffb (good)
;; QUESTION SECTION:
;21.81.18.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
21.81.18.192.in-addr.arpa. 86400 IN PTR testvm1.test.com.
;; AUTHORITY SECTION:
81.18.192.in-addr.arpa. 86400 IN NS ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 86400 IN A 192.18.10.251
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Jan 30 19:36:34 EST 2026
;; MSG SIZE rcvd: 146
# dig @localhost -x 192.18.81.22
; <<>> DiG 9.11.36-RedHat-9.11.36-13.el8 <<>> @localhost -x 192.18.81.22
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17175
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ef1b330575ec3811a820b4f7697d4f050db16370ecd4158a (good)
;; QUESTION SECTION:
;22.81.18.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
22.81.18.192.in-addr.arpa. 86400 IN PTR testvm2.test.com.
;; AUTHORITY SECTION:
81.18.192.in-addr.arpa. 86400 IN NS ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com. 86400 IN A 192.18.10.251
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Jan 30 19:38:29 EST 2026
;; MSG SIZE rcvd: 146
ANSWER SECTION に testvm1.test.com と testvm2.test.com が表示され、正しく名前解決できていることが確認できました。
外部クライアントからのアクセス許可
- /etc/named.conf 修正
デフォルトでは localhost からのクエリしか許可されていないため、/etc/named.conf の options セクションで listen-on と allow-queryを変更します。(IPv4のみ)
options {
listen-on port 53 { any; }; # 127.0.0.1 から any(全インターフェース)に変更
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; 192.18.0.0/16; }; #<= 問い合わせを許可するネットワーク範囲を指定
- OSのファイアウォール(firewalld)でDNS通信を許可します。
# firewall-cmd --add-service=dns --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-services
cockpit dhcpv6-client dns rsct-ctrmc ssh
稼働確認
他のサーバーで DNS サーバーとして設定して名前解決できるかを確認します。
pvcroot@localhost:~> cat /etc/resolv.conf
options single-request-reopen
nameserver 192.18.10.251
pvcroot@localhost:~> nslookup 192.18.81.21
21.81.18.192.in-addr.arpa name = testvm1.test.com.
pvcroot@localhost:~> nslookup 192.18.81.22
22.81.18.192.in-addr.arpa name = testvm2.test.com.
nslookup で無事に名前解決ができていました。
tips
SELinux の影響で named サービスがファイルを読み込めず起動に失敗することがあります。 もし起動エラーが出た場合は、以下のコマンドでコンテキストを修正してご確認ください。
# restorecon -v /var/named/*.db
おわりに
別のサーバーの設定で DNS サーバーによる名前解決の設定が必要となり、突貫で DNS サーバーの設定を行いました。無事動作して一安心です。
ご参考になれば幸いです。
以上です。