DNSサーバーの種類
DNS(Domain Name System)サーバーには、「ネームサーバー」「フルリゾルバ」の2種類がある。
ネームサーバー
「DNSコンテンツサーバー」「権威DNSサーバー」と呼ばれることがある。
ネームサーバーはドメイン名とそれに紐づくIPアドレス(リソースレコード)が登録されている。
ネームサーバーは複数あり、ゾーンと呼ばれるドメインで管理権限が分散されている。
フルリゾルバ
ブラウザで入力されたドメイン名の名前解決をするサーバーで、どのネームサーバーに指示されたドメイン名のIPアドレスがあるかを見つけだし、応答する。
フルリゾルバは一度名前解決したものは(TTLの時間分)キャッシュされる。
フルリゾルバは「DNSキャッシュサーバー」「フルサービスリゾルバ」とも呼ばれることがある。
フルリゾルバはISPで提供しているほか、Google Public DNSの「8.8.8.8」やCloudflareの「1.1.1.1」が提供しているように無料で使用できるオープンリゾルバがあり、ISPのフルリゾルバに障害があったときに、DNSサーバーをオープンリゾルバを使うといった選択もとれる。
VPSなどのLinuxサーバーであれば「/etc/resolv.conf」の「nameserver」という項目で指定されているのがフルリゾルバ。
DNSの仕組みが生まれる以前は、hostsファイルと呼ばれるテキストファイルにドメイン名とIPアドレスの対応がすべて書かれ一元管理されていた。hostsファイルは現在も使用されており、いまだに名前解決はhostsファイルから探し、hostsファイルに書かれていなければ、フルリゾルバに問い合わせするという流れになっていることが多い。
その優先順位は、Linuxサーバーの場合は、「/etc/nsswitch.conf」のhosts行で「hosts: files dns」のように指定されている(filesはhostsファイルで、dnsはDNS)。
MacやLinuxでのhostsファイルの位置は「/etc/hosts」でこのファイルに「<IPアドレス> <ドメイン>」といった形式で記述するとDNSの名前解決よりも優先してhostsの内容を読み込む。
リソースレコードの種類
Aレコード
ドメイン名に紐づくIPアドレスを指定する。
NSレコード
そのドメイン自身のゾーンを管理するネームサーバーを指定、あるいはサブドメインのDNSサーバーを定義する。
セカンダリDNSサーバーなど複数の権威DNSサーバーがある場合、同じドメインに対してサーバーの数だけNSレコードを列挙する。
DNSではドメイン情報を階層的に管理しており、あるドメインの情報を調べるときはそのドメインを含む上位ドメインに問い合わせ、分からないときは下位ドメインのNSレコードに示されたサーバに問い合わせ…というプロセスを繰り返す。その際に、上位ドメインのサーバから下位ドメインを管理するサーバとして紹介されるのがNSレコードで定義されたホストである
https://e-words.jp/w/NS%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89.html
MXレコード
ドメイン名に紐づくメール受信サーバーを指定する。
TXT(SPF)
なりすましメール対策のため、ドメイン名のメール送信元サーバーを指定する。
昔はSPF(Sender Policy Framework)を設定するのにSPFレコードとTXTレコードの2種類のリソースレコードを書くことが推奨されていたが、普及しなかったためTXTレコードで設定することになった。
PTRレコード
Aレコードはドメイン名からIPアドレスを正引きできるレコードに対して、IPアドレスからドメイン名を逆引きできるレコードをPTR(PoinTeR record)レコードと呼ぶ。
SOAレコード
ドメイン名のゾーンの管理情報を指定する。
CNAMEレコード
ドメイン名の別名でリソースレコードの参照先を指定する。
CDNやロードバランサーを使用するときに利用する。
ただし、CNAMEレコードを使用すると他のリソースレコード(MXなど)は指定できない。
ZONE APEXはNSレコードおよび、SOAレコードが必ず存在するため、CNAMEを使用できない(つまりCNAMEを使って、CDNを利用できない)。
ただし、AWSのRoute53にはCNAMEライクなAliasレコードという独自拡張があるため、ZONE APEXでもAliasレコードを使用してCDNが使用できる。
CAAレコード
CAAはCertification Authority Authorizationの略。
CAAレコードにそのドメイン名のSSL証明書を発行できる認証局を書いておくことで、意図しない認証局によるSSL証明書の発行を防ぐことができる。
SSL証明書の発行に失敗した場合は、親ドメインやTLDまで遡って、CAAレコードを設定していないかを確認する必要がある。