明らかにしたいこと
- ウェブサイトを表示するまでの流れのうち、DNSに関係する部分
- 各種レコード:SOA,TXT,MX,NS
- Route53がやっていること
- ドメインの委任
ウェブサイトを表示するまでの流れ
ブラウザを起動し、URLバーに直接https://www.google.com/と打ちこんでENTERを押したあとの流れとしては、
- スタブリゾルバーを呼び出す
- スタブリゾルバーがフルリゾルバーを呼び出す
- フルリゾルバーが名前を解決してIPを返す
- IPを使ってウェブページにアクセスする
というのがざっくりとした流れだ。今回はこの流れを少し調べる。
スタブリゾルバーとは
https://www.nslookup.io/learning/what-is-a-dns-resolver/
A DNS stub resolver is an operating system component that performs DNS name resolution for applications running on a computer, cell phone, or another Internet-connected device.
A stub resolver converts name resolution requests from applications like web browsers into DNS request messages. The stub resolver sends the DNS request messages to a DNS recursive resolver and returns the result to the application.
- OSのコンポーネントである
- 名前解決のリクエストをブラウザなどのアプリケーションから受けて、それをフルリゾルバーに問い合わせる
というものらしい。
フルリゾルバー
正確にはフルサービスリゾルバーと言うらしい。スタブリゾルバーから名前解決のリクエストを受けて名前解決を行う。キャッシュ条件に合うならそれを返すし、なければ権威サーバーに再帰的に問い合わせる。大体こんな流れのはず。
- ルートサーバーに
blog.akikazewf.devを問い合わせ.devに聞いてくれや
.devの権威サーバーにblog.akikazewf.devを問い合わせ.akikazewf.devに聞いてくれや
.akikazewf.devの権威サーバーにblog.akikazewf.devを問い合わせ- IPを返す
みたいな流れのはず。
ルートサーバーへの問い合わせはどうやってやる?
フルリゾルバーはルートサーバーのIPアドレスを予め知っているので問い合わせることができる。
サブドメインたちへの問い合わせはどうやってやる?
もし各種権威サーバーが自分のサブドメインを委任している場合は、必ずその情報(NSレコード)を持つようになっている。委任元と委任先の権威サーバーの両方に設定されている。
そのため、サブドメインの情報をたどっていく(再帰)ことができる。
フルリゾルバーへの問い合わせはどうやってやる?
フルリゾルバーは予めスタブリゾルバーに設定されていたり、DHCPサーバーが教えてくれたりするらしい。macOSで確かめる方法はscutil --dnsコマンドを実行すれば良い。
なお、よく見かける8.8.8.8はGoogleのフルリゾルバーを指す。
各種レコードの意味を知る
DNSレコードの意味を知るぞ。
NSレコード
例えば自分はroute53でドメインを管理しているが、そのNSレコードには以下のような情報が書かれていた。
ns-1673.awsdns-17.co.uk.
ns-1219.awsdns-24.org.
ns-359.awsdns-44.com.
ns-650.awsdns-17.net.
これはAWSが管理している権威サーバーである。そのため、もしakikazewf.devというドメインをRoute53で管理し、そこでblog.akikazewf.devのAレコードを登録しているとすると、以下のような流れになる。
- ルートサーバが
.devのNSレコードを返す .devがakikazewf.devのNSレコード(さっきの4つ)を返す- 4つの権威サーバーのうちどれかにアクセスすると、Aレコードの情報が返る
SOAレコード
Start of Authorityレコードで、権威サーバーはこのSOAレコードを持たなければならない規則になっている。
SOAレコードには「プライマリー権威サーバーの名前」「連絡先」「リフレッシュレート(セカンダリ権威サーバーがプライマリにゾーン情報を問い合わせる間隔)」などのゾーンに関する情報を持つ。
もし権威サーバーを複数構える場合、ゾーン情報はすべてのサーバーに伝達させて統一されている必要がある。その伝達プロセスをゾーン転送という。リフレッシュレートで更新情報をチェックし、更新があればゾーン伝達されるイメージ。
MXレコード
MXレコードはメールをメールサーバーに送信するためのレコード。
内容に関しては別記事で書く。
<リンク>
Route53でドメインの委任を行う
- アカウントAのRoute53ホストゾーン:
akikazewf.dev - アカウントBのRoute53ホストゾーン:
sub.akikazewf.dev
ということを実現したい場合
- アカウントBでホストゾーンを作成
- アカウントAでさっき作ったNSを登録
こうすることで、AはBのNSレコードを持つ(=委任)が成功する
終わりに
DNSの仕組みを少し解明した。また追記するぞ。