1

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

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

我更改了常量MAXNSresolv/bits/types/res_state.h编译如下:

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没有改变。

问题是什么?

4

1 回答 1

0

--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 中的方式增加受支持的名称服务器的数量,需要执行以下步骤:

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

这是一个不平凡的贡献,因此需要FSF 版权转让

于 2020-09-24T16:48:04.767 回答