【実例で学ぶ】DNS関連トラブル集:BIND/namedでよくあるミスと解決策

雑記

【実例で学ぶ】DNS関連トラブル集:BIND/namedでよくあるミスと解決策

DNSサーバーの運用は、一見シンプルに見えて落とし穴が多い領域です。ゾーンファイルの構文ミス、権威サーバー間の同期不良、chroot環境でのパス問題など、経験者でも躓くポイントが多数存在します。

本記事では、実際に発生したDNS関連トラブルを7つのケースとしてまとめました。症状・原因・解決策を具体的に解説しているので、同様の問題が発生した際のトラブルシューティングガイドとしてご活用ください。

この記事で扱うトラブル

  • AレコードにドメインをにIPアドレスではなくドメイン名を指定
  • ゾーンファイル変更が反映されない
  • 権威サーバー間でゾーン同期が不完全
  • ゾーンファイルが見つからない(chroot環境)
  • named-checkzoneコマンドの誤用
  • namedが起動しているがクエリに応答しない
  • 権威サーバーに到達できない

1. AレコードにIPアドレスではなくドメイン名を指定

症状

namedの再起動時にサービスが停止する

原因

ゾーンファイルで以下のような誤った設定をしていた:

www.example.jp. IN A example.jp.

AレコードにはIPアドレスを指定する必要があるが、別のドメイン名を指定していたためBINDが構文エラーで停止。

解決策

1. AレコードにはIPアドレスを直接指定する

www.example.jp. IN A 192.0.2.1

2. 別のドメイン名を指すにはCNAMEレコードを使用する

www.example.jp. IN CNAME example.jp.

2. ゾーンファイル変更が反映されない

症状

ゾーンファイルを編集したがdigで確認するとNXDOMAIN

原因

  • ゾーンファイル編集後にnamedへの再読み込みを行っていなかった
  • SOAレコードのシリアル番号が増加していなかった

解決策

1. rndc reload でゾーンを再読み込み

rndc reload example.jp

2. 解決しない場合はnamedを再起動

systemctl restart named

3. シリアル番号を必ず増加させてから再読み込み

SOAレコードのシリアル番号(通常は YYYYMMDDNN 形式)を更新しないと、セカンダリサーバーがゾーン転送を行わない場合があります。


3. 権威サーバー間でゾーン同期が不完全

症状

約50%の確率でDNS解決に失敗する

原因

  • 複数の権威サーバーのうち、一部(ns1.example.jp)がREFUSEDを返していた
  • ゾーン転送が正しく行われておらず、データが同期されていなかった
  • TTLが1秒と極端に短く設定されていた

解決策

  • 全権威サーバーでゾーンファイルが存在し正しく設定されているか確認
  • ゾーン転送の設定(allow-transfer)を確認
  • TTLは最低300秒(通常は3600秒程度)に設定
# 各権威サーバーの応答を確認
dig @ns1.example.jp example.jp SOA
dig @ns2.example.jp example.jp SOA

4. ゾーンファイルが見つからない(chroot環境)

症状

named-chrootが起動失敗

エラーメッセージ

zone example.jp/IN: loading from master file example.jp failed: file not found

原因

chroot環境ではファイルパスが /var/named/chroot/ 配下になるが、ゾーンファイルが通常のパスに配置されていた。

解決策

  • chroot環境の場合、ゾーンファイルは /var/named/chroot/var/named/ に配置
  • 不要なゾーン定義はnamed.confから削除
# chroot環境でのファイル配置確認
ls -la /var/named/chroot/var/named/

5. named-checkzoneコマンドの誤用

症状

“ignoring out-of-zone data” エラーが大量に表示される

原因

コマンドの引数を間違えていた:

# 誤り(引数の順序が逆)
named-checkzone test.example.com example.com

解決策

正しい構文は「ゾーン名 ファイルパス」の順:

# 正しい使い方
named-checkzone example.com /var/named/example.com.zone

6. namedが起動しているがクエリに応答しない

症状

nslookup/digでタイムアウト

確認すべきポイント

1. named-chrootサービスのステータス確認

systemctl status named-chroot

2. ファイアウォールでUDP/TCP 53番ポートが開いているか

firewall-cmd --list-all
# または
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

3. named.confでlisten-onが正しく設定されているか

options {
    listen-on port 53 { any; };
    listen-on-v6 port 53 { any; };
    ...
};

4. ログファイルにエラーがないか

journalctl -u named-chroot -f
# または
tail -f /var/log/messages | grep named

7. 権威サーバーに到達できない

症状

SERVFAIL / No Reachable Authority

エラーメッセージ

EDE: 22 (No Reachable Authority)

確認すべきポイント

  • 権威サーバーのDNSサービスが起動しているか
  • レジストラに登録されているNSレコードのIPアドレスが正しいか
  • 権威サーバーへのネットワーク到達性
# ポート疎通確認
nc -zv ns1.example.jp 53

# 権威サーバーへ直接クエリ
dig @ns1.example.jp example.jp SOA
  • 対象ドメインのゾーン定義が権威サーバーに存在するか

トラブルシューティング早見表

症状 よくある原因 確認コマンド
named起動失敗 ゾーンファイル構文エラー named-checkconf
NXDOMAIN レコード未登録・未反映 rndc reload ゾーン名
SERVFAIL サーバー設定エラー journalctl -u named
タイムアウト ファイアウォール/サービス停止 nc -zv server 53
一部のみ失敗 権威サーバー間同期不良 dig @各NS ゾーン SOA

予防策:トラブルを未然に防ぐために

1. 変更前に構文チェック

# named.confの構文チェック
named-checkconf

# ゾーンファイルの構文チェック
named-checkzone example.jp /var/named/example.jp.zone

2. シリアル番号の管理

SOAレコードのシリアル番号は YYYYMMDDNN 形式(例: 2026011101)で管理し、変更のたびに必ず増加させる。

3. TTLの適切な設定

  • 通常運用: 3600〜86400秒
  • 変更予定がある場合: 事前に300秒程度に下げておく
  • 1秒などの極端に短いTTLは避ける

4. 監視の設定

# 定期的なDNS応答確認
dig +short example.jp @ns1.example.jp

まとめ

DNS関連のトラブルは、原因が特定できれば解決は比較的容易です。重要なのは、症状から原因を素早く絞り込むこと。この記事で紹介した7つのケースと早見表を参考に、効率的なトラブルシューティングを行ってください。

特に named-checkconfnamed-checkzone による事前チェックは習慣化することをお勧めします。構文エラーの多くは、これらのコマンドで未然に防げます。

コメント

タイトルとURLをコピーしました