Qiita Conference 2025

Qiita史上最多!豪華12名のゲストが登壇

特別講演ゲスト(敬称略)

ymrl、成瀬允宣、鹿野壮、伊藤淳一、uhyo、徳丸浩、ミノ駆動、みのるん、桜庭洋之、tenntenn、けんちょん、こにふぁー

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

digコマンドを使ってみよう

Last updated at Posted at 2025-01-28

0.本稿について

  • 対象:digコマンドでドメインやIPの確認方法について学習したい初学者。
  • 目標:AlmaLinuxでdigコマンドでDNSクエリを発行し、基本的なDNS情報を取得できるようになる。
  • 想定:DNSについて基本的な部分をなんとなくレベルでも理解している初学者を想定。
  • 環境:本稿ではAlmaLinux9.xをMinimalで最小インストールした環境を使用しています。

正確さの省略について

本稿では概念をわかりやすくするために、簡略化した表現を使用し、一部専門的な詳細を省略している事があります。

1.はじめに

Linux環境で、ドメイン名が正しくIPアドレスに解決されているか確認したり、メールの送信先サーバ(MXレコード)を調べたりする際に、digコマンドがよく使われます。
本稿ではインストール・一般的な使い方を紹介します。

お品書き

  • 2.digコマンドのパッケージ
  • 3.digコマンドのインストール
  • 4.digコマンドの基本
  • 5.digコマンドの見方
  • 6.やってみよう

2.digコマンドのパッケージ

まずは、whichコマンドでdigを確認してみると入っていない事が分かります。

$ which dig
/usr/bin/which: no dig in (/home/yoyo/.local/bin:/home/yoyo/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)

なので、digコマンドが入っているパッケージを探します。

$ dnf provides dig
~~~中略~~~
bind-utils-32:9.16.23-24.el9_5.x86_64 : Utilities for querying DNS name servers
Repo        : appstream
Matched from:
Filename    : /usr/bin/dig

bind9.18-utils-32:9.18.29-1.el9.x86_64 : Utilities for querying DNS name servers
Repo        : appstream
Matched from:
Filename    : /usr/bin/dig

2つのパッケージで提供されている事が分かりました。今回はbind-utilsをインストールしてみます。

3.digコマンドのインストール

以下コマンドでインストールを行います。

$ dnf install bind-utils -y
~~~中略~~~
Installed:
  bind-libs-32:9.16.23-24.el9_5.x86_64        bind-license-32:9.16.23-24.el9_5.noarch        bind-utils-32:9.16.23-24.el9_5.x86_64
  fstrm-0.6.1-3.el9.x86_64                    libmaxminddb-1.5.2-4.el9.x86_64                libuv-1:1.42.0-2.el9_4.x86_64
  protobuf-c-1.3.3-13.el9.x86_64

whichコマンドを実行してみると今度はno digの表示が出ません。

$ which dig
/usr/bin/dig

あまり意味はありませんが、以下コマンドでバージョンの確認ができます。

$ dig -v
DiG 9.16.23-RH

4.digコマンドの基本

digコマンドは基本的に以下のように使用します。

dig ドメイン名 [タイプ] [@DNSサーバ]

実際にdigコマンドを使ってみましょう。

dig

まずは、何もつけずに単にdigを実行してみましょう。すると、以下のように表示されます。
各項目の見方は後述しますが、これでルートサーバの情報を見る事ができます。

$ dig
; <<>> DiG 9.16.23-RH <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3723
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1400
;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       255202  IN      NS      i.root-servers.net.
.                       255202  IN      NS      a.root-servers.net.
.                       255202  IN      NS      k.root-servers.net.
.                       255202  IN      NS      c.root-servers.net.
.                       255202  IN      NS      h.root-servers.net.
.                       255202  IN      NS      m.root-servers.net.
.                       255202  IN      NS      l.root-servers.net.
.                       255202  IN      NS      f.root-servers.net.
.                       255202  IN      NS      j.root-servers.net.
.                       255202  IN      NS      b.root-servers.net.
.                       255202  IN      NS      d.root-servers.net.
.                       255202  IN      NS      e.root-servers.net.
.                       255202  IN      NS      g.root-servers.net.

;; ADDITIONAL SECTION:
l.root-servers.net.     255202  IN      A       199.7.83.42
l.root-servers.net.     255202  IN      AAAA    2001:500:9f::42
f.root-servers.net.     255202  IN      A       192.5.5.241
f.root-servers.net.     255202  IN      AAAA    2001:500:2f::f
j.root-servers.net.     255202  IN      AAAA    2001:503:c27::2:30
b.root-servers.net.     255202  IN      A       170.247.170.2
b.root-servers.net.     255202  IN      AAAA    2801:1b8:10::b
d.root-servers.net.     255202  IN      AAAA    2001:500:2d::d
g.root-servers.net.     255202  IN      A       192.112.36.4
g.root-servers.net.     255202  IN      AAAA    2001:500:12::d0d
a.root-servers.net.     255202  IN      A       198.41.0.4
a.root-servers.net.     255202  IN      AAAA    2001:503:ba3e::2:30

