我需要在"etc/resolv.conf";。根据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
没有更改。
问题出在哪里?
--prefix=/usr/local/lib/glibc-testing
构建glibc以安装到该目录层次结构中,因此它将与系统的其他部分隔离。这是一件好事,因为MAXNS
的更改是一个相当剧烈的ABI中断,因此需要重建相当多的程序。make install
通常在与--prefix=/usr
进行到一半时崩溃,留下一个不再可用的系统。上游glibc也不支持Debian syle多拱形目录(除了/usr/include
之外还有/usr/include/x86_64-linux-gnu
(。
无论如何,为了以适合包含在上游glibc中的方式增加受支持的名称服务器的数量,需要以下步骤:
- 停止在
resolv/res_send.c
的struct __res_state
(nssocks
数组(中使用按名称服务器文件描述符。存根解析程序只打开一个套接字,因此无论如何使用数组都没有意义 - 增强内部
struct resolv_conf
以跟踪名称服务器以及搜索列表条目 - 更新向后兼容性匹配代码以检查
_res
中的名称服务器更改(应用程序可以直接写入_res
,在这种情况下应该使用这些名称服务器(。这与搜索列表代码类似 - 调整
resolv/res_send.c
中的实际DNS客户端代码以使用所有名称服务器(而不仅仅是struct __res_state
中的名称服务器(
这是一个不平凡的贡献,因此需要FSF版权转让。