在日常网络排查中,我们经常会把域名解析成 IP 地址,例如将 www.example.com 解析为 93.184.216.34。这个过程叫做正向解析(Forward DNS Lookup)。
而 DNS 反解(Reverse DNS Lookup)则正好相反:根据 IP 地址查询对应的域名。
-> % dig +noall +answer -x 8.8.8.8
8.8.8.8.in-addr.arpa. 17864 IN PTR dns.google.
这里表示 IP 地址 8.8.8.8 对应的主机名为 dns.google。
原理
核心:DNS PTR(Pointer)记录。
DNS 设计了一套特殊域名空间:in-addr.arpa,比如要查询 120.48.97.18 的反解记录,就去查询域名 18.97.48.120.in-addr.arpa.(IPv4 地址倒序)的 PTR 记录。
可以通过以下命令观察全过程:
dig +trace -x 8.8.8.8
IPv6 地址反解
只是域名空间改成了 ip6.arpa 而已,然后地址变长了一些,不再是 4 段,而是 32 段。
IPv4 地址 32 bits,每段 8 bits(0-255),分成 4 段。
IPv6 地址 128 bits,每段 4 bits(0-f),分成 32 段。
-> % dig +noall +answer -x 2001:4860:4860::8888
8.8.8.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.8.4.0.6.8.4.1.0.0.2.ip6.arpa. 9710 IN PTR dns.google.
注意
- 多数 IP 没有反向解析。
- 正向解析和反向解析是由不同管理员独立配置,不一定对应。
- PTR 记录通常由 IP 地址拥有者配置,普通人无法直接操作。
如果是云服务商提供的 IP,要看他们是否提供了 “反向解析” 或 “PTR Record” 配置功能,如果没有就只能提交工单,找售后了。
应用场景
核心的应用场景:邮件系统会检查发信 IP 是否存在合法 PTR 记录。
邮件系统经常要求正反向一致验证,英文叫做 Forward Confirmed Reverse DNS (FCrDNS)。
我随便找了一封阿里云的邮件,根据 Received 中给的发信 IP 做一个检验:
-> % dig +noall +answer -x 47.90.197.163
163.197.90.47.in-addr.arpa. 7200 IN PTR out197-163.us.a.dm.aliyun.com.
-> % dig +noall +answer out197-163.us.a.dm.aliyun.com.
out197-163.us.a.dm.aliyun.com. 60 IN A 47.90.197.163
这里面 47.90.197.163 和 out197-163.us.a.dm.aliyun.com. 就是能够互相对应的。
很多邮件服务商会将 FCrDNS 作为信誉评估的重要指标,如果没有对应上,邮件可能被判定为可疑来源。
除此之外,反解还可辅助判断 IP 归属:
- 运维排查异常连接时手动反查;
- 部分服务写日志时会自动记录 PTR 主机名;
- 少数系统也用于访问控制。