Mac の nslookup:DNS ルックアップコマンドとその使い分け

Mac で nslookup、dig、host を使った DNS ルックアップの方法。伝播確認、MX レコードのチェック、間違った IP アドレスのデバッグの実践的な例を解説。

DNS レコードを確認したい場面があります。ホスティングプロバイダーを切り替えて、ドメインが新しいサーバーを指しているか確認したい。メールが届かず MX レコードの問題を疑っている。あるいはサイトが間違ったコンテンツを表示していて、DNS の問題なのかそれとも別の何かなのかを調べようとしている。

macOS には DNS ルックアップのための Terminal コマンドが 3 つ組み込まれています:nslookupdighost。すべて DNS に問い合わせますが、それぞれ結果の表示が異なり、適した状況も異なります。

DNS ルックアップが実際にすること

ブラウザにドメイン名を入力すると、Mac は DNS リゾルバー(通常は ISP のものか 1.1.1.1 などの公共リゾルバー)にそのドメイン名を IP アドレスに変換するよう依頼します。リゾルバーが答えを調べ、コンピューターはその IP に接続します。

DNS ルックアップはこの変換を自分で実行し、結果を確認するものです。ドメインがどの IP に解決されるか、メールをどのメールサーバーが処理するか、どのネームサーバーがそのドメインの権威を持つかを確認できます。これで日常的なデバッグのほとんどをカバーできます。

知っておく価値のある一般的なレコードタイプ:

  • A:IPv4 アドレス(最もよく調べるもの)
  • AAAA:IPv6 アドレス
  • MX:メールサーバー、優先度付き
  • CNAME:別のドメインを指すエイリアス
  • TXT:テキストレコード、SPF、DKIM、ドメイン確認に使用
  • NS:ドメインの権威ネームサーバー

Mac の nslookup:おなじみの出発点

nslookup はほとんどの人が最初に使うコマンドです。すべてのオペレーティングシステムに存在するため、どこかで DNS ルックアップを行ったことがあれば構文が馴染みやすいです。

基本的な A レコードの検索

nslookup google.com

出力には答えた DNS サーバーと IP アドレスが表示されます。「Non-authoritative answer」という行は結果がドメイン自体のネームサーバーではなくキャッシュから来ていることを意味します。これは正常です。

特定のレコードタイプを検索

nslookup -type=MX google.com

MX を任意のレコードタイプに置き換えてください:AAAAACNAMETXTNSSOA。例えば、メールのトラブルシューティングのために SPF と DKIM を確認する場合:

nslookup -type=TXT google.com

特定の DNS サーバーに問い合わせる

これが nslookup が本当に役立つ場面です。デフォルトリゾルバー(古いデータをキャッシュしている可能性がある)に問い合わせる代わりに、特定のサーバーに直接問い合わせることができます:

nslookup google.com 8.8.8.8
nslookup google.com 1.1.1.1

複数のサーバーに問い合わせることで DNS 変更が伝播しているか確認できます。8.8.8.8 が新しい IP を示しているのに 1.1.1.1 がまだ古い IP を示している場合、伝播はまだ進行中です。

nslookup の対話モード

引数なしで nslookup を入力するとプロンプトが表示されます。そこからコマンドを再入力せずに複数のクエリを実行できます:

> set type=MX
> google.com
> set type=A
> example.com
> exit

nslookup の主な欠点は、情報メッセージと実際の結果が混在した出力になることです。レコードタイプによってフォーマットが一貫しておらず、一目で解析するのが難しくなります。

dig:Mac での DNS のパワーツール

dig(Domain Information Groper)は定期的に DNS のトラブルシューティングを行うシステム管理者や開発者が好む Tool です。出力は構造化されていて一貫性があり、制御オプションは nslookup をはるかに超えています。

基本的なルックアップ

dig google.com

デフォルトで出力は詳細です:質問内容、回答セクション、タイミング、応答したサーバー。デバッグ中はその余分な情報が有用で、何が返されてどのくらい時間がかかったかを正確に確認できます。

+short で答えだけを取得

周囲の詳細なしで素早い答えが欲しい場合:

dig google.com +short

これは IP アドレスのみを出力します。スクリプティングや結果だけ知りたい場合に便利です:

dig google.com MX +short

MX レコードと優先度を一行ずつ返します。

特定のレコードタイプを検索

dig google.com MX
dig google.com TXT
dig google.com NS
dig google.com AAAA

特定の DNS サーバーに問い合わせる

dig @8.8.8.8 yourdomain.com
dig @1.1.1.1 yourdomain.com
dig @9.9.9.9 yourdomain.com

@ 構文でリゾルバーを指定します。これが複数の公共リゾルバー間で DNS 伝播を確認する最もクリーンな方法です。

完全な解決パスをトレース

dig google.com +trace

これは DNS 解決チェーン全体をたどります:ルートサーバー、TLD サーバー、そしてドメインの権威ネームサーバー。チェーンのどこかで DNS が壊れている場合、+trace は正確にどこで失敗するかを示します。

DNSSEC 検証を確認

dig google.com +dnssec

DNSSEC 署名レコードを出力に追加します。DNSSEC を有効にした後にドメインの DNSSEC セットアップが正しいことを確認する場合に便利です。

host:素早く読める選択肢

