mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

nslookupよりdig!DNS初心者向けのdig解説

このサイト(例えばhttps://infra.xyz/)って、どこのウェブサーバ使ってるんだっけ?というときは、

host infra.xyz

とか

nslookup
> set type=a
> infra.xyz

でもいけますが、nslookupは既に開発も止まっていて、ゆくゆくは無くなると言われているので、nslookupよりはdigを使おう!と思っています。

でもdig、叩くとこんな感じでべろべろっと色々出るので最初驚くんだよね。

$ dig infra.xyz

; <<>> DiG 9.10.0-P1 <<>> infra.xyz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33266
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;infra.xyz.                     IN      A

;; ANSWER SECTION:
infra.xyz.              600     IN      A       153.121.58.159

;; AUTHORITY SECTION:
infra.xyz.              600     IN      NS      ns1.infra.xyz.
infra.xyz.              600     IN      NS      ns2.infra.xyz.

;; ADDITIONAL SECTION:
ns1.infra.xyz.          600     IN      A       153.121.58.159
ns2.infra.xyz.          600     IN      A       54.64.115.59

;; Query time: 272 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Feb 28 22:24:44 JST 2015
;; MSG SIZE  rcvd: 122

どこ見たらいいの・・・という訳で一つずつ解説。

先ず、いちばん上にあるのがHEADER。

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33266
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

今回は「status: NOERROR」となってるけど、これは普通に聞いて、普通に返ってきたのでNOERROR(正常)。 他には、NXDOMAIN(リクエストされた名前が存在しない)、REFUSED(リクエストが拒否された)、FORMERR(DNSメッセージのフォーマットが不正)、SERVFAIL(DNSサーバ側の状態が異常)などがある。

「flags: qr rd ra;」は、qr(問い合わせたクエリに対する回答であること)、rd(再帰的問い合わせに対する回答であること)、ra(キャッシュサーバが再帰問い合わせを許可していること)を表している。

なので、どこかのサーバから

dig infra.xyz @ns1.infra.xyz

DNSコンテンツサーバを指定して叩くと、「flags: qr aa rd;」とrdの代わりにaa(権威を持つ応答であること)になる。

あとは、ns1.infra.xyzは外からの再帰問い合わせは許可していない(=オープンリゾルバではない)ので、

dig yahoo.com @ns1.infra.xyz

のように叩くと、「status: REFUSED」で「flags: qr rd;」になる。

HEADERの下が、QUESTION SECTIONとANSWER SECTION。

;; QUESTION SECTION:
;infra.xyz.                     IN      A

;; ANSWER SECTION:
infra.xyz.              600     IN      A       153.121.58.159

名前の通り、問い合わせとそれに対する回答。(慣れないとQUESTION SECTIONだけ見ちゃって、あれ値が返ってこない!ってなる)

ちなみに「infnya.xyz」みたいに存在しないドメインを問い合わせて「status: NXDOMAIN」になったときは、ANSWERセクションそのものがなくて、リクエストしたドメイン(infnya.xyz)の親ドメイン(xyz)のSOAレコードが、その下のAUTHORITYセクションで返ってくる。

$ dig infnya.xyz

; <<>> DiG 9.10.0-P1 <<>> infnya.xyz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 8329
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;infnya.xyz.                    IN      A

;; AUTHORITY SECTION:
xyz.                    3600    IN      SOA     ns0.centralnic.net. hostmaster.centralnic.net. 3000169304 900 1800 6048000 3600

;; Query time: 590 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Feb 28 22:33:48 JST 2015
;; MSG SIZE  rcvd: 104

AUTHORITY SECTIONとADDITIONAL SECTION。

;; AUTHORITY SECTION:
infra.xyz.              600     IN      NS      ns1.infra.xyz.
infra.xyz.              600     IN      NS      ns2.infra.xyz.

;; ADDITIONAL SECTION:
ns1.infra.xyz.          600     IN      A       153.121.58.159
ns2.infra.xyz.          600     IN      A       54.64.115.59

リクエストしたドメイン(infra.xyz)のネームサーバ(ns1.infra.xyz, ns2.infra.xyz)と、そのIPアドレス(153.121.58.159, 54.64.115.59)が表示される。(間違えやすいけど、ここで表示されるのは親のDNSコンテンツサーバに登録されているグルーレコードではなく、実際のns1.infra.xyzにあるinfra.xyz.zoneに書いてあるNSレコードとAレコード)

ちなみにDNSキャッシュサーバのnamed.confのoptionsセクションで、

minimal-responses yes;

にすると、AUTORITY SECTIONとADDITIONAL SECTIONセクションは省略される。(DNSコンテンツサーバとして返す情報に変化はない)

最後に一番下にある色々。

Query time(クエリの応答時間)と、SERVER(応答したDNSサーバのIPアドレスとポート番号)、MSG SIZE(メッセージサイズ)。

;; Query time: 590 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Feb 28 22:33:48 JST 2015
;; MSG SIZE  rcvd: 104

今回はns1.infra.xyzの中でdigを叩いたので、SERVERは自分自身(127.0.0.1)になってます。

という感じなので、何かDNSがうまく引けない・・・というときは、

  • STATUSはNXDOMAINか?REFUSEDか?
  • flagsにrdがあるか?ないか?
  • SERVERのIPはGIPか?LIPか?

辺りを確認して、DNSキャッシュサーバ側の問題なのか、DNSコンテンツサーバ側の問題なのか、を切り分けるようにしています。 +traceオプションつけると、Rootから引いてくれてわーい、とかもありますが、その辺の便利オプションは言い出すときりがないのでまた別途。

最後になりましたが、digはdomain information groperの略です。

WS000450

参考資料: