BIND起動エラーの原因と対策|namedが起動しない時の確認ポイントを解説

BIND起動エラーの原因と対策

BIND起動エラーの原因と対策

BINDによるDNSサーバ構築を行っていると、多くの管理者が一度は経験するのが「namedが起動しない」というトラブルです。

DNSサーバは設定ファイルやゾーンファイルの記述ミスに厳しく、わずかな構文エラーでも起動に失敗します。

また、SELinuxやファイル権限、ゾーン転送設定なども原因になることがあります。

本記事では、BINDが起動しない場合に確認するべきポイントと、実際によく発生するエラー事例について解説します。

まず確認すること

最初にサービス状態を確認します。

# systemctl status named

正常な場合は以下のように表示されます。
active (running)

起動失敗している場合は詳細ログを確認します。

ログ確認の基本

# journalctl -xeu named

まずはこのコマンドを実行するのが基本です。

多くの場合、エラーメッセージに原因が表示されています。

最も多い原因は構文エラー

BIND運用で最も多いのが設定ファイルの記述ミスです。

例えば次のような例です。

allow-query { any }

セミコロンがありません。

正しくは次のようになります。

allow-query { any; };

named-checkconfを使う

設定ファイル確認には次を利用します。

# named-checkconf

正常なら何も表示されません

エラーがある場合は行番号付きで表示されます。

括弧の対応ミス

非常によくあるミスです。

options {
    recursion no;

閉じ括弧がありません。

ログには次のようなエラーが表示されます。

unexpected end of input

ゾーンファイルの記述ミス

named.confは正常でも、ゾーンファイルが原因で起動失敗することがあります。

例です。

www IN A

IPアドレスがありません。

ゾーンファイル確認方法

# named-checkzone example.com  /var/named/example.com.zone

ゾーンごとに確認できます。

末尾ドット忘れ

BIND初心者が最も遭遇するミスです。

誤りです。

ns1.example.com

正しくは以下です。

ns1.example.com.

意図しないFQDNが生成されることがあります。

ゾーンファイルが存在しない

named.confで指定したファイルが存在しないケースです。

file "example.com.zone";

実際のファイルが無い場合です。

/var/named/example.com.zone

権限エラー

ファイルは存在していても読み込み権限が無い場合があります。

確認します。

# ls -l /var/named

BINDが参照可能か確認します。

所有者確認

一般的な例です。

-rw-r----- root named

namedユーザーが読める必要があります。

SELinuxによる制限

Rocky Linuxでは頻繁に発生します。

確認します。

# getenforce

Enforcingの場合はSELinuxが有効です。

SELinuxログ確認

# ausearch -m avc

アクセス拒否が記録されている場合があります。

restoreconで修復

コンテキスト異常の場合です。

# restorecon -Rv /var/named

多くの問題が解決します。

ポート競合

53番ポートが既に利用されている場合です。

# ss -ltnup | grep :53

別サービスが使用していないか確認します。

IPv6設定エラー

IPv6関連の警告が発生する場合があります。

listen-on-v6 { any; };

環境によっては無効化することもあります。

ゾーン重複定義

同じゾーンを複数回定義しているケースです。

zone "example.com" {
};

zone "example.com" {
};

BINDは起動できません。

includeファイルの問題

include先の設定ファイルにエラーがある場合です。

include "/etc/named.rfc1912.zones";

読み込み先も確認する必要があります。

chroot環境特有の問題

bind-chroot利用時によくあります。

設定ファイルやゾーンファイルの配置場所を誤るケースです。

/var/named/chroot

配下の構成を確認します。

ゾーン転送設定ミス

セカンダリーDNS構築時に発生します。

ログ例です。

transfer denied

allow-transfer設定を確認します。

DNSSEC設定ミス

DNSSEC導入環境では署名ファイルの不整合が原因になることがあります。

※DNSSECの詳細は後続記事で解説予定です。

設定変更後の確認手順

実務では次の順番で確認します。


named-checkconf
↓
named-checkzone
↓
systemctl restart named
↓
systemctl status named

この流れを習慣化すると障害を減らせます。

よくあるエラーメッセージ

エラー原因
missing ';'セミコロン忘れ
unexpected token構文エラー
file not foundゾーンファイル不存在
permission denied権限不足
zone not loadedゾーンエラー

実務でよくある原因ランキング

  1. ゾーンファイル記述ミス
  2. named.conf構文エラー
  3. セミコロン忘れ
  4. シリアル番号ミス
  5. SELinux制限
  6. 権限エラー
  7. ゾーンファイル配置ミス

実務で覚えておきたいポイント

  • まずjournalctlを見る
  • named-checkconfを実行する
  • named-checkzoneを実行する
  • SELinuxを確認する
  • 権限と所有者を確認する
  • セミコロン忘れを疑う

まとめ

BIND起動エラーの多くは設定ファイルやゾーンファイルの記述ミスによって発生します。

特にnamed-checkconfとnamed-checkzoneは必須の確認コマンドであり、設定変更後は必ず実行するべきです。

また、SELinuxやファイル権限、chroot環境なども原因になるため、ログを確認しながら順序立てて調査することが重要です。

実務では「まずログを見る」という習慣を身につけることで、多くのBIND障害を短時間で解決できるようになります。