DNSを理解しような

DNSについて気になっていることをどんどん書いていく

明らかにしたいこと

  • ウェブサイトを表示するまでの流れのうち、DNSに関係する部分
  • 各種レコード:SOA,TXT,MX,NS
  • Route53がやっていること
  • ドメインの委任

ウェブサイトを表示するまでの流れ

ブラウザを起動し、URLバーに直接https://www.google.com/と打ちこんでENTERを押したあとの流れとしては、

  1. スタブリゾルバーを呼び出す
  2. スタブリゾルバーがフルリゾルバーを呼び出す
  3. フルリゾルバーが名前を解決してIPを返す
  4. 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のコンポーネントである
  • 名前解決のリクエストをブラウザなどのアプリケーションから受けて、それをフルリゾルバーに問い合わせる

というものらしい。

フルリゾルバー

正確にはフルサービスリゾルバーと言うらしい。スタブリゾルバーから名前解決のリクエストを受けて名前解決を行う。キャッシュ条件に合うならそれを返すし、なければ権威サーバーに再帰的に問い合わせる。大体こんな流れのはず。

  1. ルートサーバーにblog.akikazewf.devを問い合わせ
    1. .devに聞いてくれや
  2. .devの権威サーバーにblog.akikazewf.devを問い合わせ
    1. .akikazewf.devに聞いてくれや
  3. .akikazewf.devの権威サーバーにblog.akikazewf.devを問い合わせ
    1. 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レコードを登録しているとすると、以下のような流れになる。

  1. ルートサーバが.devのNSレコードを返す
  2. .devakikazewf.devのNSレコード(さっきの4つ)を返す
  3. 4つの権威サーバーのうちどれかにアクセスすると、Aレコードの情報が返る

SOAレコード

Start of Authorityレコードで、権威サーバーはこのSOAレコードを持たなければならない規則になっている。
SOAレコードには「プライマリー権威サーバーの名前」「連絡先」「リフレッシュレート(セカンダリ権威サーバーがプライマリにゾーン情報を問い合わせる間隔)」などのゾーンに関する情報を持つ。

もし権威サーバーを複数構える場合、ゾーン情報はすべてのサーバーに伝達させて統一されている必要がある。その伝達プロセスをゾーン転送という。リフレッシュレートで更新情報をチェックし、更新があればゾーン伝達されるイメージ。

MXレコード

MXレコードはメールをメールサーバーに送信するためのレコード。
内容に関しては別記事で書く。

<リンク>

Route53でドメインの委任を行う

  • アカウントAのRoute53ホストゾーン: akikazewf.dev
  • アカウントBのRoute53ホストゾーン: sub.akikazewf.dev
    ということを実現したい場合
  1. アカウントBでホストゾーンを作成
  2. アカウントAでさっき作ったNSを登録

こうすることで、AはBのNSレコードを持つ(=委任)が成功する

終わりに

DNSの仕組みを少し解明した。また追記するぞ。

のんびり生きていきたい。
Image by Freepik
Built with Hugo
Theme Stack designed by Jimmy