;; Query time: 6 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan 28 14:14:14 JST 2025
;; MSG SIZE  rcvd: 923

dig ドメイン名

調べたいドメイン情報を調べる場合は以下のように実行します。

$ dig ドメイン名

後述する[@DNSサーバ]を省略した場合は、使用しているLinuxシステムのデフォルトのDNSサーバに問合せを行います。この場合は、DNSが192.168.1.1となっているため、192.168.1.1に問合せを行います。

例えばgoogle.comのドメイン情報を調べる場合は以下のようになります。

$ dig google.com
; <<>> DiG 9.16.23-RH <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50833
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1400
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             205     IN      A       142.250.198.14

;; Query time: 7 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan 28 15:39:31 JST 2025
;; MSG SIZE  rcvd: 55

dig ドメイン名 @DNSサーバ

特定のDNSサーバを経由してドメイン情報を調べたい場合は以下のように実行します。

$ dig ドメイン名 @DNSサーバ

例えばgoogle.comのドメイン情報をDNSサーバ8.8.8.8に問い合わせて調べたい場合は以下のようになります。

dig google.com @8.8.8.8
; <<>> DiG 9.16.23-RH <<>> google.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17150
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             34      IN      A       142.251.42.142

;; Query time: 5 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 28 15:42:04 JST 2025
;; MSG SIZE  rcvd: 55

dig ドメイン名 レコード

以下のようなコマンドで、ドメインが提供しているレコードを調べる事ができます。

$ dig ドメイン名 レコード名

例えばgoogle.comドメインが提供しているMXレコードを調べたい場合は以下のようになります。

 dig google.com MX
; <<>> DiG 9.16.23-RH <<>> google.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29791
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1400
;; QUESTION SECTION:
;google.com.                    IN      MX

;; ANSWER SECTION:
google.com.             188     IN      MX      10 smtp.google.com.

;; Query time: 5 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan 28 16:22:57 JST 2025
;; MSG SIZE  rcvd: 60

レコードタイプ省略時

digコマンドでレコードタイプを省略した場合はデフォルトでAレコードが指定されます。

5.digコマンドの見方

先に使い方とその結果を書いたので前後しますが、digコマンドを実行すると、いくつかのセクションごとに分けられて情報が表示されます。
以下の結果を例に代表的なセクションを説明します。

dig google.com

; <<>> DiG 9.16.23-RH <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65346
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1400
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             93      IN      A       172.217.174.110

;; Query time: 6 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan 28 16:26:24 JST 2025
;; MSG SIZE  rcvd: 55

5.1 HEADER SECTION

最初に表示されるのはヘッダーセクションと呼ばれます。
ここで表示されるのは、

  • 1行目:digツールのバージョン情報、問い合わせたドメイン名
  • 4行目:実行されたクエリの種類、クエリの結果ステータス、クエリのID
  • 5行目:クエリや応答のフラグ情報、クエリの問合せ回数、応答に含まれるレコードの数、応答に含まれる権威サーバの数、追加レコードの数

です。

; <<>> DiG 9.16.23-RH <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65346
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

DNSのデータフォーマット的には4,5行目がヘッダーセクションになります。

5.2 OPT PSEUDOSECTION

DNSの拡張機能である、EDNSの情報を提供します。

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1400

5.3 QUESTION SECTION

問合せたドメイン名とそのレコードを表示します。

;; QUESTION SECTION:
;google.com.                    IN      A

5.4 ANSWER SECTION

問合せたドメイン名、TTL、問い合わせたレコードタイプ、レコードの値(IPアドレス)が表示されます。
この場合、google.comのAレコードの結果を問合せ、その結果として172.217.174.110が表示されています。

;; ANSWER SECTION:
google.com.             93      IN      A       172.217.174.110

5.5 統計情報

最後に統計情報が表示されます。

;; Query time: 6 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Jan 28 16:26:24 JST 2025
;; MSG SIZE  rcvd: 55
  • Query time:問い合わせに要した時間
  • SERVER:問合せを行ったサーバ、ポート
  • WHEN:問い合わせを行った日時
  • MSG SIZE rcvd:受信したメッセージのサイズ

6.やってみよう

実際にコマンドを実行し、その表示結果の差異を何度も見比べる事で理解度が上がります。

本稿のまとめとして、以下をやってみましょう。

  • 自分の知っているDNSドメインのDNS情報を参照してみる
  • DNSサーバを1.1.1.18.8.8.8などのパブリックDNSサーバにして、違いなどを探してみる
  • digコマンドで権威サーバを調べ、DNSサーバを権威サーバにしてどう表示されるか見てみる

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?