【入門編】 digコマンドにおける再帰検索(+recurse)と非再帰検索(+nsrd)の挙動 – トラブルシューティング&ネットワーク運用監視実践ガイド

皆さん、こんにちは!ネットワークの道、一歩一歩進んでいますか?

NOC(ネットワークオペレーションセンター)の現場で、毎日パケットの奔流と格闘しているシニアエンジニアの私ですが、今日は皆さんに、トラブルシューティングの「武器」として欠かせないdigコマンドの深い使い方をお伝えしたいと思います。

特に、+recurse(再帰検索)と+norecurse(非再帰検索)という、一見地味ながらも超強力なオプションに焦点を当てていきますよ。

「DNSって聞くと頭が痛い…」「digコマンドって何となく使ってるけど、オプションの意味までは…」そんなあなたも大丈夫!郵便配達の仕組みに例えながら、どこよりも優しく、そして現場の知恵を交えながら解説していきますからね。さあ、一緒にDNSの奥深い世界へ旅立ちましょう!

—

ネットワークの心臓「DNS」と、その健康診断士「dig」

ネットワークの世界で、私たちが普段「ウェブサイトを見る」「メールを送る」といった当たり前のことができるのは、google.comのような「ドメイン名」を、コンピューターが理解できる「IPアドレス」に変換してくれる仕組みがあるからです。これこそがDNS (Domain Name System) です。

DNSがもし動かなくなったら…想像してみてください。インターネットの住所録が失われるようなものです。ウェブサイトは見られなくなり、メールも届かなくなる。まさに、ネットワークの心臓と言っても過言ではありません。

そして、このDNSがきちんと機能しているか、どこかに問題がないかを診断するのが、今回主役となるコマンド dig なんです。

digは、DNSに関するあらゆる情報を問い合わせることができる、まさに「DNSの健康診断士」のような存在。トラブルシューティングの現場では、pingやtracerouteと同じくらい、あるいはそれ以上に多用されるコマンドなんですよ。

—

DNSの仕組みを郵便配達でざっくり理解しよう!

+recurseと+norecurseの話に入る前に、まずはDNSの仕組みをざっくりとおさらいしておきましょう。難しく考える必要はありません。私たちが普段使っている郵便配達に例えると、とても分かりやすいんです。

1. 郵便物(ドメイン名)と住所(IPアドレス)

あなたが誰かに手紙を送りたいとします。その人の「名前」は知っていても、手紙を届けるためには「住所」が必要です。
DNSの世界では、ウェブサイトの「ドメイン名」(例: www.example.com)が「名前」にあたり、そのウェブサイトがあるサーバーの「IPアドレス」(例: 192.0.2.100)が「住所」にあたります。

2. 近所の郵便局(フルリゾルバー)

あなたは手紙の宛名に「名前」と「住所」を書いて、近所の郵便局に持っていきますよね。この「近所の郵便局」が、あなたのPCや会社で設定されているフルリゾルバー(またはキャッシュDNSサーバー) にあたります。

フルリゾルバーは、あなたが「このドメイン名のIPアドレスを教えて!」と尋ねると、その答えを頑張って見つけてきてくれる、とても親切なサーバーです。もし以前に同じ質問をされたことがあれば、その答えを覚えていて(キャッシュしていて)、すぐに教えてくれます。

3. 本局や地域ごとの郵便局(権威DNSサーバー)

近所の郵便局(フルリゾルバー)は、世界中のあらゆる住所を知っているわけではありません。もし知らない住所だったらどうするか?
「この住所は〇〇県が担当だから、〇〇県の本局に聞いてみよう」「〇〇市なら、〇〇市郵便局が詳しいだろう」というように、専門の郵便局に問い合わせていきます。

DNSの世界では、これが権威DNSサーバーにあたります。権威DNSサーバーは、特定のドメイン(例: example.com)に関する情報(ゾーン情報と言います)を「公式に」知っているサーバーで、そのドメインの持ち主が管理しています。

  • ルートDNSサーバー: 全世界のドメイン階層の最上位に位置し、「.comドメインならこのサーバーに聞いてね」といった情報を教えてくれます。
  • TLD (Top Level Domain) DNSサーバー: .comや.jpといったトップレベルドメインの情報を管理し、「example.comならこのサーバーに聞いてね」といった情報を教えてくれます。
  • 権威DNSサーバー: 実際にexample.comやwww.example.comのIPアドレスを知っている、そのドメインの「担当者」です。

このように、フルリゾルバーがルートから権威DNSサーバーまで順々に問い合わせて、最終的なIPアドレスを見つけ出す、という流れになります。

—

digコマンドの基本形

まずは、一番シンプルなdigコマンドから見ていきましょう。

dig google.com

これを実行すると、google.comのIPアドレス(Aレコード)など、たくさんの情報が表示されますよね。
このシンプルなコマンドの裏側で、実は「再帰検索」が行われているんです。

—

+recurse:フルリゾルバーに「全部お任せ!」の再帰問い合わせ

私たちがdig google.comと打った時、デフォルトで有効になっているのが再帰問い合わせ (Recursive Query) です。

郵便局にお任せするイメージ

これは、あなたが近所の郵便局(フルリゾルバー)に「google.comの住所、見つけてきて!」とお願いするのと同じです。郵便局は、あなたのために、ルートサーバーから順に問い合わせて、最終的な答え(IPアドレス)を見つけて、あなたに教えてくれます。あなたは、途中のプロセスを気にする必要はありません。

ほとんどの場合、これで十分ですよね。日常的にウェブサイトにアクセスする時も、あなたのPCは設定されたフルリゾルバーに再帰問い合わせを行っています。

コマンド例:+recurseはデフォルトで有効

+recurseオプションは、名前の通り「再帰問い合わせを有効にする」ものですが、実はdigコマンドではデフォルトで有効になっています。なので、通常は明示的に指定する必要はありません。

# デフォルトの動作。フルリゾルバーに再帰問い合わせを行います。
# これは 'dig google.com +recurse' と同じ意味になります。
dig google.com

# 応答セクション(ANSWER SECTION)には、最終的なIPアドレスが表示されます。
# 権威セクション(AUTHORITY SECTION)や追加セクション(ADDITIONAL SECTION)にも
# 関連情報が表示されることがありますが、基本的にはANSWER SECTIONを見ます。

もし、あえて「再帰問い合わせを有効にするぞ!」という意思表示をしたい場合は、以下のように明示的に指定することもできます。

# 明示的に再帰問い合わせを有効にします(デフォルトと同じ動作です)
dig google.com +recurse

普段使いのdigは、この+recurse(デフォルト有効)の状態で、あなたのPCが利用しているフルリゾルバーに問い合わせをしている、ということになります。

—

+norecurse:権威DNSサーバーに「直接、詳細を教えて!」の非再帰問い合わせ

さあ、ここからがNOCエンジニアの本領発揮!トラブルシューティングで真価を発揮する+norecurseオプションについて解説していきます。

なぜ「直接聞く」必要があるのか?

「近所の郵便局にお任せする」再帰問い合わせでほとんどのことは解決します。でも、もし郵便物が届かない、あるいは届くのが遅い、なんて問題が起きたらどうしますか?

「本当に郵便局が正しい住所を見つけてくれたのか?」「途中のどこかで間違った情報が渡されたんじゃないか?」と疑いたくなりますよね。

DNSの世界でも同じです。

  • 「ウェブサイトが見れない!でもpingは通るし、サーバーは動いているみたい…」
  • 「新しいドメインを設定したのに、なぜか反映されない…」
  • 「特定のユーザーだけウェブサイトが見れないって言ってるぞ…」

こんな時、もしかしたらフルリゾルバーが古い情報をキャッシュしていたり、権威DNSサーバーの設定がおかしかったりする可能性があります。

そこで登場するのが、非再帰問い合わせ (Non-Recursive Query) 、つまり+norecurseオプションです!これは「フルリゾルバーに丸投げするのではなく、自分が直接、専門の権威DNSサーバーに問い合わせて、一歩ずつ情報を確認していく」という、まさに探偵のような手法なんです。

