/etc/resolv.conf 还不够?!我需要为 Linux CentOS 上的每个 ISP 连接使用不同的 DNS

Bas*_*l A 1 networking domain-name-system linux routing

问题

我在 linux 机器上有多个 Internet 连接,我希望每个 Internet 连接都使用特定的 DNS 名称服务器。 /etc/resolv.conf是一个问题,因为它对所有开放的互联网连接使用全局名称服务器。

请注意,所有连接均已打开并同时使用。

我需要的?

一种对 linux 说以下内容的方法:

使用 DNS 名称服务器 A 进行互联网连接 1

使用 DNS 名称服务器 B 进行互联网连接 2

使用 DNS 名称服务器 C 进行互联网连接 3

问题是/etc/resolv.conf所有连接都使用相同的名称服务器。


我必须坚持上面的确切要求。

由于应用程序,我正在测量 ISP 性能和 DNS 响应时间。

使用 OpenDNS 对我没有任何好处。

至于 DHCP,我已经从 ISP 自动获取 DNS,但在 resolve.conf 中只使用了最后的 DNS 服务器,覆盖了以前的名称服务器。

需要帮忙。

Aln*_*tak 13

本质上你有两个问题:

  1. 默认解析器行为
  2. 包路由

如果您开发自己的测试代码,第一个相对容易解决。最终用户程序几乎总是最终使用libresolv,其中的res_init()功能负责读取/etc/resolv.conf和设置 DNS 服务器以供该程序进行后续查询。在您自己的代码中显式重置每个程序实例上的 DNS 服务器非常容易。

第二个问题需要网络层面的改变。您可能有三个默认路由,并且每个 ISP 没有特定的路由表条目。您需要找出您的三个 ISP 的名称服务器所在的子网,然后添加到该子网的路由,强制流量通过正确的 ISP 退出。

例如,如果 ISP 使用 192.168.1.1 作为 DNS 服务器,那么您需要:

  # route add -net 192.168.1.0/24 gw w.x.y.z
Run Code Online (Sandbox Code Playgroud)

其中 wxyz 是面向该特定 ISP 的下一跳地址。

请注意,所有的这将是一个很多更简单,如果你没有尝试测试3个ISP都在同一时间从同一台机器!

我已经对 DNS 服务器进行了批量测试,但拒绝尝试将它们全部连接在一起进行测试 - 一次完成一个要容易得多。

  • 如果可以的话,我会投票十几次。提出问题的人需要解决他们真正的问题,而不是他们发明的问题。 (2认同)