はじめに

『DNSがよくわかる教科書』のChapter08「digコマンドの応用〜フルリゾルバーになって名前解決〜」の例2が、書籍の例示どおりには動作しなくなっていた。 そこで、www.nike.com を対象に同様の演習内容を実施してみた。 具体的には、dig コマンドを使い、再帰問い合わせ(+rec)を禁止し、反復問い合わせ(+norecurse)のみで名前解決プロセスをたどった。

DNSの基礎知識

DNSの主要コンポーネント

名前役割
スタブリゾルバークライアント(PCやスマホ)に組み込まれた簡易DNS問い合わせ機能。名前解決要求を行うだけ
フォワーダー社内ネットワークなどに配置される中継専用DNSサーバ。自身で名前解決せず、フルリゾルバーにリクエストを中継する
フルリゾルバールートサーバからTLD、権威サーバまで自ら問い合わせて答えを得るDNSサーバ
権威サーバ特定のドメイン名について正式な情報(Aレコードなど)を保持・管理するサーバ

再帰問い合わせと反復問い合わせの違い

  • 再帰問い合わせ(Recursive Query)

    • 「最終的な答えが得られるまで再帰的に問い合わせてください」とリゾルバーに依頼する方式
    • クライアントは1回のリクエストで最終的な結果を得られる
  • 反復問い合わせ(Iterative Query)

    • 「あなたが知っている範囲の情報だけ教えてください」という問い合わせ方式
    • 知らない情報については「次に尋ねるべきサーバ」の情報が返される
    • 自分で段階的に問い合わせを繰り返す必要がある

今回の実験では反復問い合わせのみを使用し、フルリゾルバーの動作を手動で再現した。

実施したコマンド群と解決過程

1. ルートサーバから .com のNSレコードを取得

dig +norec @a.root-servers.net com NS

2. .com.のTLDサーバから nike.com. のNSレコードを取得

dig +norec @l.gtld-servers.net nike.com. NS

3. Nikeの権威サーバから www.nike.com. のAレコードを取得

dig +norec @205.251.197.8 www.nike.com. A

→ 結果: CNAMEレコード www-geo.nike.com.akadns.net を取得

4. .net のNSレコードをルートサーバから取得

dig +norec @a.root-servers.net net NS

5. .net.のTLDサーバから akadns.net. のNSレコードを取得

dig +norec @192.55.83.30 akadns.net. NS

6. akadns.net.の権威サーバから www-geo.nike.com.akadns.net. を問い合わせ

dig +norec @96.7.49.129 www-geo.nike.com.akadns.net. A

→ 結果: 新たなCNAME www.nike.com.akadns.net を取得

7. www.nike.com.akadns.net. をさらに問い合わせ

dig +norec @96.7.49.129 www.nike.com.akadns.net. A

→ 結果: 次のCNAME ev-cn.nike.com.edgekey.net を取得

8. edgekey.net. ドメインの情報を取得するため、.net.edgekey.net. をたどる

dig +norec @a.root-servers.net net NS
dig +norec @192.55.83.30 edgekey.net. NS

9. edgekey.net. の権威サーバに ev-cn.nike.com.edgekey.net. を問い合わせ

dig +norec @23.211.133.65 ev-cn.nike.com.edgekey.net. A

→ 結果: さらに長いCNAME ev-cn.nike.com.edgekey.net.globalredir.akadns.net を取得

10. akadns.net. の権威サーバに再度問い合わせ

dig +norec @192.55.83.30 akadns.net. NS
dig +norec @96.7.49.129 ev-cn.nike.com.edgekey.net.globalredir.akadns.net. A

→ 結果: 別のCDNドメイン e2785.x.akamaiedge.net へのCNAMEを取得

11. akamaiedge.net. のNSレコードを取得

dig +norec @192.55.83.30 akamaiedge.net. NS

12. e2785.x.akamaiedge.net. について問い合わせ

dig +norec @184.26.161.192 e2785.x.akamaiedge.net. A

→ 結果: Akamaiの複数NSサーバ(n0x〜n7x)が返された

13. 最終的に特定のNSサーバに問い合わせてAレコードを取得

dig +norec @88.221.81.192 e2785.x.akamaiedge.net. A

最終的に得られたIPアドレス

23.36.16.98

学んだこと

  • DNSは右から左へラベル単位で階層をたどって解決される
  • CNAMEレコードに遭遇した場合、そのホスト名を再度名前解決する必要がある
  • ゾーンの境界をまたぐ際は、新たな権威サーバへの問い合わせが必要になる
  • .com.netのようなTLDをまたぐ場合は、再びルートサーバから辿り直す
  • CDN(今回はAkamai)は多段CNAMEを採用している

感想

名前解決を自分の手で一歩ずつ追跡することで、日常何気なく使用しているDNSの背後で動作している複雑なプロセスを実感できた。 また、Akamaiのようなグローバルなコンテンツ配信ネットワークが多段でCNAMEを設定することで高度なネットワーキングを実現していることが垣間みえた。