DNSとは? 名前解決の仕組みと、名前解決できない時の確認方法
※この記事にはプロモーション(広告)が含まれます。広告表記の方針
Webサイトを開くとき、私たちは infravis.dev のようなドメイン名を入力します。でも、コンピュータが通信するのに必要なのはIPアドレスです。この2つを橋渡しするのが DNS。この記事では、DNSの役割・名前解決の流れ・キャッシュ・レコードの種類までを、図解でやさしく解説します。
DNSとは — インターネットの「電話帳」
DNS(Domain Name System)は、ドメイン名とIPアドレスを対応づける仕組みです。人間は「infravis.dev」のような覚えやすい名前を使い、コンピュータは「104.21.x.x」のような数字で通信します。その変換(名前解決)を担うのがDNSで、いわばインターネット全体の電話帳です。電話帳で「名前」から「電話番号」を引くように、DNSで「ドメイン名」から「IPアドレス」を引きます。
名前解決は「たらい回し」で行われる
世界中のドメインを1台のサーバーで管理するのは不可能です。そこでDNSは階層構造で役割を分担しています。名前解決は、あなたのブラウザがリゾルバ(ISPや 8.8.8.8 などの問い合わせ代行サーバー)に頼み、リゾルバが上から順に「たらい回し」で聞いていく形で進みます。
登場するサーバーの役割
| 名前 | 役割 |
|---|---|
| フルサービスリゾルバ | 利用者の代わりに各サーバーへ順に問い合わせ、答えをまとめて返す(ISPや 8.8.8.8 など) |
| ルートDNSサーバー | 「.dev / .com / .jp」などTLDの担当サーバーを案内する |
| TLD DNSサーバー | そのドメインの権威サーバーを案内する |
| 権威DNSサーバー | そのドメインの実際のIPアドレスを回答する(=正式な答え) |
キャッシュとTTL — 2回目は速い
毎回ルートからたどると時間がかかります。そこでリゾルバは、一度引いた結果を一定時間おぼえておきます(キャッシュ)。次に同じドメインを引くときは、たらい回しをせずにすぐ答えを返せます。この「おぼえておく時間」を決めるのが TTL(Time To Live)です。ブラウザやOSにも小さなキャッシュがあり、まずそこを確認してから外へ問い合わせます。
逆に、この仕組みがあるために「ドメインの設定を変えてもすぐ反映されない」ことがあります。世界中のリゾルバに古い情報が残っているためで、TTLの時間が過ぎるまで待つ必要があります(俗に「DNSの浸透待ち」と呼ばれます)。
🔎 名前解決の流れを動かして見るなら:当サイトのDNS名前解決の可視化で、ブラウザ→リゾルバ→ルート→TLD→権威サーバーへ問い合わせが進む様子を、1ステップずつ確認できます。質問と回答が色分けされて動くので、「たらい回し」のイメージがつかめます。
DNSレコードの種類(頻出)
DNSサーバーには、ドメインに関するさまざまな情報がレコードとして登録されています。代表的なものは次のとおりです。
| レコード | 役割 |
|---|---|
| A | ドメイン名 → IPv4アドレス |
| AAAA | ドメイン名 → IPv6アドレス |
| CNAME | ドメイン名 → 別のドメイン名(別名・エイリアス) |
| MX | そのドメイン宛メールの配送先サーバー |
| NS | そのドメインを管理する権威DNSサーバー |
| TXT | 任意の文字列(SPF・ドメイン認証などに利用) |
「AレコードはIPv4、AAAAはIPv6」「メールの配送先はMX」——この対応は基本情報でも実務でもよく問われます。
名前解決をコマンドで確かめる(nslookup・Resolve-DnsName)
DNSはコマンドで簡単に確認できます。Windowsならコマンドプロンプトで nslookup を使います。
nslookup www.example.com
サーバー: UnKnown
Address: 192.168.1.1
権限のない回答:
名前: www.example.com
Addresses: 2001:db8::10
203.0.113.10
| 表示 | 意味 |
|---|---|
| サーバー/Address | 実際に問い合わせたDNSサーバー。「UnKnown」は、そのDNSサーバー自身の名前が引けなかっただけで、問題ではないことが多い |
| 権限のない回答 | 権威サーバーではなく、キャッシュを持つDNSサーバーからの回答という意味。普段はこれで正常 |
| Addresses | 引けたIPアドレス。IPv6(AAAA)とIPv4(A)の両方が出ることがある |
| *** ○○ が ×× を見つけられません: Non-existent domain | その名前はDNSに存在しない(打ち間違い、登録がない) |
よく使う指定のしかたです。
:: DNSサーバーを指定して問い合わせる(社内DNSと外部DNSで結果を比べるときに便利)
nslookup www.example.com 8.8.8.8
:: レコードの種類を指定する(MXならメールの配送先)
nslookup -type=mx example.com
PowerShellなら Resolve-DnsName が使えます。結果が表になり、TTLも見られます。
Resolve-DnsName www.example.com -Type A
Resolve-DnsName www.example.com -Server 8.8.8.8
# hostsファイルとキャッシュを使わず、DNSサーバーだけに聞く
Resolve-DnsName www.example.com -DnsOnly
Linux・Macでは dig www.example.com が定番です。同じ名前を続けて引くと2回目は速く返る——これがキャッシュの効果です。
注意:nslookupはhostsファイルもPCのキャッシュも使わず、DNSサーバーに直接聞きます。そのため「nslookupでは引けるのに、pingやブラウザでは違うIPになる(またはその逆)」ことがあります。この場合は、hostsファイルやキャッシュを疑います(後述)。
名前解決できない時の切り分け
「サイトが開かない」「サーバーにつながらない」とき、名前の問題かどうかを順に確かめます。
| 順番 | 確認すること | コマンド |
|---|---|---|
| 1 | IPアドレスなら届くか(名前の問題かどうかを切り分ける) | ping 相手のIPアドレス(pingの見方) |
| 2 | PCがどのDNSサーバーを使っているか | ipconfig /all の「DNS サーバー」、または Get-DnsClientServerAddress |
| 3 | そのDNSサーバーで名前が引けるか | nslookup 名前 |
| 4 | 別のDNSサーバーなら引けるか | nslookup 名前 8.8.8.8(社内の名前なら、別の社内DNSサーバーを指定) |
| 5 | 古い情報がPCに残っていないか | ipconfig /displaydns で確認、ipconfig /flushdns で削除 |
| 6 | hostsファイルに書かれていないか | hostsファイルを開いて確認(後述) |
手順2で注意したいのは、IPv4とIPv6で別々のDNSサーバーが設定されていることがある点です。家庭用ルーターでは、IPv6側のDNSサーバー(ルーター自身)が優先されることがよくあります。nslookup の「サーバー」欄で、実際にどこへ問い合わせたかを確かめてください。
症状別のよくある原因
| 症状 | よくある原因 | 確認・対処 |
|---|---|---|
| どの名前も引けない(IPアドレスなら通る) | DNSサーバーに届かない、DNSサーバーの設定ミス | ipconfig /all のDNSサーバーにpingが通るか、設定が正しいか |
| 社内の名前だけ引けない | 社内のDNSサーバーを使っていない、VPNが切れている、DNSサフィックスの設定 | DNSサーバーが社内のものか確認。短い名前は「サーバー名.社内ドメイン」の完全な名前で試す |
| インターネットの名前だけ引けない | 社内DNSサーバーから外部への転送(フォワーダー)の不具合、プロキシ環境 | 外部DNSを指定した nslookup 名前 8.8.8.8 と比べる |
| DNSを変更したのに古いIPのまま | キャッシュ(TTLが切れるまで古い情報を使う) | PCは ipconfig /flushdns。途中のDNSサーバーのキャッシュはTTLが切れるのを待つ |
| 自分のPCだけ違うIPになる | hostsファイルに書かれている | hostsファイルを確認する |
| コマンドでは引けるのにブラウザだけ開けない | ブラウザのキャッシュ、プロキシ、ブラウザ独自のDNS設定(セキュアDNS) | 別のブラウザやシークレットウィンドウで試す。プロキシは Windowsのプロキシ3系統 を参照 |
PCのDNSキャッシュを確認・削除する
Windowsは、一度引いた名前をTTLの間だけ覚えています。DNSの登録を変えた直後や、引き先を切り替えたときは、PCに残った古い情報を消します。
:: いまPCが覚えている名前の一覧
ipconfig /displaydns
:: キャッシュを削除(管理者として実行)
ipconfig /flushdns
成功すると「DNS リゾルバー キャッシュは正常にフラッシュされました。」と表示されます。管理者として開いていないと「要求された操作には管理者特権が必要です。」と出るので、コマンドプロンプトを右クリックして「管理者として実行」で開き直してください。PowerShellなら Get-DnsClientCache(一覧)と Clear-DnsClientCache(削除)です。
hostsファイル — DNSより先に見られる「手書きの電話帳」
hostsファイルは、PCの中に置く名前とIPアドレスの対応表です。Windowsは名前を解決するとき、DNSサーバーに聞く前にhostsファイルを見ます。ここに書いた内容は、そのPCだけでDNSより優先されます。
| OS | 場所 |
|---|---|
| Windows | C:\Windows\System32\drivers\etc\hosts(拡張子なし) |
| Linux・Mac | /etc/hosts |
書き方は「IPアドレス、空白、名前」を1行に1つです。# から後ろはコメントになります。
# 検証用:本番切り替え前に、新しいサーバーへ向ける
203.0.113.20 www.example.com
- 編集には管理者権限が必要です。メモ帳を「管理者として実行」で開いてから、ファイルを開きます。
- サーバー移行の事前確認など、一時的に使ったら必ず元に戻すのが鉄則です。消し忘れると、そのPCだけ古いサーバーを見続けるトラブルになります。
- 前述のとおり、
nslookupはhostsファイルを見ません。hostsの効果はping 名前やResolve-DnsName 名前で確かめます。
基本情報技術者試験ではこう出る
「ドメイン名とIPアドレスを対応づけるのはどれか(→DNS)」「ルートDNS・権威DNSの役割」「再帰問い合わせと反復問い合わせの違い」などがよく問われます。レコードの種類(A・AAAA・MX・CNAME)を問う問題も頻出。名前解決は「階層をたどって、最後に権威サーバーが答える」という全体像を押さえるのが得点のコツです。
よくある質問
Q. 名前解決できない時、まず何を確認する?
A. IPアドレスでpingが通るかを確かめ、通るなら名前の問題です。次に ipconfig /all で使っているDNSサーバーを確認し、nslookup 名前 で引けるか、別のDNSサーバー(nslookup 名前 8.8.8.8)なら引けるかを比べます(切り分け手順)。
Q. DNSキャッシュをクリアするには?
A. Windowsでは、管理者として開いたコマンドプロンプトで ipconfig /flushdns を実行します。PowerShellなら Clear-DnsClientCache です。
Q. hostsファイルはどこにある?
A. Windowsは C:\Windows\System32\drivers\etc\hosts、Linux・Macは /etc/hosts です。編集には管理者権限が必要です。
Q. 8.8.8.8 とは何ですか?
A. Googleが提供するパブリックDNS(フルサービスリゾルバ)のIPアドレスです。プロバイダのDNSの代わりに使えて、高速・安定していることで知られます。1.1.1.1(Cloudflare)も同様のサービスです。
Q. DNSが使えないとどうなりますか?
A. ドメイン名からIPアドレスを引けなくなり、「サイトにアクセスできない」状態になります。IPアドレスを直接入力すれば通信自体は可能なことが多く、これは「DNSだけが不調」なのか「回線全体が不調」なのかの切り分けに使えます。
Q. DNSでセキュリティは大丈夫?
A. 従来のDNSは通信が平文で、なりすまし(DNSキャッシュポイズニング)のリスクがありました。近年は通信を暗号化する DoH(DNS over HTTPS) や DoT(DNS over TLS)、応答の正当性を検証する DNSSEC が普及しつつあります。
まとめ
DNSは「ドメイン名 ↔ IPアドレス」を変換するインターネットの電話帳。名前解決はリゾルバがルート→TLD→権威と階層をたどって答えを得る仕組みで、キャッシュ(TTL)で2回目以降を高速化しています。レコードの種類(A・AAAA・MX・CNAME)も合わせて押さえれば、試験も実務もカバーできます。
関連ページ: DNSの可視化 / IPアドレスの仕組み / グローバルIP確認 / OSI参照モデル / 記事一覧