コンピューターは IP アドレスに接続し、人は名前を覚えます。その橋渡しをするのが Domain Name System(DNS)です。毎秒何十億回も、ほとんどはキャッシュから、数ミリ秒で変換が行われています。
登場人物
- スタブリゾルバー:OS やブラウザに組み込まれた小さな DNS クライアント。
- 再帰リゾルバー:答えを探す作業を引き受けるサーバー。ISP が運用するものや、1.1.1.1、8.8.8.8 のような公開サービスがあります。
- ルートサーバー:各トップレベルドメインの場所を知っています。
- TLD サーバー:
.com、.jp、.siなどを担当し、各ドメインの責任を持つネームサーバーを知っています。 - 権威ネームサーバー:ドメインの実際のレコードを保持しています。
名前解決の流れ
www.example.com を開き、何もキャッシュされていない場合:
- 機器が再帰リゾルバーに
www.example.comの A(IPv4)と AAAA(IPv6)レコードを問い合わせます。 - リゾルバーがルートサーバーに問い合わせると、
.comのサーバーを教えてくれます。 - .com のサーバーに問い合わせると、
example.comのネームサーバー(NS レコード)を教えてくれます。 - example.com のネームサーバーの 1 つに問い合わせると、アドレスが返ってきます。
- リゾルバーがあなたに答えを返し、キャッシュに保存します。
キャッシュと TTL
すべてのレコードには秒単位の TTL(生存時間)があります。リゾルバーはその間答えを保持し、それから問い合わせ直します。DNS が速いのはこのためで、変更に時間がかかるのもこのためです。TTL が 1 時間のレコードは、変更後も最大 1 時間キャッシュから返され続けることがあります。予定している移行の前には TTL を下げておきましょう。
アドレスだけではない
DNS は次のことも世界に伝えます。
- メールの配送先(MX)
- どの名前が別名か(CNAME)
- メールを送信してよいサーバーや、証明書を発行してよい認証局(SPF・DMARC 用の TXT、CAA)
- どのサーバーが権威を持つか(NS、SOA)
- 逆に、IP アドレスに対応する名前(PTR)
それぞれに短いガイドがあります:A、AAAA、CNAME、MX、TXT、NS。
セキュリティ:DNSSEC と暗号化 DNS
DNSSEC は、DNS に公開された署名を使って、答えが本当にドメインの所有者から来たものかをリゾルバーが検証できるようにします。DNS over HTTPS と DNS over TLS は、あなたとリゾルバーの間の通信を暗号化し、同じネットワーク上の他人がクエリを読んだり改ざんしたりできないようにします。解決する問題は異なり、組み合わせるとうまく機能します。
実際に見てみる
DNS 検索は、よく使われるすべてのレコードの種類をリアルタイムで問い合わせ、TTL と DNSSEC の状態を表示します。cloudflare.com で試してみてください。