根据我找到的许多指南,/etc/resolv.conf 中的搜索域应该用于无点查询。但是,man resolv.conf 说明了点选项:
设置一个阈值,该阈值表示在进行初始绝对查询之前,必须出现在提供给 res_query(3)(请参阅 resolver(3))的名称中的点数。n 的默认值为 1,这意味着如果名称中有任何点,则在向其附加任何搜索列表元素之前,将首先尝试将该名称作为绝对名称。此选项的值默认限制为 15。
这与搜索域仅用于无点查询的说法相矛盾,而且似乎也是事实。我第一次使用 tcpdump 时偶然注意到了这一点。例如,解析 reallynonexistentdomain.com 时,如果 resolv.conf 包含“search test.com”,则结果是两个查询:reallynonexistentdomain.com 和 reallynonexistentdomain.com.test.com。两个查询都得到了 NXDOMAIN 答案,解析似乎按预期工作,但有没有什么方法可以阻止后一个查询?这显然是假的,并且(对此不是 100% 确定)存在潜在的安全风险。
到底有什么实际理由将搜索域附加到完全限定域名(或更具体地说,至少具有点点)?我想不出任何答案。如果解析器在原始查询以 NXDOMAIN 回答时根本不尝试使用搜索域,那不是更好吗?前提是它至少有点点?
我使用的是 Debian wheezy。在其他发行版或其他类 UNIX 系统上,其行为会有所不同吗?
答案1
这种行为的实际原因很简单:如果您的组织使用example.com
域,并且其销售部门使用sales.example.com
域,那么您应该能够fileserver.sales.example.com
简单地访问 FQDN fileserver.sales
。如果您有许多内部主机/站点,这真的很方便,并且可以节省大量输入。
注意点选项只处理最初的查询,例如初始查询应按原样发送,或附加本地域。如果第一个逐字查询失败,解析器将始终附加本地域并重试。这与点数无关。
许多自动发现协议和服务都依赖于此 DNS 行为。不存在安全风险只要本地域名在你的控制之下。例如,如果有人输入gogle.com
并且您的本地域名是不是在您的控制下,在 gogle.com.example.com 设置一个恶意服务器来拦截这些拼写错误是小菜一碟。