希望在 resolv.conf 中实现“options rotate”指令,以便 DNS 查找通过该文件中列出的名称服务器进行轮换。据我所知,这就是该指令的要点。到目前为止,它在任何我尝试过的系统上都不起作用。它总是使用文件中的第一个名称服务器指令,并忽略其余指令,除非出现错误。
我使用一个伪 DNS Python 脚本进行了测试,该脚本模仿 DNS 服务器,无论请求如何,始终使用相同的伪造 192.168.1.1 地址进行回复。当放置在文件中的第一个位置时,它始终会转到此服务器,而当放置在第二个位置时,它永远不会转到此服务器。这是通过文件中包含的“options rotate”指令进行的。
# cat /etc/resolv.conf
search some.toplevel
options rotate
nameserver 10.0.0.2 <- fake python DNS server
nameserver 10.0.0.3 <- real DNS server
另外,我使用了 dig 命令和 host 命令。我确认它们使用了 resolv 库。我在 CentOS 5.6 以及我的个人 ubuntu 上尝试了此操作,使用了完全不同版本的相关软件包。我完全被难住了,需要一些帮助。
答案1
有关于此的提示http://docstore.mik.ua/orelly/networking_2ndEd/dns/ch06_01.htm:
换句话说,解析器的实例仍然首先查询 resolv.conf 中的第一个名称服务器,但对于它查找的下一个域名,它首先查询第二个名称服务器,依此类推。
请注意,许多程序无法利用这一点,因为大多数程序都会初始化解析器、查找名称,然后退出。例如,轮换对重复的 ping 命令没有影响,因为每个 ping 进程都会初始化解析器、查询 resolv.conf 中的第一个名称服务器,然后退出,然后再使用解析器。每次连续调用 ping 都不知道前一个调用使用了哪个名称服务器——甚至不知道 ping 之前运行过。但发送大量查询的长期进程(如 sendmail 守护程序)可以利用轮换。
答案2
由于“dig”和“host”命令仅发出一个查询,因此它们无法轮换查询。轮换需要一个发出多个查询的程序。(这是字面上的轮换,而不是随机分布。第一个查询发送到第一个服务器,第二个查询发送到第二个服务器,依此类推。)
请注意,许多程序无法利用这一点,因为大多数程序都会初始化解析器、查找名称,然后退出。例如,轮换对重复的 ping 命令没有影响,因为每个 ping 进程都会初始化解析器、查询 resolv.conf 中的第一个名称服务器,然后退出,然后再使用解析器。每次连续调用 ping 都不知道前一个调用使用了哪个名称服务器——甚至不知道 ping 之前运行过。但发送大量查询的长寿命进程(如 sendmail 守护程序)可以利用轮换。——O'Reilly,DNS 和 Bind