Ubuntu中有超过3个DNS服务器

问题描述

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

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

我在MAXNS中更改了常量resolv/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没有更改。

出什么问题了?

解决方法

--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的{​​{1}}(nssocks数组)中停止使用按名称的服务器文件描述符。存根解析器仅使一个套接字保持打开状态,因此无论如何都不能使用数组。
  • 除了搜索列表条目之外,还增强了内部resolv/res_send.c来跟踪名称服务器。
  • 更新向后兼容性匹配代码以检查struct resolv_conf中名称服务器的更改(应用程序可以直接写入_res,在这种情况下应使用这些名称服务器)。这与搜索列表代码相似。
  • 调整_res中的实际DNS客户端代码以使用所有名称服务器(而不仅仅是resolv/res_send.c中的名称服务器)。

这是一笔不小的捐款,因此需要FSF copyright assignment