用 splitdns 管理 macOS 的开发域名解析

💡 原文中文,约8900字,阅读约需22分钟。
📝

内容提要

本文介绍开源工具splitdns,用于管理macOS的/etc/resolver配置,实现Split DNS。它支持创建、修改、检查和删除解析规则,自动刷新缓存,并区分多机(如指向Ubuntu的dev.test)和单机(如指向本机的lab.dev)场景。通过命令如add、check、test简化操作,提升开发域名解析效率。

🔎

延伸解读

为什么选择 .test 而非 .local

文章指出,.test 域名在 RFC 6761 中被保留用于测试,而 .local 在 RFC 6762 中定义了 mDNS 语义,会被 Bonjour 特殊处理,不适合作为单播 DNS 使用。因此,在配置 Split DNS 时,选择 .test 可以避免与系统服务冲突,确保解析行为符合预期。

splitdns 的定位与优势

splitdns 并非 DNS 服务器,而是管理 macOS /etc/resolver 配置的工具。它简化了创建、修改、检查和删除解析规则的过程,并自动刷新缓存。相比手工编辑文件,splitdns 提供了 dry-run、备份、check 和 test 等命令,便于排错,尤其适合管理多条规则或频繁调整的场景。

双机与单机场景的配置差异

双机场景中,dev.test 域名指向 Ubuntu 的 dnsmasq(192.168.123.200),而单机场景中,lab.dev 域名指向本机 dnsmasq(127.0.0.1)。两者使用独立的 resolver 文件,互不干扰。splitdns 的 check 命令能清晰显示哪些配置在当前网络环境下不可达,便于区分问题来源。

使用 splitdns 的注意事项

使用 add 命令时,--nameserver 默认值为 127.0.0.1,双机场景需显式指定。修改规则后,即使缓存刷新报错,文件修改也已生效,需手动处理文件问题后再执行 flush。删除配置不会自动备份,建议先用 show --raw 备份。此外,dnsmasq 需监听 53 端口,且 localhost 配合非 53 端口可能无法正常使用 scoped resolver。

Q&A

splitdns 是什么工具?它主要用来做什么?

splitdns 是一个开源命令行工具,用于管理 macOS 上 /etc/resolver 目录中的 DNS 解析规则,实现 Split DNS。它支持创建、修改、检查和删除解析规则,并自动刷新系统 DNS 缓存,简化开发域名的解析管理。

如何在 macOS 上安装 splitdns?

可以通过 Homebrew 安装:先执行 `brew tap soulteary/tap`,然后执行 `brew install soulteary/tap/splitdns`。安装后可用 `splitdns version` 查看版本。

为什么开发域名推荐使用 .test 后缀而不是 .local?

.test 是 RFC 6761 保留给测试环境的域名,适合私有 DNS 配置。而 .local 被 RFC 6762 定义为 mDNS 语义,会被 Bonjour 服务特殊处理,不适合作为单播 DNS 使用。

splitdns 的 add 命令有哪些常用参数?如何使用 --dry-run 进行预演?

add 命令常用参数包括 --nameserver(指定 DNS 服务器地址,默认 127.0.0.1)、--port(指定端口,默认 53)和 --force(强制覆盖已有配置)。使用 --dry-run 可以预览将要写入的文件内容和缓存刷新命令,而不实际执行。例如:`splitdns add dev.test --nameserver 192.168.123.200 --port 53 --dry-run`。

如何检查 splitdns 配置是否生效?

可以使用 `splitdns check` 检查配置文件的完整性和可达性,使用 `splitdns test` 测试具体域名的解析结果。例如:`splitdns check dev.test` 和 `splitdns test api.dev.test`。

splitdns 修改配置后如何刷新 DNS 缓存?

splitdns 在修改配置后会自动刷新 DNS 缓存,执行 `dscacheutil -flushcache` 和 `killall -HUP mDNSResponder`。如果刷新失败,可以手动运行 `sudo splitdns flush` 来刷新缓存。

如何删除一条 splitdns 配置?

使用 `sudo splitdns remove dev.test` 命令删除指定域名的配置。删除前会显示内容并要求确认,如需静默删除可添加 `--yes` 参数。注意删除不会创建备份,重要配置建议先用 `splitdns show dev.test --raw` 备份。

splitdns 支持哪些子命令?

splitdns 支持 add、set、remove、show、check、test、list、flush 等子命令,分别用于添加、修改、删除、查看、检查、测试、列出和刷新配置。

🏷️

标签

➡️

继续阅读