我有一个Linux机器上的多个互联网连接,我希望每个互联网连接使用特定的DNS域名服务器。 /etc/resolv.conf是一个问题,因为它使用全局名称服务器来处理所有打开的Internet连接。
请注意,这些连接全部打开并且正在同时使用。
一种方式来说,以下是Linux的:
使用DNS名称服务器A进行Internet连接1
使用DNS名称服务器B进行Internet连接2
使用DNS名称服务器C进行Internet连接3
问题是/etc/resolv.conf对所有的连接使用相同的名称服务器。
上面的确切要求我必须坚持。
自从我正在研究度量的ISP性能和DNS响应时间的应用程序。
使用OpenDNS不会对我有任何好处。
至于DHCP,我已经从ISP自动获取DNS,但是只有最后一个DNS服务器在resolve.conf中被覆盖以前的名称服务器。
需要帮忙。
本质上你有两个问题:
如果你开发自己的testing代码,第一个比较容易解决。 最终用户程序几乎总是使用res_init() ,它是res_init()函数,它负责读取/etc/resolv.conf并为该程序的后续查询设置DNS服务器。 在您自己的代码中,按照程序实例显式重置DNS服务器是非常容易的。
第二个问题需要networking级别的变化。 您可能有三条默认路由,每个ISP都没有特定的路由表条目。 您需要找出您的三个ISP的名称服务器位于哪个子网中,然后添加一条路由到该子网,强制stream量通过正确的ISP退出。
例如,如果ISP使用192.168.1.1作为DNS服务器,那么您需要:
# route add -net 192.168.1.0/24 gw wxyz
其中wxyz是面向特定ISP的下一跳地址。
请注意,如果您不尝试从同一台机器同时testing三个ISP,所有这一切将会简单得多!
我已经完成了对DNS服务器的批量testing,并拒绝尝试将它们全部连接在一起 – 这样一次只做一个,远远更容易。
为什么不使用dig来执行testing?
这会更容易:
#using local resolver (with cache) dig +noall +stats www.google.com | grep ";; Query time" ;; Query time: 3 msec #using opendns dig +noall +stats google.com @208.67.222.222 | grep ";; Query time" ;; Query time: 28 msec #using my isp dns dig +noall +stats google.com @212.27.40.240 | grep ";; Query time" ;; Query time: 20 msec
通常,根据目的地IP地址来完成“使用哪个路由/哪个ISP经由连接发送”的路由决定。 在进行DNS请求以将目标主机名映射到目标IP地址之前,您没有目标IP地址。
如果你的configuration不是“典型的”,你需要提供更多的细节。
在此之前,你有鸡/鸡蛋的情况。 你不能决定使用哪个DNS服务器,直到你知道你将要使用哪个ISP,(除了一些你还没有描述的特殊的东西),你不知道你将使用什么ISP您已经执行了DNS查找并获得了目标IP地址。
您提到您正在开发应用程序来衡量ISP性能和DNS响应时间。 您最简单的赌注可能是一次监视一个ISP。
从您的更多细节可能会允许更详细,相关的答案。
使用来自ISP的DHCP是否更有意义,并自动获得DNS服务器而不是硬编码?
作为select,你甚至可以忽略你的ISP的DNS服务器,并使用OpenDNS(除非你的ISP足够愚蠢的阻止DNS请求到外部DNS服务器)。
也许resolvconf或openresolv是你在找什么:
我认为Benoit给了你正确的答案。 你不应该在CentOS中解决这个问题。 如果你编写一个测量互联网连接性能的应用程序,那么这个应用程序应该selectDNS服务器(而不是CentOS本身)。
如果您使用dig进行性能testing,或者直接在您的应用程序中执行testing,则由您决定。 但是无论哪种方式,您可以直接指定要采取的DNS服务器。
另一个开放的问题是:你如何做stream量整形和路由? 那些纯粹是静态的吗?
您可以尝试在/ etc / sysconfig / network-scripts / ifcfg-eth {0,1,2}文件中放置类似以下的DNS行。 我不确定这会实际上达到你想要的。
# Networking Interface DEVICE=eth0 BOOTPROTO=static HWADDR=00:11:22:33:44:55 ONBOOT=yes IPADDR=10.10.10.100 NETMASK=255.255.255.0 DNS1=10.10.10.1 DNS2=10.10.10.2
这是我会做的。
1)将每个ISP设置在单独的NIC上。 这允许更容易的路由。
2)设置静态路由强制查询到isp A的DNS服务器使用isp A的接口/网关。 重复其他isps(B的DNS通过接口B等)。
3)使用digtestingdns服务器。 您添加的路线应确保查询出正确的接口到正确的isp。