DNSはカビキラーじゃなくて多重下請け構造。『DNSがよくわかる教科書』を読んだ。


皆さん、DNS(Domain Name System)ってご存知ですか。 「あれでしょ?ドメインを取得したあと、とりあえず言われるがままにレコードを設定すれば、ドメインがカビキラーのようにインターネットの奥の奥まで強力浸透! してくれるやつでしょ?」って認識だったりしません? あるいは、「自分のマシンのネットワーク情報を設定するとき、DNSの項目にはとりあえず8.8.8.8って設定しておけば良いんでしょ?」とか。

まぁ、別にそれぐらいの認識でも生きていくのにあんまり支障は無いんですが、Webシステムの実行環境や、AD(Active Directory)環境を構築してたりすると、大体1回ぐらいはDNSまわりのトラブルが発生します。 ということで、DNSについてちょっと学び直してみるかぁ~~と思って『DNSがよくわかる教科書』を読みました。

どんな本?

内容は基礎編・実践編・アドバンス編の3段階構成になっている。

  • 基礎編:DNSの歴史や、名前解決の仕組みを丁寧に解説
  • 実践編:権威サーバーの設定方法、フルリゾルバーの設定方法、サイバー攻撃(キャッシュポイズニングなど)への対策、DNSの動作確認の仕方など
  • アドバンス編:DNSSEC、DNSのプライバシー(DNS over HTTPS/TLSなど)まわりの話

単なる入門書にとどまらず、実際のサーバー設定の仕方やdigコマンドを使った動作確認まで踏み込んだ実践的な内容になっているのが特徴だ。図が多く、名前解決の各ステップが視覚的に追える。

対象読者は「DNSを雰囲気でやっているITエンジニア」な気がする。 しかし、本書はDNSの仕組みをゼロから丁寧に説明してくれるため、中級者以上の方が読んでも「なんとなくわかっていたことが整理される」気分を味わえると思う。

多重下請け構造

この本を読んでいて「そういえば、上位のDNSサーバが下位のサーバにドメインの存在確認を委任していく構造、どこかで見たな」と思ったら、IT業界でおなじみの多重下請け構造だった。

DNSも、名前解決を行う際に、DNSルートサーバ→トップレベルドメインのDNSサーバ→配下のDNSサーバ→もっと配下のDNSサーバ、みたいな流れで委任してるし。 ただしDNSは中間マージンを一切取らないので良心的。

「浸透」という言葉について

ドメインの設定を変えた後、「DNS浸透が完了するまでお待ちください」と言われた経験がある人は多いと思う。何なら言ったことがある人もいるのでは?

「いろんなサーバに情報が伝わっていくのに時間がかかるんだろうな」ぐらいの認識だったが、じつはこの「浸透」という言葉、DNSの文脈においては使うべきでない表現として知られている。

なぜか。DNSに「浸透」という概念はそもそも存在しない。設定変更後に起きていることは、世界中のフルリゾルバー(キャッシュを持つDNSサーバー)に残っている古いキャッシュのTTLが切れるのを待つ、それだけだ。カビキラーみたいに強力浸透するわけではない。

そしてTTLは事前に設定できる値である。ドメインの切り替えを計画しているなら、切り替え前にTTLを短くしておくことで、古いキャッシュが残り続ける時間を短縮できる。

なのに「浸透待ちです」と言ってしまうと、「コントロールできないので待つしかない」という意味合いになる。本来コントローラブルなはずなんだが。しかもこの言葉、トラブル対応での言い訳として使いやすい。「まだ浸透しきっていないので…」で原因の特定と対処を先延ばしにできてしまう。便利~。

この本でTTLやキャッシュの仕組みをきちんと理解すると、「浸透」という言葉に感じていた微妙な違和感の正体がはっきりわかる。そういった「なんとなく使っていた概念を解像度高く理解し直す」体験が随所にあるのが、この本の良いところだと思う。

(いかにもそれっぽいことを書いたけど、自分の認識が合っているかは結構怪しい)

余談

「TLD」って文字列を見ると、0.01秒だけディズニーランドがよぎるんだよな。俺だけ?