希望在resolv.conf中实现“options rotate”指令,让DNS查找通过该文件中列出的名称服务器进行轮换。 据我所知,这是这个指令的重点。 它不适用于我曾经尝试过的任何系统。 它始终使用文件中的第一个名称服务器指令,并忽略其余部分,除非出现错误。
我使用模拟DNS服务器的伪造的DNS python脚本进行testing,并始终使用相同的伪造的192.168.1.1地址进行响应,无论请求如何。 当放在第一个文件,它总是会去这个服务器,当放在第二它永远不会去。 这是与文件中包含的“选项旋转”指令。
# 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
使用假的DNS服务器pythons脚本
另外,我使用了dig命令和host命令。 我证实他们使用resolv库。 我在CentOS 5.6以及我个人的ubuntu上使用了完全不同版本的相关软件包。 我完全被困在这里,需要一些帮助。
在http://docstore.mik.ua/orelly/networking_2ndEddns/ch06_01.htm有一个提示:
换句话说,parsing器的一个实例仍然首先在resolv.conf中查询名字服务器,但是查询下一个域名,首先查询第二个名字服务器,依此类推。
请注意,许多程序不能利用这一点,因为大多数程序初始化parsing器,查找名称,然后退出。 循环对重复的ping命令没有影响,例如,因为每个ping进程初始化parsing器,在resolv.conf中查询名字服务器,然后在再次使用parsing器之前退出。 ping的每个连续调用都不知道前一个使用的是哪个名称服务器,或者甚至是之前运行的ping。 但是发送大量查询的长期进程(如sendmail守护进程)可以利用循环。
由于“挖掘”和“主机”命令只进行一个查询,所以他们不可能旋转他们的查询。 轮换需要一个发出多个查询的程序。 (这是字面的旋转,而不是随机的分布,第一个查询是第一个服务器,第二个是第二个,等等。)
请注意,许多程序不能利用这一点,因为大多数程序初始化parsing器,查找名称,然后退出。 循环对重复的ping命令没有影响,例如,因为每个ping进程初始化parsing器,在resolv.conf中查询名字服务器,然后在再次使用parsing器之前退出。 ping的每个连续调用都不知道前一个使用的是哪个名称服务器,或者甚至是之前运行的ping。 但是发送大量查询的长期进程(如sendmail守护进程)可以利用循环。 O'Reilly,DNS和Bind