【问题标题】:More than 3 DNS server in ubuntuubuntu中超过3个DNS服务器
【发布时间】:2021-01-10 19:46:09
【问题描述】:

我需要在“/etc/resolv.conf”中配置超过 3 个 DNS 服务器。 据 man 说,它不受支持,所以我必须重新编译 glibc

最多可以列出 MAXNS 个(目前为 3 个)名称服务器,每行一个。如果有多个服务器,
解析器库按列出的顺序查询它们。如果不存在名称服务器条目,则 默认是使用本地机器上的名称服务器。 (使用的算法是尝试名称服务器, 如果查询超时,请尝试下一个,直到名称服务器用完,然后重复尝试所有名称 服务器,直到执行最大重试次数。)

我将resolv/bits/types/res_state.h中的常量MAXNS改了,编译如下:

mkdir glibc-build
cd glibc-build
../glibc-(version of glibc)/configure --prefix=/usr/local/lib/glibc-testing --with-tls --enable-add-ons=nptl
make
make install

我尝试 ping 一些站点,并在 Wireshark 的帮助下尝试查看它正在寻址哪些服务器。服务器仍然寻址前三个地址。

我还看到文件/usr/include/x86_64-linux-gnu/bits/types/res_state.h 没有改变。

有什么问题?

【问题讨论】:

    标签: ubuntu dns glibc resolver resolv


    【解决方案1】:

    --prefix=/usr/local/lib/glibc-testing 构建 glibc 以安装到该目录层次结构中,因此它将与系统的其余部分隔离。这是一件好事,因为MAXNS 更改是一个非常剧烈的 ABI 中断,因此需要重建相当多的程序。 make install 通常在使用 --prefix=/usr 中途崩溃,留下一个不再可用的系统。上游 glibc 也不支持 Debian-syle 多架构目录(/usr/include/x86_64-linux-gnu/usr/include)。

    无论如何,要以适合包含在上游 glibc 中的方式增加受支持的名称服务器的数量,需要执行以下步骤:

    • 停止在resolv/res_send.c 中使用struct __res_statenssocks 数组)中的每个名称服务器文件描述符。存根解析器只保持一个套接字打开,因此无论如何使用数组是没有意义的。
    • 增强内部struct resolv_conf 以跟踪名称服务器以及搜索列表条目。
    • 更新向后兼容匹配代码以检查_res 中的名称服务器更改(应用程序可以直接写入_res,在这种情况下应使用这些名称服务器)。这与搜索列表代码平行。
    • 调整 resolv/res_send.c 中的实际 DNS 客户端代码以使用所有名称服务器(不仅仅是 struct __res_state 中的那些)。

    这是一个重要的贡献,所以它需要FSF copyright assignment

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2011-04-16
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多