—
title: 初心者でも安心!digコマンドでDNSの謎を解き明かす3つの魔法のオプション
date: 2023-10-27
categories:
- ネットワーク
- トラブルシューティング
- DNS
tags:
- dig
- DNS
- CLI
- ネットワーク運用監視
- 初学者向け
—
皆さん、こんにちは!NOCシニアエンジニアとして、今日もネットワークの最前線でパケットと格闘している皆さんを応援しています。
「サイトにアクセスできない!」
「メールが届かない!」
こんな時、皆さんの頭には「DNSかな…?」という疑念がよぎることはありませんか?インターネットの「住所録」とも言えるDNSは、普段意識することは少ないかもしれませんが、ひとたびトラブルが起きると、インターネット全体が機能不全に陥ってしまう、まさに縁の下の力持ちなんです。
私たちNOCエンジニアも、日夜このDNSのトラブルシューティングに奔走しています。そんな時、私の右腕となってくれるのが、今日ご紹介するdigコマンドです。
digコマンドは、DNSサーバーに問い合わせを行い、ドメイン名とIPアドレスの関連付けなどを確認するための強力なツール。特に、初学者の方にとっては、たくさんの情報が出てきて「うわ、何これ!?」となることも多いかもしれません。でも大丈夫。今日は、その中でも特に便利で、私も数え切れないほど助けられてきた「魔法のオプション」を3つ、皆さんに伝授したいと思います。
小難しいパケットの話は一旦置いておいて、郵便配達や電話帳の例えを交えながら、一歩ずつ一緒に理解していきましょう!
DNSってなんだっけ?(超ざっくりおさらい)
まずは、DNSの基本をサクッとおさらいしましょう。
皆さんが友人の家に手紙を送る時、何が必要ですか?そう、住所ですよね。インターネットの世界でも、ウェブサイトやメールサーバーにアクセスするには「住所」が必要です。このインターネット上の住所が「IPアドレス」です。
しかし、192.0.2.1とか2001:db8::1みたいな数字の羅列を覚えるのは大変ですよね?そこで登場するのが「ドメイン名」です。example.comとかgoogle.comのような、人間にとって分かりやすい名前のことですね。
DNS(Domain Name System)は、この「ドメイン名」と「IPアドレス」を結びつける「インターネットの住所録」のような役割を担っています。皆さんがブラウザでexample.comと入力すると、裏側ではDNSが「example.comって、IPアドレスはなんだっけ?」と調べて、対応するIPアドレスを教えてくれるわけです。
そして、この「住所録」には、階層構造があります。
1. ルートサーバー: 世界に13箇所ある、まさに「住所録の元締め」のような存在です。
2. TLD(トップレベルドメイン)サーバー: .comや.jp、.orgといったドメイントップの情報を管理しています。
3. 権威DNSサーバー: 実際にexample.comやsub.example.comといった具体的なドメインのIPアドレス情報を管理しているサーバーです。
皆さんの問い合わせは、まずルートサーバーへ行き、次にTLDサーバーへ、そして最終的に権威DNSサーバーへと「問い合わせを委譲」されながら、目的のIPアドレスを探し出す、という流れになります。
この「委譲」の流れを追跡できるのが、これからご紹介するdigコマンドのオプションなんですよ!
digコマンドの基本形を見てみよう
まずは、オプションなしのdigコマンドで、example.comの情報を調べてみましょう。
dig example.com
実行すると、たくさんの情報が出てきますよね。
; <<>> DiG 9.10.6-P1 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62572
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 86399 IN A 93.184.216.34
;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Oct 27 10:00:00 JST 2023
;; MSG SIZE rcvd: 55
「うーん、なんか色々書いてあるけど、結局IPアドレスはどれ?」ってなりますよね。
ここには、問い合わせたドメイン名(example.com)、問い合わせの種類(Aレコード、つまりIPアドレス)、そしてそのIPアドレス(93.184.216.34)などが書かれています。
これでも十分なのですが、トラブルシューティングの現場では、もう少し「深掘り」したい時があるんです。そんな時に役立つのが、これから紹介するオプションたちです!
魔法のオプション1: +traceでDNSの旅路を追う
最初の魔法は、+traceオプションです。これは、皆さんのDNSクエリが、ルートサーバーから目的の権威DNSサーバーまで、どのように「旅」をして情報を得たのか、その全経路を追いかけることができるオプションです。
例えるなら、郵便配達員が皆さんの手紙を届ける様子を、最初から最後まで、どの郵便局を経由して、誰から誰に渡されたのかをずっと追いかけるようなものです。
DNSの委譲設定ミスや、途中の権威DNSサーバーが応答していない、といったトラブルを発見するのに非常に役立ちます。
使い方
調べたいドメイン名の後ろに+traceを付け加えるだけです。
dig example.com +trace
出力例とポイント解説
出力は少し長くなりますが、一つずつ見ていきましょう。
; <<>> DiG 9.10.6-P1 <<>> example.com +trace
;; global options: +cmd
. 518400 IN NS m.root-servers.net.
. 518400 IN NS a.root-servers.net.
; ... (ルートサーバーの情報が続く) ...
;; Received 239 bytes from 192.168.1.1#53(192.168.1.1) in 0 ms
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
; ... (TLDサーバーの情報が続く) ...
;; Received 498 bytes from 192.58.128.30#53(j.root-servers.net) in 36 ms
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
;; Received 102 bytes from 192.33.14.30#53(b.gtld-servers.net) in 36 ms
example.com. 86400 IN A 93.184.216.34
;; Received 55 bytes from 192.0.32.7#53(a.iana-servers.net) in 0 ms
注目してほしいのは、出力がいくつかのブロックに分かれている点です。
1. 最初のブロック: ルートサーバー(.)の情報です。ここから、.comを管理しているTLDサーバーの情報が教えてもらえます。
Received ... from ...の部分で、どのサーバーから応答を受け取ったかがわかります。
2. 次のブロック: .comのTLDサーバーの情報です。ここから、example.comを管理している権威DNSサーバーの情報が教えてもらえます。
3. 最後のブロック: example.comの権威DNSサーバーの情報です。そして、最終的に目的のIPアドレス(93.184.216.34)が得られます。
つまり、+traceを使うことで、DNSの問い合わせが「ルートサーバー」→「TLDサーバー」→「権威DNSサーバー」という階層を順にたどっていく様子を、その目で確認できるんです。もし途中のどこかで応答がおかしい、委譲設定が間違っている、といった問題があれば、この+traceの出力を見れば一目瞭然!「どこでDNSの旅路が途絶えたか」が分かるので、トラブルの切り分けに絶大な威力を発揮します。
魔法のオプション2: +shortでサッと答えだけ知りたい
「たくさんの情報はいらない!とにかくIPアドレスだけサッと知りたいんだ!」
そんな時に役立つのが、この+shortオプションです。余計な情報を一切省き、欲しい答えだけをシンプルに表示してくれます。例えるなら、「電話帳の会社名を指差して『電話番号だけ教えて!』とお願いする」ようなものですね。
スクリプトでDNS情報を取得したい時や、AレコードやCNAMEレコードなどを手早く確認したい時に、これほど便利なものはありません。
使い方
調べたいドメイン名の後ろに+shortを付け加えるだけです。特定のレコードタイプを指定したい場合は、ドメイン名の後にAやMXなどを続けます。
dig example.com +short # example.comのAレコード(IPアドレス)だけを表示
dig example.com MX +short # example.comのMXレコード(メールサーバー)だけを表示
dig example.com NS +short # example.comのNSレコード(ネームサーバー)だけを表示
出力例とポイント解説
シンプルさが魅力です。
# example.comのAレコード
dig example.com +short
# 出力例:
# 93.184.216.34
# example.comのMXレコード
dig example.com MX +short
# 出力例:
# 0 .
# (例として`example.com`はMXレコードがないため、このような出力になる場合があります。
# 実際は`mail.example.com.`のようなホスト名が表示されます)
# example.comのNSレコード
dig example.com NS +short
# 出力例:
# a.iana-servers.net.
# b.iana-servers.net.
見てください、このスッキリ感!必要な情報だけがピンポイントで表示されます。
特に、何か簡単なチェックをしたい時や、シェルスクリプトの中でDNSの問い合わせ結果を使いたい時などは、この+shortオプションが真価を発揮します。
魔法のオプション3: +nssearchでゾーンの担当者を探し出す
最後に紹介するのは、+nssearchオプションです。これは、指定したドメインの「権威DNSサーバー」(つまり、そのドメインの情報を公式に管理しているサーバー)を、再帰的に探し出してくれます。
例えるなら、「ある会社の特定の部署の電話番号を知りたい時、まず代表電話に電話して『〜部の担当部署の電話番号を教えてください』と聞いて、教えてもらった番号に電話して、また聞いて…と、目的の部署にたどり着くまで責任者をたどっていく」ようなイメージです。
特に、サブドメインを別のDNSサーバーに委譲している場合など、どのサーバーが最終的な権限を持っているのかを確認したい時に非常に便利です。
使い方
調べたいドメイン名の後ろに+nssearchを付け加えるだけです。
dig example.com +nssearch
出力例とポイント解説
これも+traceと同様に、問い合わせの「旅路」を追いますが、NSレコード(ネームサーバー)に特化して、より詳細にその責任者を追いかけます。
dig example.com +nssearch
# 出力例:
# NS: a.root-servers.net. from .
# NS: b.root-servers.net. from .
# ; ... (ルートサーバーの情報が続く) ...
# NS: a.gtld-servers.net. from com.
# NS: b.gtld-servers.net. from com.
# ; ... (TLDサーバーの情報が続く) ...
# NS: a.iana-servers.net. from example.com.
# NS: b.iana-servers.net. from example.com.
# SOA: ns.icann.org. hostmaster.iana.org. 2023102700 7200 3600 1209600 3600 from example.com.
この出力で重要なのは、最終的にSOAレコードが表示されている部分です。SOA(Start Of Authority)レコードは、そのゾーン(ドメインの管理範囲)の「開始点」を示し、そのゾーンの管理責任者や管理情報を明示しています。
SOA: ns.icann.org. hostmaster.iana.org. ... from example.com.- これは「
example.comのゾーンの権威DNSサーバーは、a.iana-servers.net.とb.iana-servers.net.であり、その管理情報はSOAレコードに記載されている通りである」ということを示しています。
+nssearchを使うことで、そのドメインが最終的にどのネームサーバーによって管理されているのか、そしてその管理情報は何か、をはっきりと確認できます。特に、新しいドメインを設定した際や、サブドメインを外部サービスに委譲した際などに、正しく設定が反映されているかを検証するのに欠かせないオプションです。
まとめと次のステップ
今日は、digコマンドの強力な3つのオプション、+trace、+short、+nssearchをご紹介しました。
+trace: DNSの問い合わせが、ルートサーバーから権威DNSサーバーまで、どのような経路をたどったかを確認し、委譲設定の問題や応答不良を特定するのに役立ちます。+short: 余計な情報を省き、必要なDNSレコード(IPアドレス、メールサーバーなど)だけを素早く確認したい時に便利です。+nssearch: 指定したドメインの権威DNSサーバーとその管理情報を探し出し、ゾーンの委譲設定の確認に役立ちます。
これらのオプションを使いこなせば、あなたもDNSトラブルシューティングの達人に一歩近づけます!「サイトにアクセスできない!」という時、闇雲に時間を費やすのではなく、これらのコマンドで的確に原因を切り分けられるようになるはずです。
まずは、皆さんが普段見ているウェブサイトや、ご自身の会社のドメインなどで、これらのコマンドを実際に試してみてください。コマンドを叩いて、その出力から何が読み取れるかを考える練習を繰り返すことが、NOCエンジニアへの一番の近道ですよ!
それでは、今日も良きネットワークライフを!
—
コメント