ネットワークエンジニアの皆さん、こんにちは!
大規模データセンターのNOC(ネットワークオペレーションセンター)で、数々のネットワーク障害と格闘してきたシニアエンジニアの私です。
夜中に鳴り響く「Webサイトに繋がらない!」というアラート。冷や汗をかきながら原因を切り分けていくと、その大半の犯人は――そう、大体「DNS(ドメインネームシステム)」の気まぐれだったりします。
ブラウザに「綺麗で覚えやすい名前(URL)」を入力したとき、裏側では「数字の住所(IPアドレス)」への変換が猛烈なスピードで行われていますよね。この名前解決の仕組みがどこで躓いているのかを見つけ出すための、最も身近で強力な相棒が nslookup コマンドです。
今回は、インフラの世界に飛び込んだばかりの皆さんに向けて、nslookup の「非対話モード」と「対話モード」の使い分けを、現場のリアルなノウハウを交えながら優しく紐解いていきましょう!
—
1. そもそもDNSってどんな仕組み?(身近な例えで理解する)
DNSの働きをパケットの細かい動きで考える前に、身近な世界に置き換えてみましょう。
インターネットの世界で、Webサイトのドメイン名(例: example.com)は、いわば「宛先不明の手紙に書かれた宛名(〇〇株式会社 御中)」のようなものです。しかし、郵便配達員(ルーターやパケットたち)が実際に荷物を届けるためには、その会社がどこにあるのかを示す「正確な住所(例: 192.0.2.1)」を知らなければなりません。
この「名前(宛名)」から「住所(IPアドレス)」を引く電話帳の役割をしてくれるのが、DNSサーバーです。
そして、「おい、この宛先の住所を教えてくれ!」とDNSサーバーに直接問い合わせるためのツールが nslookup なんです。
—
2. 単発でサクッと調べる「非対話モード」
障害対応の現場で、まず最初に私たちが手に取るのが nslookup の「非対話モード」です。
これは、1回だけ命令を投げて、すぐに結果を受け取ってコマンドが終了する、いわゆる「一問一答」のスタイルです。
例えば、「今すぐ example.com のIPアドレスを知りたい!」というときは、次のようにコマンドを叩きます。
# example.com のIPアドレス(Aレコード)をサクッと調べる
nslookup example.com
実行すると、次のような結果が返ってきます。
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 という部分です。これは「今、自分のパソコンがどの郵便局(DNSサーバー)に問い合わせているか」を示しています。
非対話モードはこんな時に使おう!
- シェルスクリプトの中に組み込んで、自動で名前解決テストをしたいとき
- 障害の第一報を受けて、「とりあえず今の名前引きが通るか」を1発で確認したいとき
—
3. じっくり腰を据えて調べる「対話モード」
非対話モードが「一問一答のスピード勝負」なら、「対話モード」はDNSサーバーと直接対話しながら、まるでカウンセリングのようにじっくりと原因を追い詰めるモードです。
現場で「特定のDNSサーバーだけに問い合わせたい」「いろんな種類のレコードを立て続けに調べたい」というときには、この対話モードが圧倒的な力を発揮します。
対話モードの世界に入ってみよう
オプションなどを付けずに、単に nslookup とだけ入力してEnterキーを押してみてください。
# nslookup単体で実行すると、プロンプトが変化します
nslookup
すると、見慣れない > という記号(プロンプト)が現れます。ここから先は、DNS専用の特別な世界に入ったことになります。
>
この状態で、調べたいドメイン名を次々に入力することができます。
> example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
> google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.250.196.14
>
いちいち nslookup の文字を打ち直す必要がないため、大量のドメインをサクサク調べたいときに非常に便利ですよね。
—
4. 現場で役立つ!対話モードの真骨頂「サーバーの切り替え」
ここからがシニアエンジニアからのワンランク上のアドバイスです。
障害の切り分けで最も多いのが、「社内のDNSサーバーが壊れているのか、それともインターネット上のパブリックDNSは正常なのか?」という疑問です。
対話モードを使えば、問い合わせる「郵便局(DNSサーバー)」をその場で自由に変更できます。
例えば、GoogleのパブリックDNS(8.8.8.8)から、社内のDNSサーバー(例: 192.168.1.10)に切り替えて問い合わせてみましょう。
> # 問い合わせ先のDNSサーバーを社内IPに変更する
> server 192.168.1.10
Default server: 192.168.1.10
Address: 192.168.1.10#53
> # その状態で、社内ニッチなサーバー名を引いてみる
> internal-server.local
Server: 192.168.1.10
Address: 192.168.1.10#53
Name: internal-server.local
Address: 192.168.100.50
「あれ? 外部の 8.8.8.8 に聞いても名前が出ないけれど、社内の 192.168.1.10 に聞いたら引けたぞ」となれば、「原因は社内DNSのフォワーダー設定やローカルゾーンの不具合だな!」と、一瞬でアタリをつけることができます。この切り分けスピードが、プロの技の見せ所です。
—
5. レコードの種類を自由に変える(set コマンド)
DNSには、IPアドレスを引くための Aレコード だけでなく、メールの配送先を決める MXレコード や、ドメインの所有者情報を表す TXTレコード など、さまざまな種類のデータが登録されています。
対話モードでは、set type= というコマンドを使って、調べる「質問の種類」を切り替えることができます。
> # 調べるレコードの種類をMX(メールサーバー)に変更する
> set type=MX
>
> # その状態でドメインを問い合わせる
> example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.com mail exchanger = 5 mx.example.com.
「メールが届かない!」というトラブルに直面したときは、非対話モードで毎回オプションを調べるよりも、対話モードに入って set type=MX を維持したまま、複数のドメインのメール設定を次々にチェックしていく方が圧倒的に効率的です。
—
まとめ:状況に合わせて使い分けよう!
今回は、nslookup の非対話モードと対話モードの基本と使い分けについて解説しました。
- 非対話モード (
nslookup ドメイン名): - 1回限りの確認や、スクリプトからの自動実行、スピード重視のときに使う。
- 対話モード (
nslookupのみ): - 問い合わせ先のDNSサーバー(
server)を切り替えながら原因を追うとき。 - レコードの種類(
set type=)を変えながら、複数の項目を連続して調査したいとき。
インフラの世界では、道具を適材適所で使い分けることがトラブルシューティングの第一歩です。
「なんだか難しそう…」と思っていた方も、まずは自分のパソコンで nslookup を叩いて、DNSの返事を受け取る感覚を楽しんでみてくださいね。
それでは、また次回のNOC現場レポートでお会いしましょう!一歩ずつ、確実にスキルアップしていきましょう!
コメント