AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 51790
In Process
Basil A
Basil A
Asked: 2009-08-09 03:58:43 +0800 CST2009-08-09 03:58:43 +0800 CST 2009-08-09 03:58:43 +0800 CST

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

  • 772

问题

我在一台 linux 机器上有多个 Internet 连接,我希望每个 Internet 连接都使用特定的 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,但是在 resolve.conf 中只使用了最后一个 DNS 服务器来覆盖以前的名称服务器。

需要帮忙。

linux
  • 9 9 个回答
  • 4855 Views

9 个回答

  • Voted
  1. Alnitak
    2009-08-09T05:45:12+08:002009-08-09T05:45:12+08:00

    本质上,您有两个问题:

    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
    

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

    请注意,如果您不尝试在同一台机器上同时测试三个 ISP,所有这一切都会简单得多!

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

    • 13
  2. Benoit
    2009-08-09T05:32:06+08:002009-08-09T05:32:06+08:00

    为什么不使用dig进行测试?

    这会更容易:

    #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
    
    • 4
  3. jeff
    2009-08-09T05:36:40+08:002009-08-09T05:36:40+08:00

    通常,“使用哪个路由/通过哪个 ISP 发送连接”的路由决策是基于目标 IP 地址完成的。在您发出 DNS 请求以将目标主机名映射到目标 IP 地址之前,您没有目标 IP 地址。

    如果您的配置不是“典型”,则需要提供更多详细信息。

    在那之前,你有一个鸡/蛋的情况。在您知道您将使用哪个 ISP 之前,您无法决定使用哪个 DNS 服务器,并且(除非您在此处尚未描述的特殊内容)您不知道您将使用哪个 ISP,直到您已经执行了 DNS 查找并获得了目标 IP 地址。

    您提到您正在开发一个应用程序来测量 ISP 性能和 DNS 响应时间。您最简单的赌注可能是一次监控一个 ISP。

    您提供的更多详细信息可能会提供更详细、相关的答案。

    • 3
  4. John Gardeniers
    2009-08-09T04:03:49+08:002009-08-09T04:03:49+08:00

    使用来自 ISP 的 DHCP 并以这种方式自动获取 DNS 服务器而不是硬编码它们不是更有意义吗?

    • 0
  5. Anonymous
    2009-08-09T04:27:09+08:002009-08-09T04:27:09+08:00

    作为替代方案,您甚至可以忽略 ISP 的 DNS 服务器并使用 OpenDNS(除非您的 ISP 愚蠢到可以阻止对外部 DNS 服务器的 DNS 请求)。

    • 0
  6. hdanniel
    2009-08-09T05:30:30+08:002009-08-09T05:30:30+08:00

    也许 resolvconf 或 openresolv 是您正在寻找的:

    • http://packages.qa.debian.org/r/resolvconf.html
    • http://roy.marples.name/projects/openresolv
    • 0
  7. Raffael Luthiger
    2009-08-09T05:44:06+08:002009-08-09T05:44:06+08:00

    我认为 Benoit 给了你正确的答案。你不应该尝试在 CentOS 中解决这个问题。如果你编写一个应用程序来测量互联网连接的性能,那么这个应用程序应该选择 DNS 服务器(而不是 CentOS 本身)。

    如果您使用 dig 进行性能测试或直接在您的应用程序中进行,这取决于您。但无论哪种方式,您都可以直接指定要使用的 DNS 服务器。

    另一个悬而未决的问题是:您如何进行流量整形和路由?那些仅仅是静态的吗?

    • 0
  8. Scott Dodson
    2009-08-09T09:02:25+08:002009-08-09T09:02:25+08:00

    您可以尝试在 /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
    
    • 0
  9. David
    2009-08-09T19:08:22+08:002009-08-09T19:08:22+08:00

    这就是我要做的。

    1) 在单独的 NIC 上设置每个 ISP。这允许更容易的路由。

    2) 设置静态路由,强制查询到 isp A 的 dns 服务器以使用 isp A 的接口/网关。对其他 isp 重复此操作(B 的 dns 通过接口 b 等)。

    3) 使用 dig 测试 dns 服务器。您添加的路由应确保查询从正确的接口发出到正确的 isp。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve