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.comdig example.com と dig @DNSサーバー example.com を分けると、クライアントの参照先設定の問題か、DNS サーバー自体の問題かを切り分けやすくなります。
named の状態確認
service named status
netstat -lunp | grep :53
netstat -lntp | grep :53
tail -f /var/log/messagesDNS は 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.zonesBIND のトラブルでは、文法エラーだけでなく、allow-query、allow-recursion、forwarders の指定が原因になることがあります。特定のクライアントだけ引けない場合は、許可範囲を疑います。
権威応答と再帰問い合わせを分ける
内部ゾーンを引く場合と、外部ドメインを再帰的に引く場合では、見るべき場所が違います。
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 トラブルでは、単に「名前解決できない」とまとめず、NXDOMAIN、SERVFAIL、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 で問い合わせ先と対象を明示するのが重要です。
関連する記事
- CentOS 6 サーバー管理ガイド
CentOS 6 系の記事を役割別に確認できるハブページです。 - CentOS 6 BIND 内部 DNS サーバー構築
BIND の基本構成を確認します。 - CentOS 6 ネットワーク設定
DNS 以前のネットワーク到達性を確認します。
参考書籍
DNS の名前解決、権威 DNS、キャッシュ DNS、ゾーン設計を体系的に確認したい場合の参考書籍です。
Amazon で見る
