/ 编程

检测递归 DNS 的后端 IP

我想知道当我请求 114.114.114.114 或者 8.8.8.8,它们的后端都有什么。我在授权 DNS 设置了分线路的记录,请求当地递归却收到了其他线路的结果,我想知道这个当地递归后端是什么。实际上,当我向递归发起请求之后,最终授权 DNS 收到的来自递归 DNS 的请求,是来自什么地址。

我们要找个办法,把递归向授权的请求“引导”到一个容易看到的地方来。

首先给我一个子域名设置一条 NS 记录,这个 NS 指向我自己的 VPS 地址

back.fixatom.com    NS  ns.fixatom.com
ns.fixatom.com	    A   1.2.3.4

通过这样,当我向递归请求 back.intxt.net 以及它的更多级子域名时,递归就会到我自己设置的 NS 上来请求。“引导”完成。

然后我在我的 VPS 上跑这样一段代码

#!/usr/bin/env python

import socket
import dnslib

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 53))

while True:
    data, addr = sock.recvfrom(1024)
    d = dnslib.DNSRecord.parse(data)
    print addr[0], d.questions[0].qname

作用很简单,就是输出请求来源 IP 和请求域名。


因为这个自己设置的 NS 根本就没有返回内容,所以发起的请求自然是没有结果的。

有的递归 DNS 后端 IP 不多,或者只会为你所在区域分配一个或一段 IP,这时候能够检测到得 IP 也就是这一个(段)。也有些递归 DNS 后端有好多 IP,为了避免递归缓存,不再继续向这个 NS 请求,最好变换子域名来请求。

for i in {1..10}
do
    dig xxxx$i.back.intxt.net @114.114.114.114
done

这是在我电脑上跑上面的 shell,在 VPS 上得到的结果

60.215.138.233 xxxx1.back.intxt.net.
60.215.138.233 xxxx1.back.intxt.net.
60.215.138.233 xxxx1.back.intxt.net.
60.215.138.233 xxxx1.back.intxt.net.
60.215.138.208 xxxx1.back.intxt.net.
60.215.138.208 xxxx1.back.intxt.net.
60.215.138.233 xxxx1.back.intxt.net.
60.215.138.208 xxxx1.back.intxt.net.
60.215.138.208 xxxx1.back.intxt.net.
60.215.138.208 xxxx2.back.intxt.net.
60.215.138.208 xxxx2.back.intxt.net.
60.215.138.208 xxxx1.back.intxt.net.
60.215.138.208 xxxx2.back.intxt.net.
60.215.138.208 xxxx2.back.intxt.net.
60.215.138.233 xxxx3.back.intxt.net.
60.215.138.233 xxxx3.back.intxt.net.
60.215.138.233 xxxx3.back.intxt.net.
60.215.138.208 xxxx4.back.intxt.net.
60.215.138.208 xxxx4.back.intxt.net.
60.215.138.208 xxxx5.back.intxt.net.
60.215.138.208 xxxx5.back.intxt.net.
60.215.138.208 xxxx5.back.intxt.net.
60.215.138.233 xxxx5.back.intxt.net.
60.215.138.233 xxxx6.back.intxt.net.
60.215.138.208 xxxx6.back.intxt.net.
60.215.138.208 xxxx6.back.intxt.net.
60.215.138.233 xxxx7.back.intxt.net.
60.215.138.208 xxxx6.back.intxt.net.
60.215.138.208 xxxx8.back.intxt.net.
60.215.138.233 xxxx8.back.intxt.net.
60.215.138.233 xxxx8.back.intxt.net.
60.215.138.233 xxxx9.back.intxt.net.
60.215.138.208 xxxx9.back.intxt.net.
60.215.138.208 xxxx10.back.intxt.net.
60.215.138.208 xxxx9.back.intxt.net.
60.215.138.208 xxxx10.back.intxt.net.

可以看出,我向 114.114.114.114 请求,它会把这个请求分发给 60.215.138.* 这一段的后端服务器,这些后端服务器到授权去请求。