delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

22 May 2010

如何:为小于 /24 的 IPv4 网段实现反解析

以前一直以为这事必须由ISP以个案的方式去做,最近跟北美一家ISP接触加上查阅资料以后发现其实早就有办法,原理和普通的域名解析类似,也是可以使用delegate和glue去把解析权移交给持有IP的客户,从而减少ISP自己的负担,在这里记一笔。

为小于/24的网段实现解析主要是针对子网掩码长度为30-25这个范围。等于或大于/24的网段必须拆成/24的网段来解析,这个使用传统的DNS的做法就可以了;小于/30的网络因为地址太少,将其解析权代理出去的意义不太大。

正常的/24网段反解析最终是通过PTR记录给出的。例如,如果我们想要得到IPv4地址 1.2.3.4 的反解析结果,我们将向 DNS 解析器请求 4.3.2.1.in-addr.arpa. 的 PTR 记录。这样,系统会向上逐步查找3.2.1.in-addr.arpa.、2.1.in-addr.arpa.、1.in-addr.arpa.、in-addr.arpa.、arpa.各自的NS记录(如果本地没有缓存的话),并向其查询下一级的记录。

为了能够允许向下授权,RFC 2317 指出,我们可以进一步在最后一级,也就是 /24 的地址段的域中增加下一级的 NS glue。例如,对于从144开始的/28网段,可以将其命名为 144/28;另一方面,原本直接解析出 PTR 记录的地址,例如 1.2.3.144对应的 144.3.2.1.in-addr.arpa,则解析到一个CNAME记录,例如 144.144/28.3.2.1.in-addr.arpa。

受信域比较常用的命名规则主要有山寨的DeGroot法(使用subnet144.3.2.1.in-addr.arpa这样的名字)、RFC 2317 所推荐的起止地址法(144-159.3.2.1.in-addr.arpa这样的名字)以及 RFC 4138 所推荐的子网法(144-28.3.2.1.in-addr.arpa这样的名字)等。不过,在实际应用中,也可以使用类似的规则去完成同样的目的。