こんにちは!NOC(ネットワークオペレーションセンター)で、日夜数々のネットワーク障害やインフラのトラブルと格闘しているシニアエンジニアです。
皆さんは、ブラウザのURL欄に「 https://example.com 」と入力してエンターキーを押したとき、目にも留まらぬ速さでお目当てのウェブサイトが表示されるのを「当たり前」だと思っていませんか?
でも、ちょっと待ってください。私たちのパソコンは、実は「 example.com 」という人間向けの分かりやすい名前(ドメイン名)のままだと、どこに通信していいのか全く分からないんです。インターネットの世界で通信相手を特定するには、「 93.184.216.34 」といった数字の住所(IPアドレス)がどうしても必要になります。
この「人間向けのドメイン名」を「コンピュータ向けのIPアドレス」に翻訳してくれる、いわばインターネット全体の「電話帳」の役割を果たしているのが DNS(ドメインネームシステム) ですよね。
ネットワークの現場にいると、「あれ? さっき設定を変えたのに、新しいサーバーに繋がらず、古いサイトが表示されるぞ?」といったDNSにまつわるトラブルに本当によく遭遇します。そんなとき、私たちの相棒になってくれるのが dig (ディグ)というコマンドです。
今回は、この dig コマンドの真骨頂である詳細なレコード照会と、裏側の仕組みを丸裸にする +trace オプションについて、身近な例えを交えながら一歩ずつ優しく紐解いていきましょう!
—
1. DNSの名前解決は「壮大な手紙の配達リレー」
まず、DNSが裏側でどうやって目的のIPアドレスを探し出しているのか、現実世界の「手紙の配達」に例えてイメージしてみましょう。
あなたが東京から、遠く離れたアメリカの小さな町に住むお友達に手紙を出したいとします。でも、あなたは相手の正確な住所を知りません。知っているのは名前だけです。
1. 身近な郵便局(キャッシュDNSサーバー / プロバイダやGoogleの8.8.8.8など)
まずは近所の郵便局に手紙を出します。「この人の住所を教えて!」と。郵便局員さんは、最近調べたばかりの名前であれば、自分の手元にあるメモ(キャッシュ)からサッと住所を教えてくれます。これが普段私たちがよく使う名前解決です。
2. 世界を統括する総本山(ルートサーバー)
もし郵便局員さんも住所を知らなかったらどうでしょう? 郵便局員さんは、「よし、世界の本部に聞きに行こう!」と旅立ちます。最初に訪れるのは、世界中に散らばる「ルート(根っこ)サーバー」です。ルートサーバーは、「 .com の手紙なら、あそこの .com 担当の案内所にいきなさい」と教えてくれます。
3. 担当の案内所(TLDサーバー)
次に .com の担当案内所に行くと、「なるほど、 example.com だね。それなら、そのドメインを管理している専門の会社(権威DNSサーバー)を知っているよ。あそこに行きなさい」とバトンを渡されます。
4. 最後の砦(権威DNSサーバー)
最後に、そのドメインの本当の持ち主である「権威DNSサーバー」にたどり着きます。ここには、正確な「IPアドレス」が載った台帳があります。サーバーは「はい、その人のIPアドレスは 93.184.216.34 ですよ」と答えてくれます。
この一連のリレーを経て、ようやく私たちはウェブサイトにたどり着けるのです。
—
2. キャッシュの罠と dig コマンドの基本
さて、ここで問題になるのが「1」で登場したキャッシュ(記憶)です。
普段、私たちのパソコンや身近な郵便局は、一度調べた住所をしばらくの間メモしておきます。何度も同じ手紙を出すときに、わざわざアメリカの本部まで聞きに行くのは時間がもったいないからです。
しかし、インフラエンジニアがサーバーの引っ越しやIPアドレスの変更を行った直後には、この「便利なキャッシュ」が最大の敵になります。「サーバーを新しい方に変えたのに、古い方のIPアドレスがキャッシュに残っていて、古いサイトに飛ばされてしまう……!」という現象が起きるのです。
いま、自分のパソコンが「どちらの住所を見ているのか?」を正確に、そして丸裸にするために使うのが dig コマンドです。
まずは、基本的な使い方を見てみましょう。ターミナル(Macならターミナル、WindowsならPowerShellなど)を開いて、次のように打ち込んでみてください。
# example.com のAレコード(IPアドレス)を問い合わせる
dig example.com A
実行すると、たくさんの英語のデータが返ってきますよね。最初は難しく見えるかもしれませんが、注目してほしいのは ANSWER SECTION という項目です。ここに、そのドメインが指している実際のIPアドレスが表示されます。
—
3. 裏側のリレーをすべて覗き見する +trace オプション
「設定を変えたのに反映されない」「どこのサーバーが古い情報を握っているのか突き止めたい!」
そんな現場の切実な悩みを一発で解決してくれるのが、今回の一番星である +trace (トレース)オプション です。
先ほどの郵便配達のリレーを、ルートサーバーから順番にすべて自分の目で追いかけることができる魔法のコマンドです。実際に打ってみましょう。
# ルートサーバーからの委任パスをすべてトレースして表示する
dig +trace example.com
このコマンドを実行すると、次のような流れで画面が流れていきます(出力はイメージです)。
; <<>> DiG 9.10.6 <<>> +trace example.com
;; Global options: +dir
. 5h5m15s IN NS a.root-servers.net.
. 5h5m15s IN NS m.root-servers.net.
;; Received 525 bytes from 192.168.1.1#53(自宅のルーター等) in 12 ms
# ここで世界の本部(ルートサーバー)から「.com」の担当者を教えてもらっている
com. 2d2h IN NS a.gtld-servers.net.
...
;; Received 496 bytes from 198.41.0.4(ルートサーバー) in 120 ms
# ここで「.com」案内所から「example.com」の担当者(権威DNS)を教えてもらっている
example.com. 2d2h IN NS a.iana-servers.net.
...
;; Received 812 bytes from 192.5.6.30(TLDサーバー) in 180 ms
# 最後に、権威DNSサーバーから正確なIPアドレスを取得!
example.com. 86400 IN A 93.184.216.34
;; Received 56 bytes from 192.0.32.10(権威DNSサーバー) in 40 ms
すごいですね!普段は一瞬で通り過ぎていくDNS名前解決の旅路が、上から下へステップバイステップでしっかりと可視化されています。
+trace を使うべき現場のシチュエーション
1. キャッシュを完全に無視したいとき
+trace を使うと、身近なキャッシュサーバーを一切頼らず、ルートサーバーに直接「最初から教えて!」と聞きに行く(反復クエリを自ら実行する)ため、世の中に今本当に行き渡っている最新のDNS情報をダイレクトに取得できます。
2. どの階層で名前解決が失敗しているか突き止めたいとき
「ルートから .com への案内はうまくいくのに、最後の権威サーバーでエラーになるな」といったように、DNSの迷子になっているポイント(どこでバトンを落としているか)をピンポイントで特定できます。
—
4. 知っておくと現場でドヤ顔できる!便利な dig の仲間たち
最後に、インフラの現場やトラブルシューティングでよく使う、知って得する dig の使い方をいくつかご紹介しますね。
① 逆引き(IPアドレスからドメイン名を調べる)
「この怪しいIPアドレス、いったい何のサーバーだ?」というときは、 -x オプションを使います。
# IPアドレスからドメイン名を逆引きする
dig -x 93.184.216.34
② 使うDNSサーバーを指定する( @ 記号)
「プロバイダのDNSサーバーじゃなくて、GoogleのDNS( 8.8.8.8 )に直接聞きに行きたい!」というときは、アットマークを使って宛先を指定できます。
# GoogleパブリックDNSに直接問い合わせる
dig @8.8.8.8 example.com A
※「自分の手元のDNSサーバーでは古い情報が出るのに、GoogleのDNSでは新しい情報が出るぞ? ならばキャッシュが残っているのはプロバイダ側だな」といった切り分けに非常に強力です。
—
まとめ
いかがでしたでしょうか? 今回は、DNSの名前解決の仕組みを郵便配達に例えながら、dig コマンド、そして強力な +trace オプションの世界をご紹介しました。
- DNSは、ルートサーバーから権威DNSサーバーへとバトンを渡していく手紙の配達リレーである。
digコマンドを使えば、DNSの応答を詳細に丸裸にできる。+traceを使えば、キャッシュを完全にバイパスして、ルートサーバーからの全行程をご自身の目でトレースできる。
ネットワークやインフラの世界は、一見すると目に見えないパケットが飛び交っていて難しく感じられるかもしれません。ですが、こうして一つひとつのコマンドを使いこなし、裏側の挙動を想像できるようになると、トラブルシューティングがまるで謎解きゲームのように面白くなってきます。
ぜひ、ご自身のパソコンの端末を開いて、お気に入りのウェブサイトで dig +trace を試してみてくださいね。それでは、また次回のNOCエンジニアリングブログでお会いしましょう!
コメント