俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

DNSやらまとめ ① - 基礎力編 -

f:id:ie-kau:20190911214620p:plain

今思い返せば10代からDNS周りで障害を起こしまくっているのに、真剣に勉強しようと思ったことがなかったので一旦ここいらいで整理をば。
ついでに今回はLet's Encrypt の CAA も絡んできててんやわんやだったのでそこも整理してみる。 今回は DNS まわりのみ。

DNS関連

連用語整理

用語が散っていたり、レイヤーによって呼び方が違うのでDNS関係の文献を読みこなすために理解しておく。

FQDN

Fully Qualified Domain Nameの略。
ぶっちゃけ、各種文献内ではドメインと読み替えても意図が通じる。 何がFullyかというと、サーバーの設定次第ではwwwなどは省略できるケースがあるので、それを省かずに書いたものをFQDNと呼ぶ。
また、ドメインの最後には必ずルートドメイン . がつくがこちらは各所で省略してある。ホントは、google.com. らしい。

ネームサーバー

ドメインとIPアドレスの名前解決を行うサーバー。= DNSサーバー

権威サーバー

ゾーン情報を保有しているDNSサーバー。
ゾーンファイル(※後述)に対応表を持っている。

ゾーン

DNSサーバーが管理を行うドメインの範囲のこと。
管理権限を持つドメインとそのサブドメインが含まれている。
その設定はSOAレコードに記述されている。

※参考

SOAレコード

ゾーンファイルの中身で、ゾーン管理の情報が記載されている。
google.comでいうとこれ。dig の結果.

google.com.      59  IN  SOA ns1.google.com. dns-admin.google.com. 269064631 900 900 1800 60

細かくは参考先を読めばいいのだが、 SOAの後ろは、dnsサーバーのドメイン お問合せ先とのこと。

※参考先

便利コマンド整理

DNS周りで問題が起きたときに調査に利用するコマンド。
以下、両者とも疎通確認ができる。

dig

何ができる?

  • domain information groper の略
    • grope とは 「手探りする、(…を)手探りで捜す、(心の中で)探る、暗中模索する」 とのこと、ちなみに groper は「痴漢」の意味もあるらしい
      • 魚のハタは grouper で綴に u が入る
  • DNSサーバーに問い合わせてドメインからIPのアドレスを引いたりIPアドレスからドメインを引くことができる
    • リモートにあるDNSサーバーのレコードが適切に設定されているかを確認できる
      • => つまるところ、疎通確認やレコードが正しく設定されているか確認ができる

例えば Googleを引いてみたらこうなる

$ dig google.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41717
;; 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.     167 IN  A   216.58.197.206

;; Query time: 1 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Sep 15 19:45:07 JST 2019
;; MSG SIZE  rcvd: 55
  • デフォルトではAレコードを探索してくれる。
  • ANSWER SECTION を見れば調査したいレコードの確認ができる。

また、-t をつけると任意のレコードのタイプを指定することができる。
以下では CAA レコードを検索している。

$ dig google.com -t caa

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com -t caa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62610
;; 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  CAA

;; ANSWER SECTION:
google.com.     21599   IN  CAA 0 issue "pki.goog"

;; Query time: 70 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Sep 15 19:48:05 JST 2019
;; MSG SIZE  rcvd: 66
  • ドメインが存在しなければ、 HEADER 部分に、NXDOMAINが表示され、何かしらのエラーがあれば SERVFAIL が出力される。
$ dig google-hogehoge.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google-hogehoge.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63258
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

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

;; AUTHORITY SECTION:
com.            899 IN  SOA a.gtld-servers.net. nstld.verisign-grs.com. 1568544628 1800 900 604800 86400

;; Query time: 3 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Sep 15 19:50:51 JST 2019
;; MSG SIZE  rcvd: 121

nslookup

何ができる?

  • FQDNを入力してIPアドレスを取得できる
    • => こちらも DNSの疎通確認に使える

※2つ目のパラメータはGoogle Public DNS のアドレスをしてい。

nslookup google.com 8.8.8.8
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.24.142

dig vs nslookup

大体できることは同じに思える、両者のシステム的な違いとしては、内部のリゾルバライブラリを利用しているかいなか。 dig はOSのリゾルバライブラリを利用しているが、nslookupは内包している。 MACでdigが動かないときは OS 側にリゾルバがいないからなので要注意。

一旦ここまで、随時追記。

未整理事項

  • レジストリ
  • レジストラ

その他参考