権威DNSサーバーに直接聞くイメージ

+norecurseを使うと、あなたは郵便局(フルリゾルバー)を介さず、直接「〇〇県の本局さん、.comドメインの担当者教えて!」「.comの担当者さん、example.comの担当者教えて!」というように、権威DNSサーバーに一つ一つ尋ねていくイメージです。

これにより、「フルリゾルバーが間違った情報をキャッシュしている」のか、「権威DNSサーバー自体が間違った情報を発信している」のか、あるいは「途中のどこかのDNSサーバーがおかしい」のかを切り分けることができるんです。

コマンド例:+norecurseで権威DNSサーバーに直接聞く

+norecurseを使う場合、通常は「どのDNSサーバーに問い合わせるか」を明示的に指定します。指定しない場合、PCが設定しているフルリゾルバーに問い合わせますが、そのフルリゾルバーは再帰検索を行いません(つまり、自身がキャッシュしている情報しか返さないか、何も返さない可能性があります)。

最も一般的な使い方は、特定の権威DNSサーバーに直接問い合わせる方法です。

# 例: google.comの権威DNSサーバーの一つに直接問い合わせる
# まずは、google.comの権威DNSサーバーを調べてみましょう
# 'dig google.com NS' でNSレコード(ネームサーバー)を調べます
dig google.com NS

# 出力例(一部):
# ;; ANSWER SECTION:
# google.com.             300     IN      NS      ns1.google.com.
# google.com.             300     IN      NS      ns2.google.com.
# google.com.             300     IN      NS      ns3.google.com.
# google.com.             300     IN      NS      ns4.google.com.

# ns1.google.com が権威DNSサーバーの一つだと分かったので、これに直接問い合わせます
# @の後ろに問い合わせたいDNSサーバーのIPアドレスまたはホスト名を指定します。
# +norecurse をつけることで、このサーバーに「再帰検索はしないで、知ってる情報だけ教えて」と指示します。
dig @ns1.google.com google.com +norecurse

# このコマンドを実行すると、ns1.google.com が管理している
# google.com の公式な情報が直接返ってきます。
# フルリゾルバーのキャッシュに左右されずに、権威サーバーの生の声を聞けるわけです。

非再帰問い合わせと+traceの組み合わせ

非再帰問い合わせの動きをより深く理解するためには、+traceオプションとの組み合わせが非常に有効です。+traceは、ルートDNSサーバーから始まり、TLDサーバー、そして最終的な権威DNSサーバーへと、再帰問い合わせのプロセスを自分自身で辿っていくような挙動をします。それぞれのステップで、次に問い合わせるべきサーバーの情報を教えてくれるんです。

# +trace をつけると、ルートサーバーから順番に問い合わせていく様子が分かります
# これは暗黙的に +norecurse と同じ動作になります
dig google.com +trace

# このコマンドを実行すると、
# まずルートサーバーに「.comのネームサーバー教えて」と聞き、
# 次に.comのネームサーバーに「google.comのネームサーバー教えて」と聞き、
# 最後にgoogle.comのネームサーバーに「google.comのIPアドレス教えて」と聞く、
# という一連の流れがすべて出力されます。
# どのサーバーがどの情報を返したのか、途中でどこかおかしなサーバーがいないか、
# といった詳細な診断に役立ちます。

+traceを使うと、まるであなたが郵便局員になって、手紙の住所を調べるために各地域の郵便局を回っていくような感覚です。途中で「おや?この郵便局、変なこと言ってるぞ?」といった異常にも気づきやすくなります。

—

診断シナリオ:+norecurseを活用したゾーン診断の実践

では、実際に+norecurseがどんな時に役立つのか、現場でのシナリオを見ていきましょう。

シナリオ1: 「うちのサイトが見れない!DNSがおかしい?」

あなたが管理しているウェブサイト mycompany.com が突然見れなくなったとします。
まずは、あなたのPCからdig mycompany.comと打ってみます。もし、IPアドレスが返ってこなかったり、変なIPアドレスが返ってきたりしたら、DNSの問題を疑いますよね。

