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サーバーが起動ができない時(アンダーバーは使用しない)の対応方法となります。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す