【Linux】dig・nslookupでDNSを調べる方法|A/MX/TXTレコード・+short・@でDNS指定

dignslookupは、DNS(ドメイン名とIPアドレスの対応)を調べるコマンドです。「このドメインはどのIPアドレスを指しているか」「メールはどのサーバーに届くか」「ネームサーバーはどこか」といった、ドメインにまつわる情報を確認できます。pingが名前解決に失敗するときの原因調査や、サーバー移転やDNS設定変更が正しく反映されたかの確認に欠かせません。

2つのうち、現在はdigのほうが情報量が多く、実務で好まれますnslookupは古くからありシンプル)。この記事では、実際のドメイン(当サイトcodingls.comを含む)のDNSを引きながら、digを中心にAレコード・MXレコード・逆引き・DNSサーバー指定といった実用的な使い方を整理します。digは初期状態では入っていないこともありますが、apt install dnsutils(Debian/Ubuntu)などで簡単に導入できます。

先に結論

  • dig ドメインAレコード(IPアドレス)を調べます。
  • dig +short ドメインで、結果(IPだけ)を簡潔に表示できます。
  • dig ドメイン MXメールサーバーTXTでSPFなど、NSでネームサーバーを調べます。
  • dig -x IPアドレス逆引き(IP→ドメイン)ができます。
  • dig @8.8.8.8 ドメイン問い合わせ先のDNSサーバーを指定できます。
  • 存在しないドメインはstatus: NXDOMAINと表示されます。

疎通確認のping、HTTPレベルの確認はcurl、出力の絞り込みはgrepもあわせて参考になります。

スポンサーリンク

digの基本:Aレコード(IPアドレス)を引く

dig ドメイン名で、そのドメインのAレコード(IPアドレス)を調べます。出力は情報量が多いですが、注目するのはANSWER SECTIONです。ここに「ドメイン→IP」の対応が表示されます。

dig の基本
dig codingls.com

# ... (省略) ...
# ;; ANSWER SECTION:
# codingls.com.    1201    IN    A    202.226.39.59
#      ↑ドメイン     ↑TTL       ↑種類  ↑IPアドレス
#
# ;; Query time: 3 msec   ← 問い合わせにかかった時間

実際に当サイトcodingls.comdigで引いたところ、ANSWER SECTIONcodingls.com. 1201 IN A 202.226.39.59と表示されました。左からドメイン名・TTL(キャッシュ有効秒数)・クラス(IN=インターネット)・レコード種類(A)・IPアドレスです。つまりこのドメインは202.226.39.59というIPを指している、と分かります。TTL(この例では1201秒)は、この結果がDNSキャッシュに保持される時間で、DNS設定を変更したとき「反映までどれくらいかかるか」の目安になります。

+shortで結果だけを簡潔に表示

digの出力は詳しすぎて見づらいことがあります。+shortオプションを付けると、答え(IPアドレスなど)だけが表示され、スクリプトでも扱いやすくなります。

+short で簡潔に
# IPアドレスだけを表示
dig +short codingls.com
# 202.226.39.59

# 複数IPを持つドメイン(ロードバランス)
dig +short google.com
# 192.178.230.102
# 192.178.230.100
#   ↑ 複数のIPが返ることもある

# スクリプトで変数に入れる
IP=$(dig +short codingls.com)
echo "IPは $IP です" 

実機でも、dig +short codingls.com202.226.39.59という結果だけを返し、dig +short google.comでは複数のIPアドレスが返ることを確認しました(大規模サイトは負荷分散のため複数のIPを持ちます)。+shortは出力が1行なので、IP=$(dig +short ドメイン)のようにスクリプトで変数に入れるのに最適です。「まずIPだけサッと知りたい」ときはdig +shortが最速です。

レコードの種類を指定する(MX / TXT / NS)

DNSには、IPアドレス(A)以外にもさまざまな種類のレコードがあります。dig ドメイン 種類で調べられます。よく使うのはMX(メールサーバー)・TXT(認証情報など)・NS(ネームサーバー)です。

レコード種類の指定
# MX: メールがどのサーバーに届くか
dig +short codingls.com MX
# 0 codingls.com.

# TXT: SPF・ドメイン認証などの文字列情報
dig +short codingls.com TXT
# "google-site-verification=..."

# NS: このドメインを管理するネームサーバー
dig +short codingls.com NS
# ns2.xserver.jp.
# ns3.xserver.jp.
# ns4.xserver.jp.

# CNAME: 別名(エイリアス)の参照先
dig +short www.example.com CNAME

実際にcodingls.comで確認したところ、MXレコードでメール配送先、TXTレコードgoogle-site-verification(Google Search Consoleのドメイン認証)、NSレコードns2〜ns4.xserver.jp(エックスサーバーのネームサーバー)が正しく取得できました。主なレコードの意味は、A=IPアドレス、MX=メールサーバー、TXT=SPFやドメイン認証などの文字列、NS=管理ネームサーバー、CNAME=別名の参照先です。「メールが届かない」ならMX、「ドメイン認証が通らない」ならTXT、というように、トラブルの種類に応じて調べるレコードを選びます。

逆引き(IP→ドメイン)とDNSサーバー指定

dig -x IPアドレス逆引き(IPアドレスからドメイン名を調べる)ができます。また、@問い合わせ先のDNSサーバーを指定できます。

逆引きと@によるDNS指定
# 逆引き: IP から ドメイン名を調べる
dig +short -x 8.8.8.8
# dns.google.

# @ で特定のDNSサーバーに問い合わせる
dig +short @8.8.8.8 codingls.com
# 202.226.39.59
#   ↑ GoogleのDNS(8.8.8.8)経由で引いた結果

# 自分のDNSと公開DNSで結果を比べる(反映確認に便利)
dig +short codingls.com              # 通常のDNS
dig +short @1.1.1.1 codingls.com     # Cloudflare DNS 経由
@指定はDNS反映確認の必需品(実証)

実機で、dig +short -x 8.8.8.8による逆引きでdns.google.が得られ、dig +short @8.8.8.8 codingls.comGoogleのDNS経由でも正しく202.226.39.59が返ることを確認しました。この@DNSサーバー指定が特に役立つのが、DNS設定を変更したときの反映確認です。DNSの変更は世界中のDNSサーバーに伝わるまで時間差があるため、複数のDNS(自分のプロバイダ・Googleの8.8.8.8・Cloudflareの1.1.1.1など)で同じドメインを引いて、結果が一致するかを確認します。まだ古いIPを返すDNSがあれば「反映途中」、すべて新しいIPなら「反映完了」と判断できます。サーバー移転やドメイン取得時の「切り替えがちゃんと効いているか」の確認に、この@指定は欠かせません。逆引きは、アクセスログのIPが「どこのホストか」を調べるときなどに使います。

nslookupとの違い

nslookupも同じくDNSを調べるコマンドですが、digのほうが出力が詳細で、スクリプトにも向いていますnslookupはよりシンプルで、多くの環境に古くから入っています。

nslookup
# nslookup の基本(単発の問い合わせ)
nslookup codingls.com
# Name:    codingls.com
# Address: 202.226.39.59

# レコード種類の指定
nslookup -type=MX codingls.com

# DNSサーバーを指定
nslookup codingls.com 8.8.8.8

実機でも、nslookup codingls.comName: codingls.com / Address: 202.226.39.59とシンプルに結果を返すことを確認しました。手軽さならnslookup、詳細な調査やスクリプト利用ならdigと使い分けます。なお、dignslookupが入っていない場合は、Debian/Ubuntuならapt install dnsutils、RHEL系ならyum install bind-utilsで導入できます。

存在しないドメイン(NXDOMAIN)

ドメインが存在しない場合、digstatus: NXDOMAIN(Non-eXistent Domain)と表示します。これはpingの「Name or service not known」と同じ「そのドメインは存在しない」という意味です。

NXDOMAIN
dig nonexist-zzz-999.invalid
# ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, ...
#                                       ↑ ドメインが存在しない

# status の主な値:
#   NOERROR   … 正常(レコードが見つかった)
#   NXDOMAIN  … ドメインが存在しない
#   SERVFAIL  … DNSサーバー側のエラー

