手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 6 BIND 9.8.2 名前解決の失敗 – DNS トラブルの記録

CentOS 6 の BIND 9.8.2 環境で、名前解決が期待通りに動かなかった時の見方を確認します。この記事は、BIND を構築する手順ではなく、DNS が引けない時にどこを切り分けるかというトラブル記録として位置づけます。

DNS トラブルで最初に分けること

DNS が引けないと言っても、原因は一つではありません。クライアント側、DNS サーバー側、ゾーン定義、再帰問い合わせ、上位 DNS への到達性を分けて確認します。

  • クライアントが正しい DNS サーバーを参照しているか
  • DNS サーバーが UDP/TCP 53 で待ち受けているか
  • 対象ゾーンが定義されているか
  • 再帰問い合わせが許可されているか
  • 上位 DNS やフォワーダへ到達できるか

クライアント側の確認

cat /etc/resolv.conf
getent hosts example.com
dig example.com
dig @192.168.1.10 example.com

dig example.comdig @DNSサーバー example.com を分けると、クライアントの参照先設定の問題か、DNS サーバー自体の問題かを切り分けやすくなります。

named の状態確認

service named status
netstat -lunp | grep :53
netstat -lntp | grep :53
tail -f /var/log/messages

DNS は UDP 53 だけでなく、ゾーン転送や大きな応答で TCP 53 も関係します。片方だけを見て正常と判断しないようにします。

設定とゾーンの文法確認

named-checkconf /etc/named.conf
named-checkzone example.local /var/named/example.local.zone
grep -R "allow-recursion\|allow-query\|forwarders" /etc/named.conf /etc/named.rfc1912.zones

BIND のトラブルでは、文法エラーだけでなく、allow-queryallow-recursionforwarders の指定が原因になることがあります。特定のクライアントだけ引けない場合は、許可範囲を疑います。

権威応答と再帰問い合わせを分ける

内部ゾーンを引く場合と、外部ドメインを再帰的に引く場合では、見るべき場所が違います。

dig @192.168.1.10 web.example.local
dig @192.168.1.10 example.local SOA
dig @192.168.1.10 www.example.com
dig @192.168.1.10 . NS

内部ゾーンは引けるが外部ドメインが引けない場合、再帰問い合わせやフォワーダ、外部到達性の問題が疑われます。逆に外部は引けるが内部だけ引けない場合は、ゾーン定義やファイルの読み込みを確認します。

エラーごとに見る DNS トラブルの違い

DNS トラブルでは、単に「名前解決できない」とまとめず、NXDOMAINSERVFAIL、timeout、期待しない IP が返る、というように症状を分けると原因に近づきやすくなります。

  • NXDOMAIN: その名前が存在しない、または参照しているゾーンが違う可能性
  • SERVFAIL: DNS サーバー側の処理失敗、上位問い合わせ失敗、DNSSEC 関連などを疑う
  • timeout: DNS サーバーへ到達できない、UDP/TCP 53 が遮断されている可能性
  • 期待しない IP: hosts、キャッシュ、参照先 DNS、ゾーン内容のずれを疑う

検索でたどり着く人は、だいたい具体的なエラーを持っています。dig の結果を見て、どの種類の失敗なのかを先に分類すると、闇雲に named.conf を直すより早く切り分けられます。

dig @192.168.1.10 missing.example.local
dig @192.168.1.10 www.example.com
dig +tcp @192.168.1.10 www.example.com
dig @192.168.1.10 example.local SOA

権威 DNS とキャッシュ DNS を分ける

内部ゾーンを管理する権威 DNS と、外部ドメインを引くためのキャッシュ DNS は役割が違います。内部名だけ引けないのか、外部名だけ引けないのか、両方引けないのかで見る場所が変わります。

  • 内部ゾーンだけ失敗する場合は zone 定義とゾーンファイルを見る
  • 外部ドメインだけ失敗する場合は recursion、forwarders、外部到達性を見る
  • 特定クライアントだけ失敗する場合は allow-query / allow-recursion と参照先 DNS を見る

まとめ

CentOS 6 の BIND 9.8.2 で名前解決が失敗する場合、クライアント設定、named の待ち受け、ゾーン定義、再帰問い合わせ、上位 DNS への到達性を分けて確認します。DNS は症状が同じに見えやすいため、dig で問い合わせ先と対象を明示するのが重要です。

関連する記事

参考書籍

参考書籍
参考書籍
DNS がよくわかる教科書 第2版

DNS の名前解決、権威 DNS、キャッシュ DNS、ゾーン設計を体系的に確認したい場合の参考書籍です。

Amazon で見る
このリンクは Amazon アソシエイトリンクです。
CentOS 6 BIND 9.8.2 名前解決の失敗 – DNS トラブルの記録

コメントを残す

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

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

トップへ戻る