DNSの基礎(リゾルバ, 権威サーバー, レコード種類, digで確認)

DNS関連の作業を行うときに知っておきたい用語や仕組みなどを整理します。また、digコマンドを利用した調査方法(ドメイン解決, TTLの確認など)についても取り上げます。

DNS関連用語

名前解決

  • ドメイン名からIPアドレスを求めること。
  • 名前解決に関連するファイル。
    • /etc/hosts
      • ドメインとIPの対応を記述して、DNS無しで名前解決する。
    • /etc/resolv.conf
      • DNSのIPを指定して、DNSに問い合わせて名前解決する。
$ cat /etc/resolv.conf | grep nameserver
nameserver 10.0.0.2
「正引き」と「逆引き」
正引き:ホスト名(ドメイン名)から対応するIPアドレスを導き出す。
逆引き:IPアドレスから対応するホスト名(ドメイン名)を導き出す。

DNSサーバーの種類
( リゾルバと権威サーバー )

722-it-dns_dns.png
  • リゾルバ
    • キャッシュDNSサーバー フルサービスリゾルバ とも呼ばれる。
    • ゾーン情報を管理しない。
    • 権威サーバーに問い合わせて名前解決をする。
    • 権威サーバーから取得した情報をキャッシュとして保存できる。
      • 保存期間は、権威サーバーで指定されたTTLを最大値とする。
  • 権威サーバー
    • DNSコンテンツサーバー とも呼ばれる。
    • ゾーン情報を管理する。

リゾルバにキャッシュとして情報が残っている場合、2~7 の問い合わせは行われません。

ドメイン種類
上記図でTLD, 2LDと表記されいます。例えば、www.google.com の場合以下のようになります。

TLD(Top Level Domain):com
2LD(Second Level Domain):google

レコード種類

代表的なレコードタイプを示します。

レコード種類 概要
SOA ゾーン(ドメイン)情報を記載
NS ドメインのDNSサーバーを指定
A ホスト名に対応するIPアドレスを指定
PTR IPアドレスに対応するホスト名を指定
CNAME ホスト名の別名(エイリアス)を指定
MX ドメインのメールサーバーを指定
TXT テキスト情報を指定
SPFDKIM で利用

digコマンドで確認

ドメインのIPアドレスを確認
( Aレコード )

dig 対象ドメイン
$ dig google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57744
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
google.com.             60      IN      A       172.217.25.110

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Sun Oct 20 09:08:56 2019
;; MSG SIZE  rcvd: 44
  • リゾルバ( 10.0.0.2 )に問い合わせています。
  • ANSWER SECTION に問い合わせ結果が表示されています。
    • TTLは 60秒 になっています。
    • google.com に対応するIPアドレス( 172.217.25.110 )が表示されています。

ドメインのDNSサーバーを確認
( NSレコード )

デフォルトでAレコードが取得されます。NSレコードを取得した場合、明示的にレコードタイプを指定します。

dig 対象ドメイン レコードタイプ
$ dig google.com ns

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> google.com ns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
google.com.             60      IN      NS      ns4.google.com.
google.com.             60      IN      NS      ns1.google.com.
google.com.             60      IN      NS      ns2.google.com.
google.com.             60      IN      NS      ns3.google.com.

;; Query time: 2 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Sun Oct 20 09:15:18 2019
;; MSG SIZE  rcvd: 100

レコードタイプに any を指定すると、全ての情報を取得できます。

DNSサーバーを指定して確認

問い合わせるDNSサーバーを指定することができます。

dig @DNSサーバー 対象ドメイン

権威サーバー( ns1.google.com )から問い合わせみます。

$ dig @ns1.google.com. google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> @ns1.google.com. google.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7600
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

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

;; ANSWER SECTION:
google.com.             300     IN      A       172.217.161.78

;; Query time: 70 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Sun Oct 20 09:19:23 2019
;; MSG SIZE  rcvd: 44

ルートサーバーから確認

+trace オプションを利用すると、ルートサーバーから順に、名前解決に使用された各サーバーの結果を表示します。

$ dig +trace google.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> +trace google.com
;; global options: +cmd
.                       518400  IN      NS      E.ROOT-SERVERS.NET.
.                       518400  IN      NS      F.ROOT-SERVERS.NET.
.                       518400  IN      NS      G.ROOT-SERVERS.NET.
.                       518400  IN      NS      H.ROOT-SERVERS.NET.
.                       518400  IN      NS      I.ROOT-SERVERS.NET.
.                       518400  IN      NS      J.ROOT-SERVERS.NET.
.                       518400  IN      NS      K.ROOT-SERVERS.NET.
.                       518400  IN      NS      L.ROOT-SERVERS.NET.
.                       518400  IN      NS      M.ROOT-SERVERS.NET.
.                       518400  IN      NS      A.ROOT-SERVERS.NET.
.                       518400  IN      NS      B.ROOT-SERVERS.NET.
.                       518400  IN      NS      C.ROOT-SERVERS.NET.
.                       518400  IN      NS      D.ROOT-SERVERS.NET.
;; Received 508 bytes from 10.0.0.2#53(10.0.0.2) in 6 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
;; Received 488 bytes from 192.58.128.30#53(192.58.128.30) in 8 ms

google.com.             172800  IN      NS      ns2.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.
;; Received 276 bytes from 192.48.79.30#53(192.48.79.30) in 172 ms

google.com.             300     IN      A       172.217.161.78
;; Received 44 bytes from 216.239.38.10#53(216.239.38.10) in 127 ms

参考