こんにちは!普段はデータセンターの監視ルーム(NOC)で、モニターの光に包まれながらネットワークの健康を見守っているシニアエンジニアです。
突然ですが、Webサイトを閲覧しているときに「ページが見つかりません」や「サーバーに接続できません」というエラー画面が出て、頭を抱えたことはありませんか?
現場のトラブルシューティングでも、通信障害の連絡を受けて調査を始めると「実はサーバーが落ちていたのではなく、DNSの名前解決が失敗していただけだった」というケースが驚くほどたくさんあります。
そんな現場で、私たちが真っ先にキーボードで叩くツールの代表格が、今回ご紹介する nslookup(エヌエス・ルックアップ)です。
今回は、インフラやネットワークを学び始めたばかりの方向けに、DNSの仕組みを「郵便配達」や「電話帳」などの身近な例えを交えながら、nslookup の基本である「非対話モード」と「対話モード」の使い分けを優しく紐解いていきます。一歩ずつ、確実にマスターしていきましょう!
—
1. そもそもDNSと「正引き・逆引き」ってなに?
コマンドを触る前に、まずは nslookup が何を調べているのか、そのイメージを掴んでおきましょう。
DNSはインターネットの「案内所(電話帳)」
私たちが普段ブラウザのアドレスバーに入力する example.com のような文字列を「ドメイン名」と呼びます。しかし、コンピューター同士が通信するときに実際に使っているのは、192.0.2.1 のような「IPアドレス」という数字の並びです。
例えるなら、ドメイン名は「〇〇さんの家(建物の名前)」で、IPアドレスは「市区町村・番地(正確な緯度経度や郵便番号)」のようなものです。
郵便配達員(ルーターやパケット)は、「〇〇さんの家」という名前だけではどこに荷物を運べばいいか分かりません。正確な「住所(IPアドレス)」が必要です。
そこで、「〇〇さんの家の住所はどこですか?」と問い合わせて、住所を教えてくれる街の案内所こそが「DNS(Domain Name System)サーバー」なのです。
正引き(フォワードルックアップ)と逆引き(リバースルックアップ)
DNSへの問い合わせには、大きく分けて2つの方向があります。
- 正引き(せいき):
「名前」から「住所」を調べること。
例:「example.com のIPアドレスは何番ですか?」(普段のWebアクセスはほぼこれです)
- 逆引き(ぎゃくびき):
「住所」から「名前」を調べること。
例:「192.0.2.1 というIPアドレスを使っているのは誰(どのドメイン)ですか?」
※セキュリティチェックや、メールサーバーの信頼性確認などでよく使われます。
そして、この案内所に「すみませーん!ちょっと教えてください!」と直接聞きに行くための道具が、今回主役となる nslookup(Name Server LookUp) コマンドです。
—
2. コマンド一発で調べる「非対話モード」
nslookup には、大きく分けて2つの使い方があります。
1つ目が、コマンドラインから1行でサクッと結果をもらう「非対話モード」です。手早くWebサイトのIPアドレスを知りたいときに重宝します。
基本的な正引き(ドメイン名からIPアドレスを調べる)
ターミナル(WindowsならコマンドプロンプトやPowerShell)を開いて、次のように入力してみましょう。
# example.com のIPアドレスを問い合わせる基本コマンド
nslookup example.com
実行すると、次のような結果が返ってきます(表示されるIPアドレスは環境によって異なります)。
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
出力結果の読み解き方は以下の通りです。
- 最初の2行(
ServerとAddress):
あなたのパソコンが現在問い合わせに行った「案内所(DNSサーバー)」の情報です。家庭内ならルーターのIPアドレス(例: 192.168.1.1)が表示されることが多いですね。末尾の #53 は、DNSが使う標準の受付口(ポート番号 53)を意味します。
- Non-authoritative answer(権威のない回答):
少し物々しい言葉ですが心配いりません!これは「自前でそのドメインを管理している大元のDNSサーバーではなく、キャッシュ(一時記憶)から答えましたよ」という案内所からの注記です。
- 最後の2行(
NameとAddress):
ここが本命の答えです!「example.com という名前の住所は 93.184.216.34 ですよ」と教えてくれています。
逆引き(IPアドレスからドメイン名を調べる)
今度は逆に、IPアドレスを指定して元の名前を問い合わせてみましょう。
# IPアドレスを指定して逆引きを行う
nslookup 93.184.216.34
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
34.216.184.93.in-addr.arpa name = example.com.
最後の行に name = example.com. と表示されましたね!番地から建物の名前を無事に特定できました。
【現場の知恵】問い合わせ先のDNSサーバーを指定してみる
トラブルシューティングで一番よくあるのが、「オフィスのDNSがおかしいのか?それとも世界中で見られない状態なのか?」を切り分けるシチュエーションです。
そんな時は、コマンドの末尾に「Googleの公開案内所(パブリックDNS: 8.8.8.8)」などを指定して実行します。
# 問い合わせ先をオフィスのルーターではなく、Googleの公開DNS (8.8.8.8) に直接指定する
nslookup example.com 8.8.8.8
これで結果が返ってくるなら「自分のパソコンや社内ルーターのDNS設定がおかしい」、これでも結果が返ってこないなら「ドメインの設定自体がおかしいか、相手のサーバーが完全に消滅している」といった問題の切り分けが一瞬で完了します。
—
3. じっくり腰を据えて調査する「対話モード」
非対話モードは便利ですが、メールサーバーの情報や別名設定など、色々なレコード(台帳の項目)を何回も連続して調べたいときには、毎回コマンドを打つのが少々面倒になります。
そこで登場するのが、DNSサーバーとチャットするように対話しながら調べる「対話モード」です。
対話モードに入る・出る
引数を何も付けずに nslookup とだけ打ってEnterキーを押すと、対話モードに入ります。
# 引数なしで実行すると対話モードがスタート
nslookup
プロンプトが > に変われば、案内所への専用ホットラインが開いた合図です。
終了して元の画面に戻りたいときは、exit と入力してEnterを押します。
> exit
レコードの種類(クエリタイプ)を切り替えてみよう
DNSには、「住所(IPアドレス)」だけでなく、さまざまな情報が登録されています。これらを「DNSレコード」と呼びます。
対話モード中では、set type=〇〇 という命令を使って、知りたい情報の種類を切り替えることができます。
主なレコードの種類は以下の通りです。
A(エー):通常のIPv4アドレス(一番よく使う住所)AAAA(クワッドエー):次世代のIPv6アドレスMX(エムエックス):メールの宛先となるメールサーバーの案内CNAME(シーネーム):別名(あだ名)。「このドメインはあっちのドメインと同じだよ」という転送設定TXT(テキスト):セキュリティ認証や設定用のメモ書きANY(エニー):登録されている全種類の情報を一括で要求
実際の対話モード操作例
それでは、対話モードを使ってメールサーバー(MX レコード)を調べてみましょう。
$ nslookup
> set type=mx
> example.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
example.com mail exchanger = 10 mail.example.com.
Authoritative answers can be found from:
mail.example.com internet address = 93.184.216.35
mail exchanger = 10 mail.example.com. という結果が得られました!
「example.com 宛のメールは、優先度 10 で mail.example.com(93.184.216.35)という郵便受けサーバーに届けてね」という内部の仕組みが丸見えになります。
続けて別のレコードを調べたいときは、モードを終了せずにそのまま次のコマンドを打てばOKです。
# 次は別名(CNAME)がないか調べてみる
> set type=cname
> www.example.com
# 調べるDNSサーバーそのものを途中で Google (8.8.8.8) に切り替える
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
# もう一度調べる
> www.example.com
このように、案内所の中に腰を落ち着けて、次々と資料をめくっていくような感覚で調査を進められるのが対話モード最大の強みです。
—
4. トラブル現場での実践テクニック:詳細デバッグ表示
最後に、私たち現場のエンジニアが「ドメインの切り替え工事がうまくいかない」「キャッシュの有効期限(TTL)が切れない」といったシビアな場面で使う隠し技をご紹介します。
それが set debug です。
$ nslookup
> set debug
> example.com
これを有効にしてドメインを問い合わせると、案内所とパソコンの間で交わされる「応答パケットの生データに近い詳細情報」がズラリと表示されます。
------------
Got answer:
HEADER:
opcode = QUERY, status = NOERROR, id = 54321
flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
QUESTIONS:
example.com, type = A, class = IN
ANSWERS:
-> example.com
internet address = 93.184.216.34
ttl = 3600 (1 hour)
------------
ここで特に注目したいのが ttl = 3600 (1 hour) という部分です。
TTL(Time To Live)とは、「この案内用紙(キャッシュ)を案内所の手元に何秒間キープしていいか」という有効期限を表しています。
「DNSを切り替えたはずなのに古いサーバーにアクセスがいってしまう!」というときは、このTTLがまだ残っていて、世界中のキャッシュDNSサーバーが古いIPアドレスを記憶し続けていることが原因だと見抜くことができます。
—
まとめ:DNSトラブルシュートの第一歩を踏み出そう
今回は、ネットワーク診断の超基本ツールである nslookup について、その背景にあるDNSの役割から、対話モード・非対話モードの実践的な使い方までを解説しました。
- DNSは「ドメイン名(名前)」と「IPアドレス(住所)」を変換する案内所
- 非対話モード(
nslookup ドメイン名 [DNSサーバー]):1行でサクッと手早く確認したいときに使う - 対話モード(引数なしで
nslookup):set type=やserverを使い、腰を据えて多角的に調査するときに使う
現代のLinux環境では、より出力がシンプルでスクリプトに組み込みやすい dig コマンドが好まれる場面も増えていますが、WindowsでもMacでもLinuxでも、追加インストールなしですぐに同じ感覚で使える nslookup の汎用性は、緊急トラブルの現場で今なお強力な武器になります。
まずはご自身のPCのターミナルを開いて、お気に入りのWebサイトのドメインを nslookup してみることから始めてみてください。インターネットの裏側で動く「パケットの旅路」が、少しずつ身近に見えてくるはずですよ!
コメント