【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サーバーが起動ができない時(アンダーバーは使用しない)の対応方法となります。


関連記事


コメントを残す

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

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

ABOUTこの記事をかいた人

blank

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