2007年2月13日

从 Zone 文件理解 IP 反向解析

Author: Hagen.GoO 转载请联系作者
MSN_contact: wantm009@hotmail.com
Keyword: BIND、PTR、反向解析、
Quote:


  很多朋友还是问IP反向解析到底是谁来做的?哪里去注册申请等?本人也看了很多网上的资料,感觉有些表述不太好理解,现结合自己的了解,从 DNS Zone 文件入手,简单的叙述一下:

1. 反向解析在 DNS 记录中叫 PTR。一般的写法是先把目标IP地址倒写,并加上 .in-addr.arpa. 的特殊后缀。
  比如 202.250.1.4 要写成 4.1.250.202,再加上那个特殊后缀,即常见写法是:

      4.1.250.202.in-addr.arpa. PTR xxx.domain.com.


2. 在 root.zone 文件中不仅记录了GTLD(比如 .com .net)和 ccTLD(比如 .jp .tw)等域名的NS和NS的A记录,同时也包含了 .ARPA 等特殊域名的NS资源,下面是我从 root.zone 中截取的一段记录,以助理解。

      ARPA. NS A.ROOT-SERVERS.NET.
      A.ROOT-SERVERS.NET. A 198.41.0.4
      ……
      COM. NS A.GTLD-SERVERS.NET.
      A.GTLD-SERVERS.NET. A 192.5.6.30
      ……


3. 在 arpa.zone 文件中,同样记录了一些特殊的二级后缀的域名,其中 4.1.250.202.in-addr.arpa. 相关的是:

      IN-ADDR.ARPA. NS A.ROOT-SERVERS.NET.
      ……


4. 同理在 inaddr.zone 中包含 4.1.250.202.in-addr.arpa. 相关的记录是:

      202.in-addr.arpa. NS NS1.APNIC.NET.
      ……


5. 在 APNIC 的 202.in-addr.arpa.zone 中包含了:

      250.202.in-addr.arpa. IN NS a.dns.jp.
      ……


6. 在 JPNIC 的 250.202.in-addr.arpa.zone 中记录了:

      1.250.202.in-addr.arpa. IN NS ktns1.ktokai-u.ac.jp.
      ……


7. 在 ktns1.ktokai-u.ac.jp 1.250.202.in-addr.arpa.zone 上就配置了我们所要求的记录:

      4.1.250.202.in-addr.arpa. PTR proxy.ktokai-u.ac.jp.


所以:一个典型的 DNS PTR 查询过程是:

1 “递归DNS” 发送 4.1.250.202.in-addr.arpa 的 PTR 查询请求到 198.41.0.4 (a.root-servers.net.)

2 198.41.0.4 (a.root-servers.net.) 返回无目标记录,由于 root.zone、arpa.zone、inaddr.zone 同在 ROOT Server 中,所以他直接返回 202.in-addr-arpa.的 NS 是 NS1.APNIC.NET.

3 由于NS1.APNIC.NET. 在这个递归中是 NO-GLUE 的NS,所以不能直接得到其 IP 地址( A 记录),因此“递归DNS” 会重开一个查询,从 A.GTLD-SERVERS.net. 得到 NS1.APNIC.NET 的 A 记录是 202.12.29.25 。

4 “递归DNS” 发送 4.1.250.202.in-addr.arpa 的 PTR 查询到 202.12.29.25 (NS1.APNIC.NET.)

5 202.12.29.25 (NS1.APNIC.NET.) 返回无目标记录,但他知道 250.202.in-addr.arpa. 的 NS 是 a.dns.jp.

6 同理3,“递归DNS” 会重开一个查询,从 a.root-servers.net. 得到 a.dns.jp. 的 A 记录 203.119.1.1

7 “递归DNS” 发送 4.1.250.202.in-addr.arpa 的 PTR 查询到 203.119.1.1 (a.dns.jp.)

8 203.119.1.1 (a.dns.jp.) 返回无目标记录,但他知道 1.250.202.in-addr.arpa. 的 NS 是 ktns1.ktokai-u.ac.jp.

9 同理3,“递归DNS” 会重开一个查询,从 a.dns.jp. 得到 ktns1.ktokai-u.ac.jp. 的 A 记录 202.250.0.10

10 “递归DNS” 发送 4.1.250.202.in-addr.arpa 的 PTR 查询到 202.250.0.10 (ktns1.ktokai-u.ac.jp.)

11 202.250.0.10 (ktns1.ktokai-u.ac.jp.) 返回 4.1.250.202.in-addr.arpa. PTR proxy.ktokai-u.ac.jp.

12 “递归DNS” 把得到的这个结果发回给查询客户,本次查询结束。


注:
A 为了行文方便,有多个 NS (Name Server) 的时候,只写出了一个。
B 实例中提到的“递归DNS”,一般指的就是 ISP 的 DNS 转发服务器。
C 在 DNS 配置文件中所有的域名都是 . 结尾的,但在平常在应用中域名末尾是省略这个点号的,所以叙文的时候,可能有疏漏。

行文仓促,难免错误,请留言或者EMail赐教。

没有评论: