0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Youtubeチャンネル『ByteByteGo』視聴メモ #5 DNSの仕組み

0
Posted at

はじめに

英語の技術動画で学ぶシリーズ。今回は ByteByteGo から、ドメイン名をIPアドレスに変換する DNS の仕組み。

Everything You Need to Know About DNS: Crash Course System Design #4 (5:45)

前回(#4 URLを入力すると何が起きるか)で「詳しくは別の動画で」とされていた DNS lookup の中身を扱う。動画タイトルのとおり、ByteByteGo の System Design 動画シリーズの第4回。

DNSとは

名前を住所に変える仕組み。人間が読めるドメイン名(google.com)を、機械が使うIPアドレスに変換する。

動画のたとえは「インターネットの電話帳(directory)」。冒頭と締めで「インターネットの背骨(backbone)」とも呼んでいる。

2種類のDNSサーバー

動画いわく、DNSがややこしいのは役割の違うサーバーが何種類も出てくるから。まず大きく2つに分けると見通しがよくなる。

役割 動画での用語 やること 例
代わりに探してくれる窓口 DNS resolver ブラウザからの問い合わせを受け、キャッシュに無ければ答えを持つサーバーを探して聞きに行く ISPのもの、Cloudflare の 1.1.1.1、Google の 8.8.8.8
答えそのものを持つ係 authoritative nameserver そのドメインの正式な答えを返す 下の3階層

ドメインのDNSレコードを更新するとき、書き換えているのは後者(authoritative nameserver)のほう。

答えを持つサーバーの3階層

では resolver はどうやって「答えを持つサーバー」を見つけるのか。ここで上から順にたどる階層構造が出てくる。

階層 持っている情報 動画でのポイント
root name server TLDサーバーのIPアドレス 論理的には13個。各IPアドレスの裏に物理サーバーが多数あり、anycast で一番近いものにつながる
TLD name server 配下の各ドメインの権威サーバーのIPアドレス .com .org .edu のほか、国別の .de .uk など
authoritative nameserver(ドメインごと) そのドメインの最終的な答え ドメイン登録時はレジストラ(registrar)が運用。AWS や Cloudflare などに変更も可能

この階層設計のおかげで、DNSは分散していて壊れにくい(decentralized and robust)、というのが動画の主張。

1回の問い合わせの流れ

ユーザーがブラウザに google.com と打った場合。手前から順にキャッシュを見て、無ければ奥へ進む。

  1. ブラウザが自分のキャッシュを見る
  2. 無ければOSに聞く。OSも自分のキャッシュを持っていることが多い
  3. それでも無ければ DNS resolver に問い合わせる
  4. resolver もまずキャッシュを見る。無い/期限切れなら root に聞く → .com のTLDサーバー一覧が返る
  5. .com のTLDサーバーに聞く → google.com の権威サーバーが返る
  6. google.com の権威サーバーに聞く → IPアドレスが返る
  7. resolver → OS → ブラウザ の順にIPアドレスが戻る

4 について動画は「.com はよく使われるので、resolver がTLDサーバーのIPを最初からキャッシュしている可能性が高い」と補足している。つまり root まで毎回聞きに行くわけではない。

本番でDNSレコードを変えるときの注意

動画の最後は、稼働中の高トラフィックなシステムでDNSを変更するときの落とし穴(gotchas)。

変更がすぐ行き渡らないのが問題の根っこ。理由は2つ。

  • 各レコードにはキャッシュの有効期限(TTL)があり、デフォルト値がかなり長いものもある
  • TTLを守らない resolver も存在する(動画の言い方では "not every DNS resolver is a good citizen")

対策として動画が挙げる実践的な手順は2つ。

手順 やること ねらい
1. 事前にTTLを短くする 変更予定のレコードのTTLを、十分前もって60秒程度に下げておく 短いTTLが各サーバーに行き渡ってから本番の変更をすれば、切り替えが早く効く
2. 旧サーバーをすぐ止めない 古いIPアドレスのサーバーはしばらく動かしておく TTLを守らない resolver 経由のアクセスを取りこぼさない。トラフィックが十分減ってから廃止する

2 は「時間と忍耐が要る」と動画自身が言っている。

まとめ

DNSは「窓口(resolver)が、root → TLD → 権威サーバーと階層をたどって答えを取ってくる」仕組み。途中の各所にキャッシュがあり、それが速さの理由でもあり、変更が遅れて届く理由でもある。

実務で効いてくるのは最後の話。サーバー移行などでIPアドレスが変わるときは、前もってTTLを下げ、旧サーバーはしばらく残す。これを覚えておけばよい。

覚えておきたい英単語

英語 意味 動画での使われ方
authoritative 正式な・権威のある(そのドメインの正解を持つ) The authoritative nameserver is the one that holds the answer.
anycast 同じIPアドレスへの通信を、一番近いサーバーに振り分ける方式 Through the magic of anycast, we get routed to the one closest to us.
propagation (変更が)行き渡ること・伝播 DNS propagation is slow because there is a TTL on each DNS record.
honor (ルール・設定を)守る・尊重する There are some out there that don't honor the TTL.
decommission (サーバーなどを)廃止する・運用から外す Only decommission the server when traffic dies down to an acceptable level.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?