Mik*_*keL 8 search domain resolv.conf timeout
我有一台运行 ubuntu 10.04 服务器的机器。在使用curl和wget.
使用tcpdumpwireshark,我发现问题出在为设置连接而进行的DNS查找中:
例子
当我运行时:
wget www.site1.com
Run Code Online (Sandbox Code Playgroud)
我看到以下行为:
LOOKUP: AAAA www.site1.com
# => fail, no delay, site1 doesn't have an IPv6 AAAA record
LOOKUP: AAAA www.site1.com.mydomain.lan
# => fail, BIG DELAY, crazy domain doesn't exist
LOOKUP: A www.site1.com
# => success, no delay, resolves as expected (site1 has IPv4 A record)
CONNECTION PROCEEDS ...
Run Code Online (Sandbox Code Playgroud)
我的设置
我的服务器的 resolv.conf 看起来像这样:
nameserver 192.168.0.1 # my router
domain mydomain.lan # made up domain name, for my lan
search mydomain.lan
Run Code Online (Sandbox Code Playgroud)
我服务器的主机文件如下所示:
127.0.0.1 localhost.localdomain localhost
192.168.0.10 server1.mydomain.lan server1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Run Code Online (Sandbox Code Playgroud)
决议?
为什么我的 resolv.conf 搜索列表用于构建第二次查找的名称,当 resolv.conf 手册页建议它仅在查找主机名时使用(无点):
“将尝试使用搜索路径的每个组件依次尝试使用少于 ndots 点(默认为 1)的解析器查询,直到找到匹配项。”
我的印象是,第二次查找是错误的,根本不应该执行......
如果我从 resolv.conf 中删除domain和search行,则不再进行第二次查找并且我的延迟消失。
(另外,如果我强制 wget 只处理 IPv4,则不会完成 AAAA 查找,因此延迟消失):
wget --inet4-only www.site1.com
Run Code Online (Sandbox Code Playgroud)
此行为是设计使然。
AAAAIPv6 是首选 - 因此首先确定资源的状态。NXDOMAIN返回响应 - 因此客户端认为需要附加路径search。
请注意,ndots您的评论是正确的 - 但不是整个故事。如果ndots数字高于正在查询的名称(在本例中,如果它是单个标签名称),则查询行为的唯一区别是附加后缀的查询将在尝试原始名称之前发生。由于您超过了ndots阈值,因此将首先尝试所提供的名称。请参阅手册页的进一步内容:
n 的默认值为 1,这意味着如果名称中有任何点,则在向其附加任何搜索列表元素之前,将首先尝试将该名称作为绝对名称。
该查询失败,因此必须使用搜索列表。请注意查询行为与wget http://site1/.
您所看到的是预期的行为 - 我认为您需要解决的是导致查找缓慢的因素的融合。
NXDOMAIN尝试查找不存在的 TLD 时,它应该轻松缓存从根获取的信息。由于关闭 IPv6 可以解决这个问题,因此您的路径中可能有一个 DNS 服务器,当AAAA涉及查找时,该服务器在缓存方面会严重失败。尝试更改您的解析器以8.8.8.8进行验证。search设置需要的,因为它不是公共层次结构中的有效名称),它会立即响应。您可能不需要该search配置 - 但将其设置为可以解析的内容,这样它就不会尝试从计算机的主机名中猜测它。 search com应该做得很好。