digとnslookupは、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 codingls.com # ... (省略) ... # ;; ANSWER SECTION: # codingls.com. 1201 IN A 202.226.39.59 # ↑ドメイン ↑TTL ↑種類 ↑IPアドレス # # ;; Query time: 3 msec ← 問い合わせにかかった時間
実際に当サイトcodingls.comをdigで引いたところ、ANSWER SECTIONにcodingls.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アドレスなど)だけが表示され、スクリプトでも扱いやすくなります。
# 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.comが202.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サーバーを指定できます。
# 逆引き: 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 経由
実機で、dig +short -x 8.8.8.8による逆引きでdns.google.が得られ、dig +short @8.8.8.8 codingls.comでGoogleの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 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.comがName: codingls.com / Address: 202.226.39.59とシンプルに結果を返すことを確認しました。手軽さならnslookup、詳細な調査やスクリプト利用ならdigと使い分けます。なお、digやnslookupが入っていない場合は、Debian/Ubuntuならapt install dnsutils、RHEL系ならyum install bind-utilsで導入できます。
存在しないドメイン(NXDOMAIN)
ドメインが存在しない場合、digはstatus: NXDOMAIN(Non-eXistent Domain)と表示します。これはpingの「Name or service not known」と同じ「そのドメインは存在しない」という意味です。
dig nonexist-zzz-999.invalid # ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, ... # ↑ ドメインが存在しない # status の主な値: # NOERROR … 正常(レコードが見つかった) # NXDOMAIN … ドメインが存在しない # SERVFAIL … DNSサーバー側のエラー
実機でも、存在しないドメインを引くとstatus: NXDOMAINが表示されることを確認しました。digのHEADER行にあるstatusは結果の状態を表し、NOERROR(正常)・NXDOMAIN(存在しない)・SERVFAIL(DNSサーバーのエラー)などがあります。「ドメインのタイプミス」なのか「DNSサーバー自体の不調」なのかを、このstatusで切り分けられます。
主な書き方一覧
dig・nslookupでよく使う書き方をまとめます。
| 書き方 | 働き |
|---|---|
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サーバー側の問題です。
よくある質問
dig +short ドメイン名が最も簡潔です。IPアドレスだけが表示されます。詳しく見たい場合はdig ドメイン名で、ANSWER SECTIONにドメインとIPの対応が表示されます。実機でも、当サイトのIP(202.226.39.59)が正しく引けることを確認しています。dig、手軽に確認するだけならnslookupが向いています。現在は情報量が多くオプションも柔軟なdigが実務で好まれます。nslookupはよりシンプルで、多くの環境に古くから入っています。どちらもdnsutils(Debian系)などのパッケージで導入できます。dig ドメイン MXで調べます。SPFやドメイン認証などの文字列情報はdig ドメイン TXTで確認できます。実機でも、TXTレコードでドメイン認証の文字列が取得できることを確認しています。「メールが届かない」ならMX、「認証が通らない」ならTXTを見てください。dig @8.8.8.8 ドメインのように、複数のDNSサーバー(Googleの8.8.8.8、Cloudflareの1.1.1.1など)を指定して同じドメインを引き、結果が一致するか確認します。まだ古い値を返すDNSがあれば反映途中、すべて新しい値なら反映完了と判断できます。TTLの値が反映にかかる時間の目安になります。dig -x IPアドレスで逆引きができます。実機でも、dig +short -x 8.8.8.8でdns.google.が得られることを確認しています。ただし、すべてのIPに逆引き(PTRレコード)が設定されているわけではないため、結果が返らないこともあります。アクセスログのIPの素性を調べるときなどに使います。まとめ
dig +short ドメインでIPアドレスを簡潔に調べられます。MX(メール)・TXT(認証)・NS(ネームサーバー)を種類指定で確認。dig -x IPで逆引き、dig @DNS ドメインでDNSサーバーを指定。- DNS反映確認は複数DNSに
@指定して結果を比べます。 - 手軽さは
nslookup、詳細はdig。存在しないドメインはNXDOMAIN。
dig・nslookupは、ドメインとサーバーの「住所録」であるDNSを覗くための道具です。pingで名前解決に失敗したとき、digで「そもそもDNSに登録があるか」を確認すれば、原因がDNSにあるのかネットワークにあるのかを切り分けられます。サーバー移転やドメイン設定の確認に、ぜひ活用してください。
- grep(文字列検索)
- find(ファイル検索)
- sed(置換・行編集)
- awk(列抽出・集計)
- cut(列の切り出し)
- chmod(パーミッション)
- tar(圧縮・解凍)
- リダイレクトとパイプ
- echo・printf(文字列出力)
- ps・kill(プロセス管理)
- 環境変数とPATH
- which・type(コマンドの正体)
- ln(シンボリックリンク)
- cp・mv・rm(コピー/移動/削除)
- touch・mkdir(ファイル/フォルダ作成)
- basename・dirname(パス分解)
- history(コマンド履歴)
- curl(HTTP通信・API)
- ping(疎通確認)
- dig・nslookup(DNS調査)
- jq(JSON処理)
- vim(基本操作・終了方法)
- cron・crontab(定期実行)
- test・[ ](条件判定)
- read(入力の読み取り)
- date(日付・時刻)
- sort・uniq・wc(並べ替え/集計)
- xargs(一括処理)
- chown・chgrp(所有者/グループ変更)
- diff(ファイル比較)
- du・df(ディスク使用量)
- head・tail(先頭/末尾・ログ監視)
- cat・less(ファイル表示)
- alias(コマンドの別名)
- nohup(SSH切断対策)
- tmux(セッション管理)
- よく使うコマンドまとめ
- cd(ディレクトリ移動)
