この記事は、 「ネットワーク中級編|構築・検証・障害切り分けを身につける」 の第22回です。
名前解決できない障害を、端末・通信経路・DNSサーバー・ゾーン/レコードに分解し、 コマンド結果を根拠に原因候補を絞り込む方法を学びます。
DNS障害の切り分け|名前解決できない原因と確認手順を図解
「Webサイトへ接続できない」「サーバー名では通信できない」という申告を受けたとき、 すぐにDNSサーバーの障害と決めつけてはいけません。 IPアドレスでの通信、端末のDNS設定、問い合わせ先、応答内容、レコードの正しさを順番に確認し、 名前解決のどの段階で問題が起きているかを切り分けます。
DNS障害で最も重要なのは、「名前解決できない」と「接続先サービスへ通信できない」を分けることです。
たとえば、サーバー名では接続できなくてもIPアドレスを直接指定すれば接続できる場合、 ルーティングやWebサーバーよりも、DNS設定・DNS応答・レコードを優先して確認できます。 反対に、IPアドレスでも接続できない場合は、DNSだけを調べ続けても解決しません。
この記事を読み終えるとできること
- DNS障害とアプリケーション障害を区別できる
- 端末が利用するDNSサーバーを確認できる
- nslookup・Resolve-DnsName・digの結果を読める
- NXDOMAIN・SERVFAIL・REFUSED・タイムアウトを区別できる
- パケットから問い合わせと応答の有無を確認できる
- 調査結果を根拠付きで報告できる
最初に確認すること
「IPアドレスでは通信できるが、名前では通信できない」なら、 DNSを含む名前解決の経路を優先して調べます。
DNS障害の調査を始める前に、対象サービスのIPアドレスが分かる場合は、 名前を使わずに通信できるかを確認します。
# 例:接続先IPアドレスへの到達性を確認
ping 192.0.2.20
# 例:HTTPSの待ち受け確認(Windows PowerShell)
Test-NetConnection 192.0.2.20 -Port 443
# 例:HTTPSの待ち受け確認(Linux)
curl -vk https://192.0.2.20/
IPアドレスを指定したHTTPS確認では、証明書の名前不一致が発生することがあります。
これはDNS障害とは別の問題です。また、仮想ホストやロードバランサーでは、 ホスト名を指定しないと目的のコンテンツが返らないことがあります。 「TCP接続できるか」と「アプリケーションが正常に動作するか」を分けて判断してください。
| 確認結果 | 優先して調べる範囲 |
|---|---|
| IPアドレスでも通信できない | 端末設定、VLAN、ルーティング、ACL、ファイアウォール、接続先サービス |
| IPアドレスでは通信できるが、名前では失敗する | DNSサーバー設定、DNS通信、キャッシュ、レコード、検索サフィックス |
| 名前は解決できるが、サービスへ接続できない | 返されたIPアドレスの正しさ、ポート、ファイアウォール、サービス状態 |
| 一部の端末・アプリだけ失敗する | 端末キャッシュ、hosts、VPN、ブラウザーのSecure DNS、アプリ独自キャッシュ |
DNSの正常性は「名前がIPアドレスへ変換されたか」だけでは判断できません。
変換されたIPアドレスが設計どおりか、TTLや参照先が適切か、 そのIPアドレスで実際にサービスへ到達できるかまで確認します。
DNS名前解決の流れ
端末が名前を解決するときは、端末のキャッシュだけで完結する場合もあれば、 再帰DNSサーバーが権威DNSサーバーへ問い合わせる場合もあります。 どの区間に障害があるかを考えるため、流れを分解しておきましょう。
DNS名前解決の基本経路
端末・アプリケーション
DNSサーバーの設定、検索サフィックス、hosts、OSキャッシュ、 ブラウザーやアプリ独自のキャッシュを確認します。
端末から再帰DNSまで
IP到達性、UDP/TCP 53、ACL、ファイアウォール、VPN経路、 送信元アドレスや戻り経路を確認します。
再帰DNSサーバー
サービス状態、待ち受け、再帰問い合わせの許可、 フォワーダー、キャッシュ、ログを確認します。
権威DNS・ゾーン
A/AAAA/CNAME/NSなどのレコード、ゾーンのロード状態、 委任、SOAシリアル、プライマリー・セカンダリー間の同期を確認します。
症状から原因候補を整理する
同じ「名前解決できない」という申告でも、実際の症状によって確認場所は異なります。 まず影響範囲と再現条件を整理してください。
1台だけ失敗する
端末のDNS設定、キャッシュ、hosts、VPN、検索サフィックス、 アプリ固有設定を優先します。
同一セグメント全体で失敗
DHCPオプション、VLAN/ACL、セグメント固有のDNS設定、 VRFやポリシールーティングを確認します。
社内名だけ失敗する
社内ゾーン、条件付きフォワーダー、検索サフィックス、 VPN経由のDNS設定を確認します。
外部名だけ失敗する
再帰問い合わせ、フォワーダー、インターネット到達性、 ルートヒント、上位DNSとの通信を確認します。
応答が遅い・断続的
複数DNSサーバーのうち一方だけ停止していないか、 パケットロス、タイムアウト、TCPフォールバックを確認します。
誤ったIPが返る
古いレコード、キャッシュ、分割DNS、hosts、ロードバランサー、 CDNや地理分散DNSの設計を確認します。
調査開始時に確認する情報
- 失敗する名前はFQDNか、短いホスト名か
- いつから発生し、変更作業や切り替えがなかったか
- 全端末か、一部端末か、特定セグメントだけか
- 社内名・外部名のどちらで失敗するか
- 毎回失敗するか、断続的か
- 利用しているDNSサーバーのIPアドレス
- 返されるエラーがNXDOMAIN、SERVFAIL、タイムアウトのどれか
- IPアドレスを直接指定した場合に通信できるか
DNS障害を切り分ける7ステップ
- 影響範囲と対象名を確定する 全端末か一部端末か、社内名か外部名か、FQDNか短い名前かを確認します。 「つながらない」という表現だけで調査を始めず、失敗する名前と時刻を記録します。
- IPアドレスでの到達性を確認する 接続先IPアドレスが分かる場合は、IPで通信できるか確認します。 IPでも失敗するなら、DNS以外のネットワーク・サービス障害を並行して調べます。
- 端末が利用するDNSサーバーを確認する DHCPで想定どおりのDNSサーバーが配布されているか、手動設定やVPNによって上書きされていないかを確認します。 複数のDNSサーバーがある場合は、すべて個別に問い合わせます。
- DNSサーバーまでの通信を確認する DNSサーバーのIP到達性、UDP/TCP 53の許可、ACL、ファイアウォール、 NAT、VRF、戻り経路を確認します。ping成功だけでDNS通信が正常とは判断しません。
- 問い合わせ先を指定して名前解決する 既定のDNSサーバーだけでなく、サーバーを明示して問い合わせます。 サーバーAでは失敗し、サーバーBでは成功するなら、端末全体よりサーバーA側を優先できます。
- 応答コードと回答内容を確認する タイムアウト、NXDOMAIN、SERVFAIL、REFUSED、NOERRORを区別します。 応答が返っていても、A/AAAA/CNAMEなどの内容が設計どおりか確認します。
- DNSサーバー・ゾーン・パケットを確認する サービス状態、ログ、ゾーンロード、レコード、フォワーダー、委任、 キャッシュを確認します。必要に応じてパケットを取得し、問い合わせと応答を時系列で追います。
DNS障害の基本フロー
実務では、確認コマンドと実行時刻を必ず残します。
DNSレコードやキャッシュはTTLによって時間とともに変化します。 「あとで同じコマンドを実行したら成功した」ということもあるため、 障害発生時の結果、問い合わせ先、応答コード、回答、TTLを記録してください。
Windowsでの確認方法
DNSサーバー設定を確認
ipconfig /all
Get-DnsClientServerAddress
DHCP有効/無効、DNSサーバー、接続固有のDNSサフィックス、 対象インターフェースを確認します。
名前解決を実行
nslookup app.example.local
Resolve-DnsName app.example.local
問い合わせ先、応答コード、A/AAAA/CNAME、 TTLなどを確認します。
DNSサーバーを指定
nslookup app.example.local 10.20.0.53
Resolve-DnsName app.example.local `
-Server 10.20.0.53
複数のDNSサーバーへ個別に問い合わせ、 応答差を比較します。
キャッシュを確認・削除
ipconfig /displaydns
ipconfig /flushdns
古い回答や否定応答がキャッシュされていないか確認します。 削除前の状態を記録してから実施するのが理想です。
Resolve-DnsNameの出力例
PS C:\> Resolve-DnsName app.example.local -Server 10.20.0.53
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
app.example.local A 300 Answer 10.20.30.20
この結果では、DNSサーバー 10.20.0.53 からAレコード
10.20.30.20 が返り、TTLは300秒です。
名前解決が成功しても、このIPアドレスが設計どおりかを確認してください。
タイムアウトの例
PS C:\> nslookup app.example.local 10.20.0.53
DNS request timed out.
timeout was 2 seconds.
*** Request to 10.20.0.53 timed-out
タイムアウトは「レコードが存在しない」という意味ではありません。 問い合わせがDNSサーバーへ届いていない、DNSサービスが応答していない、 応答が戻れない、途中で破棄されている、といった可能性があります。
Test-NetConnection -Port 53 が確認するのは主にTCP 53です。
一般的なDNS問い合わせではUDP 53も使われます。 TCP 53が成功してもUDP 53が通るとは限らず、逆も同様です。 最終判断では実際の名前解決結果やパケットキャプチャーを確認してください。
Linuxでの確認方法
リゾルバー設定を確認
resolvectl status
cat /etc/resolv.conf
systemd-resolvedを利用している環境では、 インターフェースごとのDNSサーバーや検索ドメインも確認します。
digで問い合わせ
dig app.example.local
dig @10.20.0.53 app.example.local A
SERVER、status、ANSWER SECTION、Query time、 flagsを確認します。
OSと同じ名前解決経路を確認
getent hosts app.example.local
resolvectl query app.example.local
getent は、/etc/nsswitch.conf に従い、
hostsやDNSを含むOSの名前解決結果を確認できます。
委任経路を確認
dig +trace www.example.com
dig NS example.com
公開DNSで委任や権威DNSを調べるときに利用します。 社内DNSや分割DNSでは、+traceの結果だけで判断しないでください。
digの正常応答例
$ dig @10.20.0.53 app.example.local A
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24118
;; flags: qr rd ra; QUERY: 1, ANSWER: 1
;; QUESTION SECTION:
;app.example.local. IN A
;; ANSWER SECTION:
app.example.local. 300 IN A 10.20.30.20
;; Query time: 3 msec
;; SERVER: 10.20.0.53#53(10.20.0.53)
確認するポイントは次のとおりです。
status: NOERRORになっているかANSWER: 1以上か- ANSWER SECTIONのレコード種別と値が正しいか
- 問い合わせ先が意図したDNSサーバーか
- Query timeが通常より極端に長くないか
- TTLが変更計画や切り替え設計と整合しているか
UDPとTCPを分けて確認する
# 通常の問い合わせ
dig @10.20.0.53 app.example.local A
# TCPを明示
dig +tcp @10.20.0.53 app.example.local A
通常の問い合わせはUDPで開始されることが多い一方、 大きな応答や切り詰められた応答ではTCPが必要になる場合があります。 UDPでは成功するがTCPでは失敗する、またはその逆であれば、 ファイアウォールやロードバランサーのポリシーを確認します。
ネットワーク機器での確認方法
ルーターやスイッチ自身がNTP、Syslog、AAA、ライセンスサーバーなどへ名前で接続する場合、 ネットワーク機器側のDNS設定も確認します。 次はCisco IOS系の代表例です。
show running-config | include ip name-server|ip domain
show hosts
ping app.example.local
traceroute 10.20.0.53
| 確認項目 | 見るポイント |
|---|---|
ip name-server |
想定したDNSサーバーが設定されているか |
ip domain name/検索リスト |
短いホスト名をFQDNへ補完する条件が正しいか |
show hosts |
キャッシュされた名前とIPアドレス、名前解決結果 |
| VRF・送信元インターフェース | 管理VRFなど、DNS問い合わせが想定経路から送信されるか |
| ACL・CoPP | 機器自身からのDNS通信やDNSサーバーからの応答を破棄していないか |
コマンドや挙動は、機種・OS・バージョンによって異なります。 本番環境では対象機器の公式ドキュメントと現行設定を確認してください。
DNS応答コードの見方
応答が返った場合は、レコードの有無だけでなく応答コードを確認します。 応答コードによって、次に調べる場所を大きく絞り込めます。
| 結果 | 意味 | 主な確認先 |
|---|---|---|
| NOERROR+回答あり | 問い合わせ処理は成功し、回答レコードが返った | 返されたIP・CNAME・TTLが正しいか、接続先サービス |
| NOERROR+回答なし | 名前は存在するが、要求した種別のレコードがない場合など | AとAAAAの違い、CNAME、ゾーン設定、要求レコード種別 |
| NXDOMAIN | 問い合わせた名前が存在しないと判断された | スペル、FQDN、検索サフィックス、レコード、ゾーン、否定キャッシュ |
| SERVFAIL | DNSサーバーが処理を完了できなかった | 上位問い合わせ、委任、DNSSEC、権威DNS、フォワーダー、ログ |
| REFUSED | DNSサーバーがポリシー上、問い合わせを拒否した | 再帰許可、ACL、ビュー、送信元、ゾーン転送ポリシー |
| タイムアウト | 規定時間内に有効な応答を受信できなかった | UDP/TCP 53、DNSサービス、負荷、戻り経路、ACL、FW、パケットロス |
NXDOMAINとタイムアウトはまったく異なります。
NXDOMAINはDNSサーバーから「存在しない」という応答を受けています。 タイムアウトは有効な応答を受け取れていません。 前者は名前・レコード・ゾーンを、後者は通信経路・サービス状態を優先して確認します。
NOERRORでも障害は残る
DNS問い合わせがNOERRORでも、古いIPアドレスや誤ったCNAMEが返れば、 利用者は正常なサービスへ接続できません。 次の3点を確認してください。
- 回答されたレコード種別は期待どおりか
- IPアドレスやCNAMEの値は設計・変更内容と一致しているか
- TTLが長すぎて旧情報が残っていないか
DNSサーバー側の確認項目
端末からの問い合わせがDNSサーバーへ届いている場合は、 サーバー内部と上流側の処理を確認します。
サービスと待ち受け
- DNSサービスが起動しているか
- 対象IPアドレスのUDP/TCP 53で待ち受けているか
- CPU・メモリー・ディスク・セッション数に異常がないか
問い合わせ許可
- 再帰問い合わせを許可する送信元範囲
- DNSビューやポリシーの適用条件
- サーバーOS・ネットワークFWの許可
ゾーンとレコード
- 対象ゾーンが正常にロードされているか
- A・AAAA・CNAME・NS・PTRなどが正しいか
- 重複・誤記・循環CNAMEがないか
上流問い合わせ
- フォワーダーへ到達できるか
- 委任先の権威DNSへ到達できるか
- ルートヒント、DNSSEC検証、時刻同期に問題がないか
冗長化と同期
- プライマリー・セカンダリーのゾーン転送
- SOAシリアルが一致しているか
- 片系だけ古い回答を返していないか
ログとキャッシュ
- 問い合わせログ・エラーログ
- SERVFAILや拒否の理由
- 古い正引き・否定応答キャッシュ
複数DNSサーバーを必ず個別確認する
# Windows
Resolve-DnsName app.example.local -Server 10.20.0.53
Resolve-DnsName app.example.local -Server 10.20.0.54
# Linux
dig @10.20.0.53 app.example.local A
dig @10.20.0.54 app.example.local A
端末にDNSサーバーが2台設定されていても、常に単純な順番で問い合わせるとは限りません。 OSや状態によって利用先や再試行の動作が異なるため、 「プライマリーは正常だからDNS全体も正常」と判断せず、各サーバーの回答を比較します。
片系だけ古いレコードを返す障害では、利用者によって成功・失敗が分かれ、 「たまに接続できない」という申告になりやすくなります。
パケットキャプチャーで確認する
コマンド結果だけでは、問い合わせがどこで失われているか判断できない場合があります。 そのときは端末側、DNSサーバー側、必要に応じて中継区間でパケットを取得します。
dns
DNSとして解析されたパケット全体
udp.port == 53
UDP 53の通信
tcp.port == 53
TCP 53の通信
dns.flags.response == 0
DNS問い合わせ
dns.flags.response == 1
DNS応答
dns.flags.rcode != 0
NOERROR以外の応答コード
| キャプチャー結果 | 考えられること |
|---|---|
| 端末から問い合わせが出ていない | hosts・キャッシュ・アプリ設定・Secure DNS・名前解決API・端末設定 |
| 問い合わせは出るが、応答がない | 経路、ACL、FW、DNSサービス、負荷、戻り経路 |
| DNSサーバーでは受信しているが応答しない | サービス内部、再帰制限、上流問い合わせ、処理負荷、ログ |
| DNSサーバーは応答しているが端末に届かない | 戻り経路、非対称経路、FWセッション、NAT、中継装置 |
| 応答は届くがアプリが失敗する | 誤った回答、アプリキャッシュ、プロキシ、TLS、接続先サービス |
| UDP応答が切り詰められTCPへ移行後に失敗 | TCP 53が許可されていない、FW・LBの設定不備 |
見るべきフィールド
- Transaction ID:問い合わせと応答が対応しているか
- Queries:問い合わせたFQDNとレコード種別
- Response code:NOERROR、NXDOMAIN、SERVFAILなど
- Answers:返されたA、AAAA、CNAMEなど
- Time to live:回答が何秒キャッシュされるか
- Truncated:UDP応答が切り詰められていないか
- Retransmission:同じ問い合わせを再送していないか
DNS障害切り分けでよくある失敗
失敗1.最初にキャッシュを削除する
キャッシュ削除で一時的に直っても、元のキャッシュ内容やTTLを失い、 原因分析が難しくなります。まず表示・記録し、その後に削除します。
失敗2.pingだけでDNSを判断する
pingはICMP応答、名前解決、接続先の応答制御が混ざります。 DNS確認にはnslookup、Resolve-DnsName、digなどを使います。
失敗3.既定DNSだけ調べる
複数DNSサーバーの片系だけ異常な場合、断続障害になります。 各DNSサーバーを明示して回答を比較します。
失敗4.UDP 53だけ許可する
DNSではTCP 53も必要です。大きな応答、ゾーン転送、 切り詰め後の再問い合わせなどを考慮します。
失敗5.8.8.8.8で直れば解決とする
公開DNSへの変更は社内名を解決できなくしたり、 セキュリティ・監査・分割DNSの設計を崩したりします。 原因確認なしの恒久対応にはしません。
失敗6.短い名前とFQDNを混同する
app が失敗し app.example.local が成功する場合、
レコードより検索サフィックスを疑います。
失敗7.ブラウザーだけで再現確認する
ブラウザーのSecure DNS、プロキシ、独自キャッシュにより、 OSのDNS設定と異なる経路を使うことがあります。
失敗8.NOERRORだけ見て正常とする
正常な応答コードでも、古いIPや誤ったCNAMEなら障害です。 回答内容と接続先の整合性まで確認します。
障害報告のまとめ方
DNS障害の報告では、「名前解決できませんでした」だけで終わらせず、 影響範囲、問い合わせ先、応答、原因候補を分けて記載します。
DNS障害調査報告テンプレート
発生日時:YYYY/MM/DD HH:MM頃
影響範囲:対象端末・セグメント・拠点・利用者数
対象FQDN:app.example.local
事象:FQDNでは接続不可。IPアドレス直接指定ではTCP/443接続成功
利用DNS:10.20.0.53、10.20.0.54
確認結果:10.20.0.53はタイムアウト、10.20.0.54はAレコード10.20.30.20を応答
パケット確認:10.20.0.53宛てUDP/53問い合わせ送信あり、応答なし
原因候補:10.20.0.53のDNSサービス、サーバー側FW、戻り経路のいずれか
暫定対応:利用DNSを10.20.0.54へ切り替え、名前解決を復旧
恒久対応:10.20.0.53側ログ・サービス状態・FWを確認し、冗長監視を追加
原因確定前は、事実と推測を分けて記載します。
「DNSサーバー停止」と断定せず、 「端末からの問い合わせ送信を確認したが応答を受信していない。 DNSサービス、サーバー側FW、戻り経路を確認中」と書くと、 根拠のある報告になります。
理解度チェック
次の5問に答えて、切り分けの考え方を確認してください。
問題1.サーバー名では接続できませんが、IPアドレスを直接指定すると接続できます。最初に優先する確認はどれですか。
- スイッチのSTPルートを変更する
- 端末のDNS設定と名前解決結果を確認する
- 接続先サーバーを再起動する
- デフォルトルートを削除する
解答を見る
IPアドレスで接続できるため、接続先への基本到達性はあります。 端末のDNS設定、問い合わせ先、応答内容を優先して確認します。
問題2.NXDOMAINが返りました。この結果として正しい説明はどれですか。
- DNSサーバーへ問い合わせが届いていない
- DNSサーバーから名前が存在しないという応答を受信した
- TCP 443が閉じている
- 必ずDNSサーバーが停止している
解答を見る
NXDOMAINはDNS応答です。スペル、FQDN、検索サフィックス、 レコード、ゾーン、否定キャッシュを確認します。
問題3.DNSサーバーが2台設定されています。片方だけ確認して正常だった場合、DNS全体を正常と判断できますか。
解答を見る
片系だけ停止、古いレコード、ゾーン同期不良があると断続障害になります。 各DNSサーバーを指定して同じ問い合わせを実行し、回答を比較します。
問題4.DNS問い合わせがタイムアウトしました。優先度が低い確認はどれですか。
- UDP/TCP 53の通信経路
- DNSサービスの状態
- 戻り経路やファイアウォール
- Aレコードに登録されたIPアドレスの値
解答を見る
タイムアウトでは有効なDNS応答を受け取れていません。 まず通信経路、サービス、戻り通信を確認します。 レコード値の確認は応答が得られた後の段階です。
問題5.digでstatusがNOERROR、ANSWER SECTIONにAレコードが表示されました。次に確認すべきことを2つ挙げてください。
解答を見る
- 返されたIPアドレスが設計どおりか
- そのIPアドレスの対象ポート・サービスへ接続できるか
- TTLやCNAMEが変更計画と整合しているか
上記のうち2つを挙げられれば正解です。
実践演習:片系DNSサーバーの障害を切り分ける
利用者から「社内業務システムへ時々接続できない」と連絡がありました。 次の情報から、原因候補と追加確認を考えてください。
演習構成
DNS: .53 / .54
確認結果
PS C:\> Test-NetConnection 10.20.30.20 -Port 443
TcpTestSucceeded : True
PS C:\> Resolve-DnsName app.example.local -Server 10.20.0.53
Resolve-DnsName : DNS name does not exist
PS C:\> Resolve-DnsName app.example.local -Server 10.20.0.54
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
app.example.local A 300 Answer 10.20.30.20
DNS-1のパケットキャプチャーでは、PC-Aからの問い合わせを受信し、 NXDOMAINを応答していました。 DNS-2はNOERRORで正しいAレコードを応答しています。
課題1.DNS-1までの通信経路は正常と判断できますか
課題1の解答を見る
少なくともDNS問い合わせと応答が往復できる経路は成立しています。
DNS-1が問い合わせを受信し、PC-AがNXDOMAINを受け取っているため、 単純なUDP/53遮断やDNSサーバー停止ではありません。
課題2.最も疑わしい原因は何ですか
課題2の解答を見る
DNS-1側のゾーンまたはレコード不整合が最も疑われます。
ゾーンが正しくロードされていない、セカンダリーへのゾーン転送が失敗している、 SOAシリアルが古い、DNSビューが異なる、古い否定キャッシュが残っている、 といった可能性があります。
課題3.追加で確認する項目を4つ挙げてください
課題3の解答例を見る
- DNS-1とDNS-2のSOAシリアル
- DNS-1で対象ゾーンが正常にロードされているか
- ゾーン転送・レプリケーションの状態とログ
- DNSビューや問い合わせ元ACLの差
- DNS-1の否定応答キャッシュ
- 両サーバーのA/CNAMEレコード内容
課題4.調査報告を書いてください
課題4の回答例を見る
PC-AからAPPサーバー10.20.30.20のTCP/443接続は成功しており、 接続先サービスへの到達性を確認しました。 DNS-1(10.20.0.53)はapp.example.localにNXDOMAINを返し、 DNS-2(10.20.0.54)は10.20.30.20を正常応答しています。
DNS-1までの問い合わせ・応答経路は成立しているため、 DNS-1側のゾーン/レコード不整合、同期不良、ビュー差、 否定キャッシュを原因候補とします。 暫定的にDNS-2を優先利用し、DNS-1のSOAシリアル、 ゾーンロード状態、同期ログを確認します。
自分の言葉で説明する課題
後輩から「名前解決できないとき、何から確認すればよいですか」と質問されました。 1分程度で説明してください。
説明例を見る
最初に、IPアドレスを直接指定した通信ができるかを確認し、 DNS障害とネットワーク・サービス障害を分けます。 次に端末が利用しているDNSサーバーを確認し、 そのサーバーを指定してnslookupやdigを実行します。 応答がなければUDP/TCP 53、DNSサービス、戻り経路を確認し、 応答があればNXDOMAINやSERVFAILなどのコードと、 返されたレコード内容を確認します。 複数のDNSサーバーがある場合は、各サーバーの回答を比較します。
まとめ
- 最初にIPアドレスで通信できるか確認し、DNS以外の障害と分ける
- 端末が実際に利用しているDNSサーバー、検索サフィックス、キャッシュを確認する
- DNSサーバーを明示して問い合わせ、複数サーバーの回答を比較する
- タイムアウト、NXDOMAIN、SERVFAIL、REFUSEDを区別する
- NOERRORでも、返されたIP・CNAME・TTLが正しいか確認する
- DNSではUDP 53とTCP 53の両方を考慮する
- パケットで問い合わせ・応答・応答コード・再送を確認する
- 報告では、事実・原因候補・暫定対応・追加確認を分ける
DNS障害の切り分けは、「名前解決できない」という現象を、 端末、通信経路、再帰DNS、権威DNS、レコード、接続先サービスに分解する作業です。
参考資料
- RFC 1034:Domain Names – Concepts and Facilities
- RFC 1035:Domain Names – Implementation and Specification
- RFC 2308:Negative Caching of DNS Queries
- RFC 7766:DNS Transport over TCP
- Microsoft Learn:Resolve-DnsName
コマンド、サービス名、ログの場所、DNSクライアントの挙動は、 OS・製品・バージョン・構成によって異なります。 本番環境では対象製品の公式ドキュメントと設計資料を確認してください。

コメント