【CentOS8】namedサービスが起動しないときのエラー解決方法

CentOS8でDNSサーバーを設定し、起動した際にサービスがうまく立ち上がらない場合があります。

以下は、DNSサーバーのステータス状態となります。

$ systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2020-11-06 07:23:59 EST; 1min 33s ago
  Process: 1628 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf ->

11月 06 07:23:59 DNS_linux.test.local bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:10: near 'dns_>
11月 06 07:23:59 DNS_linux.test.local bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:11: near 'dns_>
11月 06 07:23:59 DNS_linux.test.local bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:12: near 'ntp_>
11月 06 07:23:59 DNS_linux.test.local bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:13: near 'dhcp>
11月 06 07:23:59 DNS_linux.test.local bash[1628]: zone 0.168.192.in-addr.arpa/IN: loading from master file 196.>
11月 06 07:23:59 DNS_linux.test.local bash[1628]: zone 0.168.192.in-addr.arpa/IN: not loaded due to errors.
11月 06 07:23:59 DNS_linux.test.local bash[1628]: _default/0.168.192.in-addr.arpa/IN: bad name (check-names)
11月 06 07:23:59 DNS_linux.test.local systemd[1]: named.service: Control process exited, code=exited status=1
11月 06 07:23:59 DNS_linux.test.local systemd[1]: named.service: Failed with result 'exit-code'.
11月 06 07:23:59 DNS_linux.test.local systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).

ログメッセージでもDNSでエラーが発生していることが確認できます。

$ tail /var/log/messages
Nov  6 07:23:59 DNS_linux bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:10: near 'dns_linux.test.local.': bad name (check-names)
Nov  6 07:23:59 DNS_linux bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:11: near 'dns_linux.test.local.': bad name (check-names)
Nov  6 07:23:59 DNS_linux bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:12: near 'ntp_linux.test.local.': bad name (check-names)
Nov  6 07:23:59 DNS_linux bash[1628]: dns_rdata_fromtext: 0.168.192.in-addr.arpa.rev:13: near 'dhcp_linux.test.local.': bad name (check-names)
Nov  6 07:23:59 DNS_linux bash[1628]: zone 0.168.192.in-addr.arpa/IN: loading from master file 0.168.192.in-addr.arpa.rev failed: bad name (check-names)
Nov  6 07:23:59 DNS_linux bash[1628]: zone 0.168.192.in-addr.arpa/IN: not loaded due to errors.
Nov  6 07:23:59 DNS_linux bash[1628]: _default/0.168.192.in-addr.arpa/IN: bad name (check-names)
Nov  6 07:23:59 DNS_linux systemd[1]: named.service: Control process exited, code=exited status=1
Nov  6 07:23:59 DNS_linux systemd[1]: named.service: Failed with result 'exit-code'.
Nov  6 07:23:59 DNS_linux systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).

エラーの原因はゾーンファイル内のアンダーバー「_」

今回のエラーの原因は、ゾーンファイルのホスト名にアンダーバー「_」を使用したことです。
エラーが発生する原因はありますが、特にコードを間違っていない場合は、ホスト名の命名規則に違反している可能性が高いです。

アンダーバーは基本ゾーンファイルのホスト名に使用できないので注意しましょう。

$ cd /etc/named/

以下はエラーが発生した正引きゾーンファイルの状態です。
ホスト名にアンダーバーが記載されています。

正引きゾーンファイル

$ cat test.local
$TTL 86400
@                 IN      SOA dns_linux.test.local. root.test.local. (
                          2020110601 ; serial
                          3600       ; refresh 1hr
                          1800       ; retry 15min
                          604800     ; expire 1w
                          86400      ; min 24hr
)

                  IN      NS     dns_linux.test.local.
dns_linux  IN      A      10.180.196.198
ntp_linux  IN      A      10.180.196.199
dhcp_linux IN      A      10.180.196.197

逆引きゾーンファイル

$ cat 0.168.192.in-addr.arpa.rev

$TTL 86400
@                IN      SOA dns_linux.test.local. root.test.local. (
                         2020110601 ; serial
                         3600       ; refresh 1hr
                         1800       ; retry 15min
                         604800     ; expire 1w
                         86400      ; min 24hr
)

                 IN      NS     dns_linux.test.local.
198              IN      PTR    dns_linux.test.local.
199              IN      PTR    ntp_linux.test.local.
197              IN      PTR    dhcp_linux.test.local.

どちらもホスト名にアンダーバーが設定されているため、エラーが発生します。

ホスト名のアンダーバーを削除・修正後の確認

上記、ゾーンファイルのアンダーバーを修正し、再度「named-checkconf -z」を実施した結果が以下となります。

$  named-checkconf -z
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone test.local/IN: loaded serial 2020110601
zone 0.168.192.in-addr.arpa/IN: loaded serial 2020110601

この出力結果でエラーが発生していないことがわかります。
あとはサービスを正常に立ち上げることができます。

$ systemctl restart named

以上がDNSサーバーが起動ができない時(アンダーバーは使用しない)の対応方法となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!