host は最小限の設定でクリーンで人間が読みやすい出力を提供します。dig が提供する詳細を必要とせず、素早い答えが欲しい場合に最適です。

host google.com

一度に A レコード、AAAA レコード、MX レコードを返します:

google.com has address 142.250.80.46
google.com has IPv6 address 2607:f8b0:4004:c1b::65
google.com mail is handled by 10 smtp.google.com.

特定のレコードタイプの場合:

host -t MX google.com
host -t TXT google.com

hostdig の高度なオプションには欠けますが、フラグなしで即座に読める出力を提供します。

どのツールをいつ使うか

コマンド 最適な用途 出力スタイル
nslookup クロスプラットフォームで馴染み深い、クイックチェック 冗長、メッセージが混在
dig 伝播確認、スクリプト、フルトレース 構造化、+shortでクリーンな出力
host 素早く読みやすい回答、フラグ不要 簡潔、平易なテキスト
dig +short スクリプト、バッチ確認、最小限の出力 生の回答のみ
dig +trace DNSの解決が失敗している場所を特定 ルートサーバーからの完全なチェーン
NetUtil GUI ターミナル不要、視覚的なレコード閲覧 クリック操作、整形された結果

クイックリファレンス:必要に応じて使うDNSツールの選び方。

実際の使用例

ホスティング変更後の DNS 伝播確認

サイトを新しいサーバーに移行して A レコードを更新しました。古いホスティングをキャンセルする前に変更が伝播したか確認したい。

dig @8.8.8.8 yourdomain.com +short
dig @1.1.1.1 yourdomain.com +short
dig @9.9.9.9 yourdomain.com +short

3 つすべてが同じ IP を返せば、ほとんどのユーザーに伝播が完了しています。異なる場合は、一部のリゾルバーがキャッシュした古いデータを提供しています。

そのキャッシュがどのくらい持続するか確認するには、TTL を確認します:

dig @1.1.1.1 yourdomain.com

回答セクションで、レコード名とレコードタイプの間の数字が秒単位の TTL です。TTL が 300 なら 5 分でキャッシュがクリアされます。86400 なら 24 時間待つことになるかもしれません。

MX レコードでメール配信のデバッグ

メールが届かない。SMTP ログを掘り下げる前に、MX レコードが正しいことを確認します:

nslookup -type=MX yourdomain.com

またはよりクリーンな出力のために dig を使う:

dig yourdomain.com MX +short

出力にはメールサーバーのホスト名と優先度が表示されます。数値が小さいほど優先度が高いです。ホスト名がメールプロバイダーから指定されたものと一致しない場合、それが問題です。

ついでに SPF と DKIM の TXT レコードも確認します:

dig yourdomain.com TXT +short

SPF レコードは v=spf1 include:... ~all のように見えます。これが欠けているか不正な形式の場合、それがメッセージがスパムに分類される理由です。

サイトが間違った IP に解決される理由のデバッグ

A レコードを 1 時間前に更新したのに、ドメインが古いサーバー IP に解決される。

まず、ローカルリゾルバーが何を見ているか確認します:

dig yourdomain.com +short

次に外部リゾルバーが何を見ているか確認します:

dig @8.8.8.8 yourdomain.com +short

異なる場合、ローカルリゾルバーが古い答えをキャッシュしています。TTL が切れるまで待つか、ローカル DNS キャッシュをフラッシュします:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

両方のリゾルバーが同じ間違った IP を示している場合、A レコード自体が正しく保存されていません。DNS プロバイダーにログインしてレコードを確認してください。

CNAME が正しく設定されているか確認

dig yourdomain.com CNAME +short

CNAME が指すターゲットドメインが返されます。何も返されない場合、その名前に CNAME がありません(代わりに A レコードがある可能性があり、意図的かもしれませんし設定ミスかもしれません)。

macOS での DNS キャッシュのフラッシュ

レコードを変更したり解決の問題を修正した後に Mac の DNS キャッシュをクリアする必要がある場合:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

このコマンドは macOS Monterey、Ventura、Sonoma、Sequoia で動作します。mDNSResponder プロセスはローカル DNS 解決を処理し、HUP を送信することで強制的にリロードされます。

フラッシュ後に dig または nslookup コマンドを再実行すると新鮮な結果が見えるはずです。

Terminal が苦手な場合

Apple は macOS Monterey で Network Utility を削除しました。それにより DNS ルックアップの唯一の組み込み GUI がなくなりました。

NetUtil は無料の代替品です。アプリを開き、「DNS ルックアップ」タブにドメインを入力し、レコードタイプを選択すれば、かつての Network Utility と同じ形式で結果が表示されます。コマンドを覚える必要も、フラグを調べる必要もありません。結果は dignslookup から得られるのと同じデータで、ただノイズなしで表示されます。

たまに DNS を確認する場合、GUI が手間を省きます。繰り返しのルックアップやスクリプト化したい場合は dig を使い続けてください。

用途に合ったツールを選ぶ

nslookup はクイックな確認に向いています。特にすでに使い慣れている場合は。dig は伝播確認、スクリプティング、または DNS の動作を詳しく調べる場合に優れています。host は IP が何に解決されるかを知りたいだけのときに最も素早く人間が読める答えへのパスです。

3 つすべてが同じ DNS システムに問い合わせます。違いは表示方法と制御にあります。必要な情報を手間なく得られるものを使ってください。