为什么 /etc/resolv.conf 中的搜索域用于所有查询?

为什么 /etc/resolv.conf 中的搜索域用于所有查询?

根据我找到的许多指南,/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 设置一个恶意服务器来拦截这些拼写错误是小菜一碟。

相关内容