しかし、それが「あなたの使っているフルリゾルバーがおかしいのか」、それとも「mycompany.comの権威DNSサーバー自体がおかしいのか」を切り分ける必要があります。

1. フルリゾルバー経由で確認 (デフォルトの再帰問い合わせ)

# まずは通常通り、フルリゾルバーに問い合わせてみる
    dig mycompany.com
    # もしここで間違ったIPアドレスやエラーが返ってきたら、次に進む

2. 権威DNSサーバーを特定

# mycompany.comの権威DNSサーバー(NSレコード)を調べる
    dig mycompany.com NS
    # 例: ns1.mydns.com と ns2.mydns.com が見つかったとします

3. 権威DNSサーバーに直接問い合わせ (非再帰問い合わせ)

# ns1.mydns.com に直接、非再帰で問い合わせてみる
    dig @ns1.mydns.com mycompany.com +norecurse

    # ns2.mydns.com にも直接、非再帰で問い合わせてみる
    dig @ns2.mydns.com mycompany.com +norecurse

もし、これらの権威DNSサーバーが正しいIPアドレスを返してきたら、権威DNSサーバーの設定は正しいということになります。問題はあなたのPCが使っているフルリゾルバーか、あるいはその上位のキャッシュDNSサーバーにある可能性が高いです。古いキャッシュが残っているのかもしれませんね。

逆に、権威DNSサーバーが間違った情報を返したり、何も返さなかったりしたら、権威DNSサーバー自体の設定ミスや障害が疑われます。こうなると、DNSレコードを管理している部署や、DNSプロバイダに連絡して調査してもらう必要があります。

シナリオ2: 「新しいドメイン設定が反映されているか確認したい!」

新しいサブドメイン dev.mycompany.com を追加し、そのIPアドレスを192.168.1.10に設定したとします。設定したばかりなので、フルリゾルバーのキャッシュにはまだ情報がないかもしれません。

1. 権威DNSサーバーに直接問い合わせ

# mycompany.comの権威DNSサーバー(ns1.mydns.comなど)に直接問い合わせる
    dig @ns1.mydns.com dev.mycompany.com +norecurse

    # もしここで正しいIPアドレス (192.168.1.10) が返ってきたら、
    # 権威DNSサーバーの設定は正しく完了しています。
    # あとは、フルリゾルバーに情報が伝播するのを待つだけです。

この確認をすることで、「設定が間違っていたのか、それとも単に伝播に時間がかかっているだけなのか」を迅速に切り分けることができます。

—

まとめ:+recurseと+norecurseの使い分け

いかがでしたでしょうか?digコマンドの+recurseと+norecurse、それぞれの意味と使い方が少し見えてきたでしょうか。

  • +recurse (デフォルト):
  • 「近所の郵便局(フルリゾルバー)に全部お任せ!」の再帰問い合わせ。
  • 普段使いのdigはこれ。あなたのPCが設定しているフルリゾルバーが最終的な答えを見つけてきてくれる。
  • 主に「いま現在、このドメインのIPアドレスはどうなっているか?」を手軽に知りたいときに使います。
  • +norecurse:
  • 「私が直接、専門の郵便局員(権威DNSサーバー)に聞く!」の非再帰問い合わせ。
  • 特定のDNSサーバーに「知っている情報だけを教えて」と尋ねる。
  • トラブルシューティングやゾーン診断で、「どのDNSサーバーが」「どんな情報を」 持っているのかを詳細に確認したいときに使います。
  • +traceと組み合わせることで、DNS解決の全プロセスを追跡できます。

この二つのオプションを使いこなすことで、あなたはDNSの挙動を深く理解し、より迅速かつ的確にネットワークのトラブルを解決できるNOCエンジニアへと大きく成長できるはずです。

最初は難しく感じるかもしれませんが、実際に手を動かしてコマンドを叩き、その出力結果をじっくりと眺めてみてください。パケットがネットワークを駆け巡るリアルな挙動が、きっと見えてくるはずです。

現場のNOCエンジニアとして、皆さんの成長を心から応援しています!
それでは、また次の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました