DNSサーバーが正常に動作しているかどうか確認するには? digコマンドネットワーク管理の基本Tips

本連載ではネットワーク管理の基本コマンドを解説していきます。普段使うもの以外のオプションの確認やおさらいをしていきましょう。

» 2014年10月15日 20時00分 公開
[海上忍@IT]

バックナンバー

連載バックナンバー

 本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。初回となる今回は、DNSサーバーへの問い合わせを行う「dig」コマンドの解説です。

digとは?

 DNSサーバーが正常に動作しているかどうか確認したい、問題がどこにあるかを突き止めたい、そんな時に「dig」を利用します。domain information groper(ドメイン情報探索ツール)という名前の由来通り、DNSサーバーに対し問い合わせを行い、その応答結果を表示するコマンドです。

digコマンドの書式

dig [digオプション] [@ネームサーバー] 検索ドメイン [クエリータイプ] [クエリーオプション]

※[ ]は省略可能な引数を示しています



概要

 IPアドレスとドメイン名をひも付け、ネットワーク経路を制御する機能を提供するサーバーのことを、ネームサーバーと呼びます。ネームサーバーには幾つか種類がありますが「BIND」を用いるのが一般的です。

 digコマンドはBINDへの問い合わせに利用するコマンドです。名前解決の状況確認やトラブルシューティングといったネームサーバーの管理用途に利用されます。

 機能的にはnslookupと共通項が多いものの、BIND 9以降はnslookupが非推奨になっており、将来のリリースでは廃止される可能性があります。nslookupよりも詳細な情報を確認できるdigを利用するようにしましょう。

書式解説

 digの基本的な書式は、必要な場合はdigオプションを指定し、問い合わせるネームサーバー(例:@dns.example.com、またはxx.xx.xx.xxのようなIPアドレス)、検索するドメイン、クエリータイプクエリーオプションの順に引数を指定します。

 ネームサーバーを省略した場合は、/etc/resolv.confのnameserver行で定義されたネームサーバーに問い合わせが行われます。resolv.confの定義が複数ある場合は先頭行にあるネームサーバーに問い合わせます。

主なdigコマンドのオプション

オプション 意味
domain=NAME デフォルトドメイン名をNAMEに指定する
retry=# 再試行の回数を#に設定する
time=# タイムアウト時間を#秒に設定する
-x 逆アドレス変換を指定する
+answer Answerセクションのみ表示する(+noallと併用)
+multiline 出力結果を整形する
+noall 何も表示しない
+norecurse 再帰問い合わせしない
+stats 問い合わせの統計を表示する
+trace ルートDNSから問い合わせを行い、結果を順番に出力する

クエリータイプの指定方法

オプション 意味
A ネットワークアドレス
ANY 指定されたドメインの全情報
HINFO ホスト情報
MX メールアドレスに使用するドメイン名
NS ゾーン権限を持つネームサーバー
SOA ゾーン情報が記述されたレコード
TXT 任意の文字列

クエリーオプションの指定方法

オプション 意味
-4 IPv4で問い合わせる
-6 IPv6で問い合わせる(接続不可の場合はIPv4)
-p # ポート番号を#に指定する

ホスト名からIPアドレスを調べるには?

dig ホスト名


 ネームサーバー名(ホスト名)からそのIPアドレスを調べる場合は、引数にネームサーバー名だけを指定します。するとサーバーとのやりとりが表示され、「ANSWER SECTION」に問い合わせに対する回答(この実行例ではネームサーバーに対応するIPアドレス)が表示されます。

 なお、「QUESTION SECTION」には問い合わせ内容、「AUTHORITY SECTION」には問い合わせ先に権威がある場合の情報、「ADDITIONAL SECTION」にはホストのIPアドレスなど付帯情報が表示されます。

 下図は、digコマンドを使って、「atmarkit.co.jp」のIPアドレスを確認する場合の入出力例です。

$ dig atmarkit.co.jp
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> atmarkit.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60549
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;atmarkit.co.jp.			IN	A
;; ANSWER SECTION:
atmarkit.co.jp.		299	IN	A	202.218.219.147

IPアドレスをもとにネームサーバ名を確認するには?(逆引き)

dig -x IPアドレス


 先のサンプルとは逆に、IPアドレスを基に、ネームサーバー名を調べたい場合は、digオプションに「-x」を指定し、問い合わせたいIPアドレスを引数とします。

 すると、検索ドメインは「xxx.xxx.xxx.xxx.in-addr.arpa」の形式に変換されて実行されます。なお、正引きの場合はAレコード、逆引きの場合はPTRレコードが返されますが、明示することも可能です(ex. dig -x 8.8.4.4 ptr)。

$ dig -x 8.8.4.4
・
・
・
;; ANSWER SECTION:
4.4.8.8.in-addr.arpa.	21599	IN	PTR	google-public-dns-b.google.com.

ドメインを管理しているネームサーバーを調べるには?

dig ホスト名 ns

dig ネームサーバー soa


 指定したドメインに複数のネームサーバーがある場合、クエリータイプに「NS」を指定すると、ネームサーバーのリストを表示できます。

 また、リストに表示されたネームサーバーに対しクエリータイプ「SOA」で問い合わせると、プライマリネームサーバーを確認することができます(以下の実行例では「itmns01.itmedia.co.jp」がプライマリネームサーバー)。

$ dig atmarkit.co.jp ns
・
・
・
;; ANSWER SECTION:
atmarkit.co.jp.		20974	IN	NS	dridcns01.itmedia.co.jp.
atmarkit.co.jp.		20974	IN	NS	idcns01.itmedia.co.jp.
atmarkit.co.jp.		20974	IN	NS	itmns02.itmedia.co.jp.
atmarkit.co.jp.		20974	IN	NS	itmns01.itmedia.co.jp.
$ dig dridcns01.itmedia.co.jp soa
・
・
・
;; AUTHORITY SECTION:
itmedia.co.jp.		1799	IN	SOA	itmns01.itmedia.co.jp. postmaster.itmedia.co.jp. 2014073101 3600 600 1209600 3600

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。