你的工作 VPN 能完美解析公司名称,而家里的打印机却始终无法用名称访问,于是人们常用的补救办法是把整台 Mac 都指向家用路由器。这个改动远比问题本身所需的大得多。macOS 可以通过一个很小的解析器文件,把单个 DNS 后缀交给它自己的服务器,而让其他所有查询都留在原处。

首先是权限边界:这适用于你管理或已获授权配置的域名。它不是绕开组织强制执行的 DNS 策略或其本地网络限制的途径。

职责单一的一个文件

假设本地区域是 lab.example.org,其服务器在 192.168.55.1 上应答。在允许你进行改动的 Mac 上,管理员创建一个纯文本文件,文件名就是域名本身,即 /etc/resolver/lab.example.org,内容只有一行 nameserver 192.168.55.1。全新系统上这个目录可能不存在,所以要以管理员权限创建它,并在写入前查看管理软件是否已经在那里放了一个文件。

Apple 的解析器配置文档说明了这一约定:文件中没有单独的域名设置时,由文件名提供域名。命名规则就是全部诀窍,这也正是文件必须按区域而不是按服务器命名的原因。

macOS 如何在多个解析器之间选择

可能有不止一个解析器客户端处于活动状态,而匹配最具体的域名会胜出。因此针对 lab.example.org 的解析器与默认解析器的范围不同,而带有自己文件的更具体的子域还能再次取得优先。正因如此,工作 VPN 得以保留自己的后缀,而你的实验区域则指向别处。这个安排中没有任何全局设置,这一点值得记住。

别去动 /etc/resolv.conf。macOS 会自己写这个文件,它从来都不掌握按域名解析的全貌。配置也可能来自系统配置数据库而不是此目录中的文件,所以管理配置文件可以覆盖你写入的内容。

该文件无法提供的三件事

服务器必须可达。如果 VPN 阻断了本地网络,或企业路由截获了服务器的地址范围,再正确的后缀文件也无法投递查询。把这件事交给网络所有者,而不是自行扩大本地例外。

区域必须持有正确的答案,最好用一个完全限定名来测试,例如 printer.lab.example.org。短名称可能触发搜索域行为,最终问出与你本意不同的问题。

最后,应用必须能够使用这个答案。解析出打印机的名称并不授予对它的地址的访问权,也不会打开它背后的服务。返回的地址仍然需要一条获准的路由,以及允许该连接的访问策略。解析器文件改变的是名称在哪里被查询;它并不为结果预留路径。

验证选择,而不是替换 DNS

查看 macOS 当前实际使用的是什么,并从应用自身内部,或用与应用相同方式解析的工具,去查询完全限定名。直接向 192.168.55.1 查询只能证明服务器在应答;它并不能证明 macOS 为普通查询选择了那台服务器。这是不同的事实,只有后者才描述你的浏览器将经历什么。

如果另一个解析器已经声称拥有同一后缀,先弄清它归谁管,再考虑添加优先级提示。文档记载的 search_order 设置只是对共享同一域名的客户端排序;它不是让通用解析器在每次查询中都胜出的全局偏好开关。

确认连接 VPN 时公司名称仍能解析,然后把该文件及其用途记入你的本地笔记。停用这一安排时,只删除那个文件并重新检查两个命名空间,而不要重置网络的全部 DNS 设置。

相关文章