DNS障害の切り分け|名前解決できない原因と確認手順を図解

ネットワーク中級編 22/全50記事

この記事は、 「ネットワーク中級編|構築・検証・障害切り分けを身につける」 の第22回です。

名前解決できない障害を、端末・通信経路・DNSサーバー・ゾーン/レコードに分解し、 コマンド結果を根拠に原因候補を絞り込む方法を学びます。

DNS障害の切り分け|名前解決できない原因と確認手順を図解

「Webサイトへ接続できない」「サーバー名では通信できない」という申告を受けたとき、 すぐにDNSサーバーの障害と決めつけてはいけません。 IPアドレスでの通信、端末のDNS設定、問い合わせ先、応答内容、レコードの正しさを順番に確認し、 名前解決のどの段階で問題が起きているかを切り分けます。

対象レベル Level 2・中級
想定読了時間 約25分
身につく成果 DNS障害を根拠付きで切り分けられる
前提知識 DNS・IP・ルーティングの基礎
演習環境 Windows/Linux

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名前解決の基本経路

💻 端末・アプリ 名前解決を要求
🧠 ローカルキャッシュ hostsや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ステップ

  1. 影響範囲と対象名を確定する 全端末か一部端末か、社内名か外部名か、FQDNか短い名前かを確認します。 「つながらない」という表現だけで調査を始めず、失敗する名前と時刻を記録します。
  2. IPアドレスでの到達性を確認する 接続先IPアドレスが分かる場合は、IPで通信できるか確認します。 IPでも失敗するなら、DNS以外のネットワーク・サービス障害を並行して調べます。
  3. 端末が利用するDNSサーバーを確認する DHCPで想定どおりのDNSサーバーが配布されているか、手動設定やVPNによって上書きされていないかを確認します。 複数のDNSサーバーがある場合は、すべて個別に問い合わせます。
  4. DNSサーバーまでの通信を確認する DNSサーバーのIP到達性、UDP/TCP 53の許可、ACL、ファイアウォール、 NAT、VRF、戻り経路を確認します。ping成功だけでDNS通信が正常とは判断しません。
  5. 問い合わせ先を指定して名前解決する 既定のDNSサーバーだけでなく、サーバーを明示して問い合わせます。 サーバーAでは失敗し、サーバーBでは成功するなら、端末全体よりサーバーA側を優先できます。
  6. 応答コードと回答内容を確認する タイムアウト、NXDOMAIN、SERVFAIL、REFUSED、NOERRORを区別します。 応答が返っていても、A/AAAA/CNAMEなどの内容が設計どおりか確認します。
  7. DNSサーバー・ゾーン・パケットを確認する サービス状態、ログ、ゾーンロード、レコード、フォワーダー、委任、 キャッシュを確認します。必要に応じてパケットを取得し、問い合わせと応答を時系列で追います。

DNS障害の基本フロー

IPアドレスで接続できるか
いいえ
DNS以外の経路・ACL・サービスも調査
想定したDNSサーバーを使っているか
いいえ
DHCP・手動設定・VPN設定を修正
DNS問い合わせに応答があるか
いいえ
UDP/TCP 53・サービス・戻り経路を確認
応答コードと回答は正しいか
いいえ
ゾーン・レコード・委任・フォワーダーを確認
正しいIPへ接続できるか
はい
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アドレスを直接指定すると接続できます。最初に優先する確認はどれですか。

  1. スイッチのSTPルートを変更する
  2. 端末のDNS設定と名前解決結果を確認する
  3. 接続先サーバーを再起動する
  4. デフォルトルートを削除する
解答を見る
正解:B

IPアドレスで接続できるため、接続先への基本到達性はあります。 端末のDNS設定、問い合わせ先、応答内容を優先して確認します。

問題2.NXDOMAINが返りました。この結果として正しい説明はどれですか。

  1. DNSサーバーへ問い合わせが届いていない
  2. DNSサーバーから名前が存在しないという応答を受信した
  3. TCP 443が閉じている
  4. 必ずDNSサーバーが停止している
解答を見る
正解:B

NXDOMAINはDNS応答です。スペル、FQDN、検索サフィックス、 レコード、ゾーン、否定キャッシュを確認します。

問題3.DNSサーバーが2台設定されています。片方だけ確認して正常だった場合、DNS全体を正常と判断できますか。

解答を見る
正解:判断できません。

片系だけ停止、古いレコード、ゾーン同期不良があると断続障害になります。 各DNSサーバーを指定して同じ問い合わせを実行し、回答を比較します。

問題4.DNS問い合わせがタイムアウトしました。優先度が低い確認はどれですか。

  1. UDP/TCP 53の通信経路
  2. DNSサービスの状態
  3. 戻り経路やファイアウォール
  4. Aレコードに登録されたIPアドレスの値
解答を見る
正解:D

タイムアウトでは有効なDNS応答を受け取れていません。 まず通信経路、サービス、戻り通信を確認します。 レコード値の確認は応答が得られた後の段階です。

問題5.digでstatusがNOERROR、ANSWER SECTIONにAレコードが表示されました。次に確認すべきことを2つ挙げてください。

解答を見る
  • 返されたIPアドレスが設計どおりか
  • そのIPアドレスの対象ポート・サービスへ接続できるか
  • TTLやCNAMEが変更計画と整合しているか

上記のうち2つを挙げられれば正解です。

実践演習:片系DNSサーバーの障害を切り分ける

利用者から「社内業務システムへ時々接続できない」と連絡がありました。 次の情報から、原因候補と追加確認を考えてください。

演習構成

💻 PC-A 10.20.10.50
DNS: .53 / .54
🗄️ DNS-1 10.20.0.53
🗄️ DNS-2 10.20.0.54
🖥️ APP 10.20.30.20:443

確認結果

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.最も疑わしい原因は何ですか

DNS-1とDNS-2の回答差から考えてください。
課題2の解答を見る

DNS-1側のゾーンまたはレコード不整合が最も疑われます。

ゾーンが正しくロードされていない、セカンダリーへのゾーン転送が失敗している、 SOAシリアルが古い、DNSビューが異なる、古い否定キャッシュが残っている、 といった可能性があります。

課題3.追加で確認する項目を4つ挙げてください

例:DNS-1とDNS-2のSOAシリアルを比較する
課題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、レコード、接続先サービスに分解する作業です。

次の記事:NAT障害の切り分け

今回は、DNS障害を端末設定、DNS通信、応答コード、ゾーン/レコードに分けて調べる方法を学びました。

次の記事では、内部から外部へ通信できない、変換アドレスが想定と違う、 戻り通信が成立しないといったNAT障害を、 変換前後のアドレス、ルーティング、ACL、セッションテーブルから切り分けます。

参考資料

コマンド、サービス名、ログの場所、DNSクライアントの挙動は、 OS・製品・バージョン・構成によって異なります。 本番環境では対象製品の公式ドキュメントと設計資料を確認してください。

ネットワーク中級編 22/全50記事

中級編では、スイッチング、ルーティング、ネットワークサービス、 セキュリティ、パケット解析、障害切り分けを、 設定・確認・報告まで含めて学びます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次