![Unix/Linux 中名称解析的搜索顺序](https://linux22.com/image/673840/Unix%2FLinux%20%E4%B8%AD%E5%90%8D%E7%A7%B0%E8%A7%A3%E6%9E%90%E7%9A%84%E6%90%9C%E7%B4%A2%E9%A1%BA%E5%BA%8F.png)
假设 /etc/resolv.conf 有以下内容..
nameserver 10.10.10.10
search x.com y.com
对于解析“ping foo”,我看到解析器首先尝试具有配置的搜索域的 FQDN(即:foo.x.com,foo.y.com),然后尝试默认的“foo”。
这种行为在所有 *nix 平台上是否一致?或者某些实现可以首先在根域中进行短名称解析(即“foo。”)?
答案1
来自 resolv.conf 手册页:
options ndots:n
Sets a threshold for the number of dots which must
appear in a name given to res_query(3) (see
resolver(3)) before an initial absolute query will be
made. The default for n is 1, meaning that if there
are any dots in a name, the name will be tried first as
an absolute name before any search list elements are
appended to it. The value for this option is silently
capped to 15.
因此,如果 resolv.conf 有,options ndots:0
它将立即尝试根域搜索,而不尝试任何搜索列表域。手册页似乎表明,如果查询域不存在于根域中,它应该尝试搜索,但我的解析器在测试时没有这样做。否则,如果没有点,它会首先按顺序尝试搜索元素,然后在耗尽列表后尝试搜索根域。注意,您可以设置search .
将根域放入搜索列表中。
还要注意的一点是,如果请求在到达 resolv.conf 之前已被另一个 nsswitch.conf 机制满足,则您的名称解析可能永远不会到达 resolv.conf。