皆さん、こんにちは!NOC(ネットワークオペレーションセンター)で日々トラブルシューティングと向き合っているシニアエンジニアです。
データセンターの深夜、突然「Webサイトに繋がらない!」というアラートが鳴り響く。そんな修羅場を数え切れないほどくぐり抜けてきましたが、原因を調べていくと「なーんだ、犯人はDNSだったのか」というケースは、驚くほど多いものです。
「ブラウザにはURLを入力しているのに、なぜかページが表示されない……」
そんな時、皆さんは最初にどんなコマンドを叩きますか? ping ですか? それとも traceroute ですか?
もちろんそれらも大事ですが、ネットワークの世界で迷子になった時、真っ先に疑うべきなのは「宛先の住所(IPアドレス)を正しく教えてもらう仕組み」、すなわちDNS(ドメインネームシステム)です。そして、そのDNSの健康状態をスパーッと見極めるために、現場のエンジニアがこぞって使う秘密兵器が、今回ご紹介する nslookup や dig における「DNSサーバーの明示的指定(@server構文)」なんです。
今回は、難しいパケットの構造や頭の痛くなる専門用語は少し横に置いて、身近な例えを交えながら、この強力なテクニックを一緒に楽しくマスターしていきましょう!一歩ずつ丁寧に解説しますので、リラックスしてついて来てくださいね。
—
1. DNSの役割と「いつもの名前解決」のカラクリ
まずは、DNSが私達のネットワーク生活において、どんな役割を果たしているのかを思い出してみましょう。
インターネットの世界は、実はすべて数字(IPアドレス)で動いています。私たちが普段使っている「 example.com 」のようなキレイな名前は、人間が覚えやすいように後から付けた「ニックネーム」に過ぎません。パソコンやスマホが通信をする時は、必ず「 example.com って、結局のところどの数字(IPアドレス)のことなの?」と、住所録を持っているお世話係に尋ねる必要があります。このお世話係こそがDNSサーバーです。
郵便配達で例えてみましょう
あなたが遠くに住む友人へ手紙を出すところを想像してください。
1. 宛名を書く: 手紙の封筒には「東京都〇〇区…… 鈴木さん宛」と書きますよね。これがWebブラウザに入力するURL( example.com )です。
2. 住所を調べる: でも、郵便局の配達員さんは「鈴木さん」という名前だけでは、日本中のどこに届けたらいいか分かりません。そこで、電話帳や住所録を開いて、「鈴木さんの正確な住所(郵便番号と番地)」を調べます。この住所録を開く作業こそがDNSの名前解決です。
3. 配達する: 正確な番地が分かったら、あとはその通りに手紙をポストへ投函します(これが実際のパケット送信ですね)。
通常、私たちのパソコンやスマホは、契約しているインターネットプロバイダ(ISP)や会社のネットワークが自動で用意してくれた「お決まりのDNSサーバー(住所録)」を、疑うことなく使っています。これは、言わば「いつも自分の部屋に置いてある、使い慣れた電話帳」のようなものです。
—
2. なぜ「DNSサーバーを直接指定(@server構文)」する必要があるのか?
普段は自動で決まるDNSサーバーですが、ネットワークのトラブルが起きた時、この「使い慣れた電話帳」が信用できなくなる瞬間がやってきます。
- 「あれ? 自宅のパソコンからはあのサイトが開けないのに、スマホ(別回線)からだと普通に見られるぞ?」
- 「さっきまで見えていたサイトのドメイン情報を変更したのに、いつまで経っても古い情報のままアクセスできちゃうな……」
こんな時、何が起きているのでしょうか?
犯人は大体この2つのどちらかです。
1. ローカルリゾルバーのキャッシュ(記憶違い): あなたのパソコンやルーターが、「このサイトの住所はこれだ!」と、古い情報をしつこく覚え込んでいる。
2. 利用しているDNSサーバー自体の不調や遅延: あなたが普段使っているDNSサーバーが、どこかのインターネットの道路工事の影響で、最新の正しい住所をまだ知らなかったり、調べるのをサボっていたりする。
現場で直面する「モヤモヤ」を解消する
ここで、私たちが普段使っている nslookup や dig というコマンドの登場です。通常、これらのコマンドを実行すると、パソコンが勝手に「いつものDNSサーバー」へ問い合わせに行きます。
しかし、「いつもの電話帳」がボケていたり、間違った情報を教えていたりしたらどうでしょう? いくら調べても正しい答えは返ってきませんよね。
そこで使うのが、「おい、いつもの電話帳じゃなくて、あっちにある『世界中で一番正確で有名な電話帳(例えばGoogleの 8.8.8.8 など)』に直接電話して、本当の住所を聞いてきてくれ!」と指示を出す技です。これが、DNSサーバーを明示的に指定する @server 構文の正体なのです!
—
3. 実践!nslookup と dig でサーバーを名指ししてみよう
百聞は一見にしかず。実際にコマンドを叩いて、その動きを確かめてみましょう。実務の開発やインフラ構築の現場でも、まさにこの手順で「犯人探し」を行います。
パターンA: nslookup で特定サーバーに聞いてみる
WindowsでもMacでも、ターミナルやコマンドプロンプトを開いて、以下のように入力してみてください。今回は、Googleが提供しているパブリックDNSサーバー( 8.8.8.8 )を名指し(ダイレクトに指定)してみます。
# GoogleのDNSサーバー(8.8.8.8)に対して、example.comの住所を直接尋ねる
nslookup example.com 8.8.8.8
【実行結果のイメージと読み方】
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
Server: 8.8.8.8: 「今回はいつものサーバーではなく、ちゃんと8.8.8.8に聞きに行きましたよ」という証拠です。Address: 93.184.216.34: GoogleのDNSサーバーが教えてくれた、example.comの本当のIPアドレスです。
もし「いつものDNS(会社のDNSなど)」で調べた結果と、この 8.8.8.8 で調べた結果が違っていたら……?
はい、これで「原因は自分のパソコンや会社のDNSサーバーのキャッシュ、あるいは会社のDNSサーバーの不具合にある!」と、見事に障害箇所を切り分ける(隔離する)ことに成功です!
—
パターンB: プロ仕様の dig コマンドで @server 構文を使う
Linux環境や、開発用のMacを使っているなら、より詳細な情報が取れる dig コマンドが圧倒的にオススメです。ここで、いよいよ今回の主役である @ 記号が登場します。
# @ の直後にDNSサーバーのIPアドレスをくっつけて指定します
dig @8.8.8.8 example.com
【実務で役立つ!少しリッチなコマンド例】
実務の現場では、単に住所を聞くだけでなく、「どれくらいのスピードで答えてくれたか?」という応答速度(レイテンシ)や、詳細な情報を知りたいことが多々あります。そんな時は以下のように叩いてみてください。
# 応答時間(Query time)や詳細なステータスを確認しつつ、CloudflareのDNS(1.1.1.1)に問い合わせる
dig @1.1.1.1 example.com +noall +answer
コードの解説:
@1.1.1.1: 世界最速クラスを誇るCloudflareのDNSサーバーを明示的に指名しています。example.com: 調べたいドメイン名です。+noall +answer: 不要な挨拶文(ヘッダー情報など)を省いて、知りたい答え(IPアドレス)だけをスッキリ画面に表示させる、シニアエンジニアお気に入りの便利オプションです。
—
4. トラブルシューティングの現場から:このテクニックでどうやって障害を暴くか?
ここで、私たちが実際の現場でどのようにこの手法を使っているか、生々しいストーリーを一つご紹介しましょう。
ある日、社内から「新しいWebサーバーを公開したのに、一部の社員から『古い画面のまま変わらない』『アクセスできない』というクレームが相次いでいる!」という連絡が入りました。
私は真っ先に自分の端末から dig example.com を叩きました。すると、新しく割り当てたはずのピカピカのIPアドレスがちゃんと返ってきます。「あれ? ちゃんと見えているぞ?」
ここで疑うべきは、「クレームを言っている人たちが使っているDNSサーバー」と「私が使っているDNSサーバー」が違うということです。
そこで、社員たちが普段使っている社内ローカルのDNSサーバーのIPアドレス(仮に 192.168.10.10 としましょう)を突き止め、次のようにコマンドを叩いてみました。
# 社内DNSサーバーを名指しして、新サーバーのドメインを引いてみる
dig @192.168.10.10 new-service.example.com
ガーン! 返ってきたIPアドレスは、古い古い古いサーバーのままでした。
原因判明です。社内DNSサーバーが、「このドメインの住所は古いこれだよ」という情報を、まだ頑なにキャッシュ(記憶)したまま、新しい住所に更新していなかったのです(TTLの有効期限切れ待ち状態)。
対策として、社内DNSサーバーのキャッシュを強制クリアする作業を行い、無事に障害は解決しました。
もし、この時に @server 構文を使わずに、ただぼんやりと dig new-service.example.com だけを叩いていたジプシー状態だったら、「あれ? 俺のパソコンからは見えるぞ? 社員の気のせいじゃないの?」と、深刻なハマり沼に落ちていたことでしょう。
—
5. おわりに:一歩ずつ、確実なネットワーク診断を
いかがでしたでしょうか?
nslookup や dig における @server 構文(DNSサーバーの明示的指定)は、一見するとただの小さなオプション文字に見えますが、ネットワークの迷宮で迷子になった時、「今、誰が嘘をついていて、誰が本当のことを言っているのか」を暴き出す、最強のメスになります。
「いつものDNS」の言うことをうのみにせず、「ちょっとお隣のDNSさんにも聞いてみようかな?」と疑ってみる。この泥臭くもスマートなアプローチこそが、優れたエンジニアへの第一歩です。
皆さんも、自宅のネットワークや検証環境で、ぜひ dig @8.8.8.8 や dig @1.1.1.1 を試してみてくださいね。「おぉ、ちゃんと違うサーバーに聞きに行ってるな!」と実感できるはずです。
それでは、また次回のNOC現場レポートでお会いしましょう。快適なネットワークライフを!
コメント