DNSの再帰問い合わせについて


DNSの名前解決について、DNSの入門書を読みながら勉強していますが、一部のwebサイトに対する再帰問い合わせの動きが理解できず、質問になります。

`www.yahoo.co.jp`ですが下記コマンドより`www.yahoo.co.jp`の実体は`edge12.g.yimg.jp`となるかと思います。

[code]

    # dig www.yahoo.co.jp CNAME
    
    ; <<>> DiG 9.18.8 <<>> www.yahoo.co.jp CNAME
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56387
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;www.yahoo.co.jp.               IN      CNAME
    
    ;; ANSWER SECTION:
    www.yahoo.co.jp.        823     IN      CNAME   edge12.g.yimg.jp.
    
    ;; Query time: 237 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
    ;; WHEN: Sat Oct 14 22:45:25 JST 2023
    ;; MSG SIZE  rcvd: 72
    
[/code]

さらに`edge12.g.yimg.jp`の再帰問い合わせの過程を見ると以下のようになり、`gns12.yahoo.co.jp`が`edge12.g.yimg.jp`のAレコードを返しています。

この2つはドメインが異なりますが、`gns12.yahoo.co.jp`のゾーンファイルに別ドメインである`edge12.g.yimg.jp`のAレコードが登録されているということでしょうか？  
具体的なゾーンファイルの設定のイメージが湧かず、気になってまして、質問になります。

[code]

    # dig edge12.g.yimg.jp +trace
    （中略）
    yimg.jp.                86400   IN      NS      ns02.yahoo.co.jp.
    yimg.jp.                86400   IN      NS      ns11.yahoo.co.jp.
    yimg.jp.                86400   IN      NS      ns12.yahoo.co.jp.
    yimg.jp.                86400   IN      NS      ns01.yahoo.co.jp.
    B9CCVLLHT15JM5HET57BQ8MLBAAKPI82.jp. 900 IN NSEC3 1 1 0 - B9GCLVHJOFB3318PIQ42MAJLDH459SFM NS SOA RRSIG DNSKEY NSEC3PARAM
    B9CCVLLHT15JM5HET57BQ8MLBAAKPI82.jp. 900 IN RRSIG NSEC3 8 2 900 20231106174503 20231007174503 36861 jp. dbe98ICkxLlrln/47C+fSEY2lvGmFhPge6+tRgC3ih9wOhN51D5TZDQ0 /3ghg7GXh5DeHqGnUOWS7Z+X+KF3b23WhiwPvBMjuqBbWtIz5nWsnbit RJoMD+DfzB9taTGiTPNu4EHPkxu0GzKraH/h94irCJL+8VOvVD9lxtQO TB0=
    76D1KQ2PHDOF1HL2T85QVFLTR2JCEVC4.jp. 900 IN NSEC3 1 1 0 - 76FE1NU4A5PHIMGP9ATJFEB0DKKGN6AE TXT RRSIG
    76D1KQ2PHDOF1HL2T85QVFLTR2JCEVC4.jp. 900 IN RRSIG NSEC3 8 2 900 20231106174503 20231007174503 36861 jp. UdM3PAWk58uO6phWIOM0z82vmXhQVIqxG0fnSfNzL2dPF/llRmOlFpjf aclOaArXyjm44m2R1980Rb8+Kl+j+ZqFlt/esZRlEixJE+Ed3Ir0RZp9 TxcFn88gExjqnApSh16v/mHCf6GASX7LJkx8ePpozTQtpcvq8v32VL4Q aU0=
    ;; Received 714 bytes from 210.138.175.244#53(d.dns.jp) in 76 ms
    
    g.yimg.jp.              900     IN      NS      gns02.yahoo.co.jp.
    g.yimg.jp.              900     IN      NS      gns12.yahoo.co.jp.
    ;; Received 124 bytes from 118.151.254.133#53(ns01.yahoo.co.jp) in 68 ms
    
    edge12.g.yimg.jp.       60      IN      A       183.79.219.252
    ;; Received 61 bytes from 124.83.255.100#53(gns12.yahoo.co.jp) in 72 ms
    
[/code]




>
> この2つはドメインが異なりますが、gns12.yahoo.co.jpのゾーンファイルに別ドメインであるedge12.g.yimg.jpのAレコードが登録されているということでしょうか？

DNSサーバのホスト名と、そのDNSサーバがどのゾーンを持っているかは無関係です。また、DNSサーバは1台で複数のゾーン情報を持つことができます。

例えば、私が持ってるドメインのDNSサーバは aiden.ns.cloudflare.comだったりns-
cloud-c1.googledomains.comだったりしますが、当然が持ってるのがcloudflare.comだったりgoogledomains.comなわけはないですし、これらのサーバには私のもの以外の多数のドメインも乗っています。もっと言うと、cloudflare.comとかgoogledomains.comのゾーン情報はこのサーバには(多分)ありません。

というわけで、

  1. gns12.yahoo.co.jpにはyahoo.co.jpのゾーン情報がある
  2. しかし、edge12.g.yimg.jpにも応答する
  3. yahoo.co.jpのゾーン情報にedge12.g.yimg.jpも書かれている？

という想像をされているようですが、

  1. gns12.yahoo.co.jpにyahoo.co.jpのゾーン情報があるとは限らないし、あろうがなかろうが関係ない。
  2. g.yimg.jp(またはyimg.jp)のゾーン情報はありedge12.g.yimg.jpが定義されている。

が答えです。

蛇足ですが、ゾーンファイルが「ファイル」なのは実装の都合で、必ずしもファイルでなければならないということはありません。




> `gns12.yahoo.co.jp`が`edge12.g.yimg.jp`のAレコードを返しています。  
>
> この2つはドメインが異なりますが、`gns12.yahoo.co.jp`のゾーンファイルに別ドメインである`edge12.g.yimg.jp`のAレコードが登録されているということでしょうか？

解釈が違っていて、

  * × `gns12.yahoo.co.jp`が`edge12.g.yimg.jp`のAレコードを返す
  * ○ `gns12.yahoo.co.jp`の名前解決した結果得られるIPアドレスのサーバーが`edge12.g.yimg.jp`のAレコードを返す

です。つまり、DNSサーバーに付けられている名前と、そのDNSサーバーが持つゾーンに依存関係はありません。  
逆に、DNSサーバーが自身のゾーン内にのみ名前定義されていたとすると、鶏と卵になってしまってDNSサーバーのIPアドレスを得ることができなくなります。