実機でも、存在しないドメインを引くとstatus: NXDOMAINが表示されることを確認しました。digHEADER行にあるstatusは結果の状態を表し、NOERROR(正常)・NXDOMAIN(存在しない)・SERVFAIL(DNSサーバーのエラー)などがあります。「ドメインのタイプミス」なのか「DNSサーバー自体の不調」なのかを、このstatusで切り分けられます。

主な書き方一覧

dignslookupでよく使う書き方をまとめます。

書き方 働き
dig ドメイン Aレコード(IP)を調べる
dig +short ドメイン 結果だけ簡潔に表示
dig ドメイン MX/TXT/NS 種類を指定して調べる
dig -x IP 逆引き(IP→ドメイン)
dig @8.8.8.8 ドメイン DNSサーバーを指定
nslookup ドメイン シンプルなDNS問い合わせ

よくある失敗

digの出力が多すぎて見づらい

+shortを付けると答えだけが表示されます。詳細はANSWER SECTIONを見ます。

メールの調査でAレコードを見てしまう

メール配送先はMXレコードです。dig ドメイン MXで調べます。

DNS変更が反映されたか分からない

dig @8.8.8.8など複数のDNSで引いて、結果が一致するか確認します。

digコマンドが無い

apt install dnsutils(Debian/Ubuntu)などで導入します。

NXDOMAINとSERVFAILを混同する

NXDOMAINはドメインが存在しない、SERVFAILはDNSサーバー側の問題です。

よくある質問

QドメインのIPアドレスを調べるには?
Adig +short ドメイン名が最も簡潔です。IPアドレスだけが表示されます。詳しく見たい場合はdig ドメイン名で、ANSWER SECTIONにドメインとIPの対応が表示されます。実機でも、当サイトのIP(202.226.39.59)が正しく引けることを確認しています。
Qdigとnslookupはどちらを使うべきですか?
A詳細な調査やスクリプトでの利用ならdig、手軽に確認するだけならnslookupが向いています。現在は情報量が多くオプションも柔軟なdigが実務で好まれます。nslookupはよりシンプルで、多くの環境に古くから入っています。どちらもdnsutils(Debian系)などのパッケージで導入できます。
QメールサーバーやSPFを確認するには?
Aメールの配送先はdig ドメイン MXで調べます。SPFやドメイン認証などの文字列情報はdig ドメイン TXTで確認できます。実機でも、TXTレコードでドメイン認証の文字列が取得できることを確認しています。「メールが届かない」ならMX、「認証が通らない」ならTXTを見てください。
QDNSの設定変更が反映されたか確認するには?
Adig @8.8.8.8 ドメインのように、複数のDNSサーバー(Googleの8.8.8.8、Cloudflareの1.1.1.1など)を指定して同じドメインを引き、結果が一致するか確認します。まだ古い値を返すDNSがあれば反映途中、すべて新しい値なら反映完了と判断できます。TTLの値が反映にかかる時間の目安になります。
QIPアドレスからドメイン名を調べられますか?
Adig -x IPアドレスで逆引きができます。実機でも、dig +short -x 8.8.8.8dns.google.が得られることを確認しています。ただし、すべてのIPに逆引き(PTRレコード)が設定されているわけではないため、結果が返らないこともあります。アクセスログのIPの素性を調べるときなどに使います。

まとめ

  • dig +short ドメインでIPアドレスを簡潔に調べられます。
  • MX(メール)・TXT(認証)・NS(ネームサーバー)を種類指定で確認。
  • dig -x IPで逆引き、dig @DNS ドメインDNSサーバーを指定
  • DNS反映確認は複数DNSに@指定して結果を比べます。
  • 手軽さはnslookup、詳細はdig。存在しないドメインはNXDOMAIN

dignslookupは、ドメインとサーバーの「住所録」であるDNSを覗くための道具です。pingで名前解決に失敗したとき、digで「そもそもDNSに登録があるか」を確認すれば、原因がDNSにあるのかネットワークにあるのかを切り分けられます。サーバー移転やドメイン設定の確認に、ぜひ活用してください。