DNSやらまとめ ① - 基礎力編 -
今思い返せば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 が入る
- grope とは 「手探りする、(…を)手探りで捜す、(心の中で)探る、暗中模索する」 とのこと、ちなみに groper は「痴漢」の意味もあるらしい
- DNSサーバーに問い合わせてドメインからIPのアドレスを引いたりIPアドレスからドメインを引くことができる
- リモートにあるDNSサーバーのレコードが適切に設定されているかを確認できる
- => つまるところ、疎通確認やレコードが正しく設定されているか確認ができる
- リモートにある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 側にリゾルバがいないからなので要注意。
- dns - dig vs nslookup - Unix & Linux Stack Exchange
- => この記事だとnslookupを使うのをやめ始めてるらしいが、まだ深追いしてない
一旦ここまで、随時追記。
未整理事項
- レジストリ
- レジストラ
その他参考
- インターネットを支えるDNS (1/3):DNSの仕組みと運用(2) - @IT
- 古い資料だけどわかりやすかった