名前解決できないときの切り分け|hosts・DNSキャッシュ・内部DNSの優先順位
「サイトが表示されない」「社内サーバーにつながらない」——原因の切り分けで、最初に疑うべきものがあります。
名前解決(DNS)です。
次のようなエラーは、いずれも名前解決の失敗を示しています。
DNS_PROBE_FINISHED_NXDOMAIN(ブラウザ)Name or service not known(Linux)Could not resolve host(curl・Git)getaddrinfo failed(各種プログラム)
これらは「サーバーが落ちている」のではなく「サーバーの住所が分からない」状態です。原因も対処もまったく違います。
この記事では、名前解決がどの順番で行われるかと、企業ネットワークで起きやすいトラブルの切り分けを整理します。
名前解決に登場する3者
DNSの用語は、RFC 9499「DNS Terminology」で定義されています。実務で押さえるべきは3つです。
| 役割 | 定義(RFC 9499) | 実体 |
|---|---|---|
| スタブリゾルバ | 「A resolver that cannot perform all resolution itself.」(自力ではすべての解決を行えないリゾルバ) | あなたのPC |
| 再帰リゾルバ | 「a recursive resolver is expected to cache the answers it receives」(受け取った答えをキャッシュすることが期待される) | 社内DNSサーバー/プロバイダのDNS |
| 権威サーバー | 「A server that knows the content of a DNS zone from local knowledge」(自身の知識でゾーンの内容を知っているサーバー) | ドメイン管理者が用意したサーバー |
流れはこうです。
- PC(スタブリゾルバ)は自分では調べられないので、DNSサーバーに聞く
- 再帰リゾルバが代わりに調べる。ただし答えを持っていればキャッシュから返す
- 持っていなければ権威サーバーに問い合わせる
「自分では調べない」「途中でキャッシュが挟まる」——この2点が、トラブルの原因のほとんどを説明します。
名前解決には順番がある
PCが名前を調べるとき、いきなりDNSサーバーに聞くわけではありません。先に見る場所があります。
| 順 | 参照先 | 特徴 |
|---|---|---|
| 1 | hostsファイル | DNSより優先される。書いてあればDNSは見に行かない |
| 2 | OSのDNSキャッシュ | 過去に調べた結果を一定時間保持している |
| 3 | DNSサーバー(再帰リゾルバ) | ここでもキャッシュが効く |
| 4 | 権威サーバー | 本来の答え |
※この優先順位はOSの設定(Windowsのレジストリ、Linuxの nsswitch.conf など)に依存します。RFCで規定されているものではありません。
hostsファイルという伏兵
hostsファイルはDNSより優先されます。そのため、次のような事故が起きます。
- テスト用にhostsへ書いた設定を消し忘れたまま本番を見ていた
- サーバー移転でIPが変わったのに、hostsに古いIPが残っていた
- 自分だけつながらない/自分だけ古い画面が見えている
「自分の環境だけおかしい」ときは、まずhostsファイルを疑ってください。
| OS | 場所 |
|---|---|
| Windows | C:\Windows\System32\drivers\etc\hosts |
| macOS / Linux | /etc/hosts |
キャッシュが古い情報を返す
DNSの答えにはTTL(有効期間)が設定されており、その間はキャッシュが使われます。
そのためサーバー移転やDNS設定の変更後、すぐには反映されません。「切り替えたのに古いサーバーに繋がる」のは、たいていこれです。この性質は、ブルーグリーンデプロイでDNSを使って環境を切り替える場合にも影響します。
手元のキャッシュはコマンドで消せます。
ipconfig /flushdns (Windows)
ただし消せるのは自分のPCのキャッシュだけです。社内DNSサーバーやプロバイダ側のキャッシュは、TTLが切れるまで残ります。
企業ネットワーク特有の問題
内部DNSと外部DNS
多くの企業では、社内向けの名前(fileserver.example.local など)を解決するために社内にDNSサーバーを置いています。
ここで問題になるのが、PCがどちらのDNSを見ているかです。
| 状況 | 起きること |
|---|---|
| 社内DNSを見ている | 社内・社外とも解決できる(通常) |
| 外部DNSを見ている | 社内サーバーの名前だけ引けない |
| VPN接続時にDNSが切り替わらない | VPNは繋がったのに社内サーバーが見えない |
「VPNは接続できているのに社内システムにアクセスできない」は、DNSが原因であることが非常に多いトラブルです。
同じ名前が内と外で違うIPを指す
社内から見たときと社外から見たときで、同じホスト名が別のIPアドレスを返す構成もあります(スプリットDNS)。
この構成では、「どこから引いたか」で答えが変わります。切り分けのときは、必ずどのネットワークから実行したかを記録してください。
プロキシ環境では、そもそもPCが名前を引かない
見落とされやすい点です。プロキシ経由の通信では、名前解決をプロキシサーバー側が行うことがあります。
この場合、手元で nslookup が失敗しても、ブラウザでは表示できます(プロキシが解決しているため)。逆に、手元で引けてもプロキシ側で引けなければ繋がりません。
どの通信がプロキシを経由するかは、PACファイルで決まっている場合があります(PACファイルとは?企業ネットワークにおけるプロキシ自動設定の仕組み)。
切り分けの手順
「つながらない」と言われたとき、次の順で確認すると原因が絞れます。
| 順 | 確認すること | 分かること |
|---|---|---|
| 1 | エラーメッセージを読む | 名前解決の失敗か、接続の失敗か |
| 2 | nslookup ホスト名 を実行 |
名前が引けるか、どのDNSに聞いているか |
| 3 | hostsファイルを確認 | 手動設定が残っていないか |
| 4 | IPアドレスで直接アクセス | 繋がればDNSだけの問題 |
| 5 | 別の端末・別の回線で試す | 自分の環境だけの問題か |
エラーメッセージの読み分け
| エラー | 意味 |
|---|---|
| Could not resolve host Name or service not known |
名前解決の失敗。住所が分からない |
| Connection refused | 名前は引けた。相手が接続を拒否(サービス停止・ポート閉鎖) |
| Connection timed out | 名前は引けた。応答がない(ファイアウォール等) |
| SSL certificate problem | 接続はできている。証明書の問題(証明書チェーンとは?) |
「つながらない」の一言で片づけず、エラーメッセージを最後まで読む——これだけで切り分けの半分は終わります。
DNSはセキュリティにも関わる
名前解決は「どこに接続するか」を決める仕組みです。ここが書き換えられれば、正しいURLを入力しても偽サイトに誘導されます。
企業ネットワークでは、DNSの応答を偽装する攻撃への対策として、信頼できるDNSサーバーのみを使わせる設定が行われることがあります。
また当サイトで扱ったとおり、WPAD(プロキシ設定の自動検出)はDNSを使う方式があり、名前の衝突がセキュリティ上の問題になりえます(PACファイルの記事)。
「社内ネットワークだから安全」という前提を置かない考え方は ゼロトラストとは?VPNとの違いと中小企業での現実解 をご覧ください。
よくある質問
Q. nslookup で引けるのにブラウザで開けません
名前解決は成功しているため、原因は別です。プロキシ設定、ファイアウォール、証明書、サービス停止などを順に確認してください。
逆にnslookupで引けないのにブラウザで開ける場合は、プロキシが名前解決を代行している可能性が高くなります。
Q. DNSサーバーを変更してもよいですか?
企業のPCでは、勝手に変更しないでください。社内の名前が引けなくなり、業務システムにアクセスできなくなります。
公開DNSサービスに変更する案内を見かけますが、それは社内DNSを持たない環境の話です。
Q. 反映まで時間がかかると言われました
TTLの影響です。設定変更の前にTTLを短くしておくのが定石ですが、変更後にできることは多くありません。
手元のキャッシュを消しても、経路上の他のキャッシュは残ります。
Q. 社内サーバーの名前だけ引けません
参照しているDNSサーバーを確認してください。外部のDNSを見ている場合、社内の名前は解決できません。
VPN接続時に起きるなら、VPN接続後にDNS設定が社内向けに切り替わっているかを確認します。
Q. hostsファイルを書き換えれば解決しますか?
一時的な回避にはなりますが、恒久的な対処にはしないでください。
IPアドレスが変わったときに追従できず、その端末だけ繋がらないという状態を作ります。しかも原因究明が難しくなります。
参考にした主な調査・資料
- RFC 9499: DNS Terminology|IETF
- RFC 1034: Domain Names – Concepts and Facilities|IETF
- 安全なウェブサイトの作り方|独立行政法人 情報処理推進機構(IPA)
※RFCの引用は原文(英語)からの抜粋で、和訳は本記事によるものです。名前解決の優先順位や設定方法はOS・環境によって異なります。企業のPCで設定を変更する際は、情報システム部門にご確認ください。
まとめ
- 「つながらない」の多くは名前解決の失敗。サーバーが落ちているのとは別
- PCはスタブリゾルバ——RFC 9499が「自力ではすべての解決を行えない」と定義
- 間に入る再帰リゾルバはキャッシュを持つ。だから変更がすぐ反映されない
- hostsファイルはDNSより優先される。「自分だけおかしい」ときの筆頭容疑者
- VPNは繋がるのに社内システムが見えないのは、DNSが切り替わっていない可能性
- プロキシ環境では、名前解決をプロキシが行うことがある
- 切り分けは①エラーを読む ②nslookup ③hosts ④IP直打ち ⑤別端末の順
- 「Could not resolve」と「Connection refused」は別物。読み分ければ原因が絞れる
名前解決は、普段まったく意識しない仕組みです。しかし止まったときに最初に疑うべき場所でもあります。
エラーメッセージを最後まで読む——それだけで、問い合わせる相手が変わります。