ドメインのAレコードを別ドメインのネームサーバが管理できる理由

DNS についてアカデミックに勉強している場合、例えば tech.yamashiro.blog の Aレコードは ns1.yamashiro.blog というネームサーバが管理しているイメージになるかと思います。
しかし、実際には当ブログのゾーン情報を管理しているのは ns1.wpx.ne.jp. というネームサーバです。

実際に dig してみると以下のような結果になります。

[root@localhost ~]# dig yamashiro.blog. SOA | grep -v '^;'

yamashiro.blog.         2853    IN      SOA     ns1.wpx.ne.jp. root.wpx.ne.jp. 0 10800 3600 604800 3600
[root@localhost ~]# dig yamashiro.blog. NS | grep -v '^;'

yamashiro.blog.         2816    IN      NS      ns3.wpx.ne.jp.
yamashiro.blog.         2816    IN      NS      ns1.wpx.ne.jp.
yamashiro.blog.         2816    IN      NS      ns2.wpx.ne.jp.

今回は上記の「ns1.wpx.ne.jp.」が「ns1.yamashiro.blog.」ではないことに違和感を覚える方向けの内容となっています。何を言っているか分からない、という方はまずは以下のページを読んでみてください。

なお、検証用の名前空間を用意しましたが、ns1.wpx.ne.jp. は長くて手間がかかるので、ns1.xserver.jp. をネームサーバとします。

別ドメインのゾーン管理がなぜ可能なのか

「ns1.wpx.ne.jp.」は「wpx.ne.jp」ドメインのゾーン管理しかできないような感覚がある方は、きちんと本を読んで勉強してこられた方だと思います。DNS を説明している技術書にはそのような記載しかないので、この理解になってしまうのも仕方ないような気がします。しかし実際は上記の dig の結果のようにその理解では不十分です。

ゾーン外データを管理することは基本的に不可能

ここからは xserver.jp. ドメインに頑張ってもらいます。最初によくある間違いを潰しておきましょう。以下のように「blog.」ゾーンに「ns1.xserver.jp.」のグルーレコードを記載すれば yamashrio.blog. のネームサーバとして辿ることができるという考えです。

$ORIGIN         blog.
$TTL            3600
@               IN      SOA (
                ns1.blog.
                postmaster.blog.
                2019062301
                3600
                900
                604800
                3600
                )
                IN      NS      ns1
yamashiro       IN      NS      ns1.xserver.jp.
ns1             IN      A       172.16.0.1
ns1.xserver.jp. IN      A       192.168.0.100

上記のゾーンファイルはエラーになり、レコードは無視されます。ゾーン外のレコードを管理することは基本的に不可能だからです。

[root@localhost ~]# named-checkzone blog /var/named/blog.zone
/var/named/blog.zone:15: ignoring out-of-zone data (ns1.xserver.jp)
zone blog/IN: loaded serial 2019062301
OK

「ns1.xserver.jp. IN A 192.168.0.1」を削除すれば上記エラーは解消されます。ここにヒントがあります。

名前空間を辿る

下図のように名前空間を辿るのが正解になります。

注目してほしいのは、blog. のネームサーバに委任情報として 「yamashiro.blog. のネームサーバは ns1.xserver.jp. です」と伝えている点です。そしてこの NS レコードにはグルーレコード(NSレコードの A レコード)がありません。

フルサービスリゾルバは yamashiro.blog. のレコードを手に入れるために ns1.xserver.jp. を目指します。そして ns1.xserver.jp. はゾーンファイルを分けるという手段で別ドメインのゾーンデータを保持しています。

zone "xserver.jp" IN {
        type master;
        file "xserver.jp.zone";
};

zone "yamashiro.blog" IN {
        type master;
        file "yamashiro.blog.zone";
};

上記のように、xserver.jp. と yamashiro.blog. のゾーンファイルを別で保持することでゾーン外データを管理しているというわけです。

$ORIGIN         xserver.jp.
$TTL            3600
@               IN      SOA (
                ns1.xserver.jp.
                postmaster.xserver.jp.
                2019062301
                3600
                900
                604800
                3600
                )
                IN      NS      ns1
ns1             IN      A       192.168.0.100
$ORIGIN         yamashiro.blog.
$TTL            3600
@               IN      SOA (
                ns1.xserver.jp.
                postmaster.xserver.jp.
                2019062301
                3600
                900
                604800
                3600
                )
                IN      NS      ns1.xserver.jp.
tech            IN      A       192.168.0.200

dig る

dig の結果は以下になります。

# dig tech.yamashiro.blog.

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> tech.yamashiro.blog.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42178
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tech.yamashiro.blog.           IN      A

;; ANSWER SECTION:
tech.yamashiro.blog.    3000    IN      A       192.168.0.200

;; AUTHORITY SECTION:
yamashiro.blog.         3000    IN      NS      ns1.xserver.jp.

;; ADDITIONAL SECTION:
ns1.xserver.jp.         3000    IN      A       192.168.0.100

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 木  7月 09 17:55:22 JST 2020
;; MSG SIZE  rcvd: 108

yamashiro.blog. の AUTHORITY SECTION で ns1.xserver.jp. が返ってきています。これでネームサーバが別ドメインになっている謎が解けました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)