macOS 中手动管理 DNS 搜索域需分三层:系统级全局搜索域(GUI 或 networksetup 设置)、per-domain resolver 配置(/etc/resolver/ 文件)、验证排错(scutil --dns、缓存刷新)。

在 macOS 中手动管理 DNS 搜索域,核心是控制域名补全行为——比如输入 gitlab 就能自动解析为 gitlab.internal.company.com,而不用每次敲全称。这依赖两个层级:系统级全局搜索域(适用于大多数场景),以及更精准的 per-domain resolver 配置(用于特殊域名强制走特定 DNS 或补全规则)。
图形界面添加/修改全局搜索域
这是最常用的方式,适合日常办公或家庭网络环境: - 打开「系统设置」→ 左侧「网络」→ 右侧选中当前连接(如 Wi-Fi 或以太网)→ 点击「详细信息…」→ 切换到「DNS」标签页 - 在「搜索域」列表下方点击「+」号,输入域名(例如 `corp.local`、`dev.example.org`) - 多个搜索域按从上到下顺序尝试补全,匹配成功即停止;建议把最常用、最具体的放前面(如 `eng.corp.local` 优于 `corp.local`) - 修改后点「好」→ 返回主界面点「应用」使设置生效注意:搜索域不带点号开头(写 corp.local,不是 .corp.local);也不能包含通配符或正则表达式。
终端命令行快速设置(适合脚本或批量操作)
用networksetup 可绕过 GUI 直接写入,尤其适合运维或部署场景:
- 先查服务名:networksetup -listallnetworkservices(输出类似 Wi-Fi、Ethernet)
- 设置搜索域(会**覆盖**原有列表):networksetup -setsearchdomains "Wi-Fi" corp.local dev.corp.local
- 若想追加而非覆盖,需先读取现有值:networksetup -getsearchdomains "Wi-Fi",再拼接后重新设置
- 验证是否生效:scutil --dns | grep search,能看到当前生效的搜索域顺序
该方式立即生效,但不会保存在「系统设置」UI 中的编辑框里——UI 仅显示最后一次通过图形界面修改的结果。
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
为特定域名配置独立 resolver(高优先级、精细化控制)
当某个内部域名必须走指定 DNS 服务器、且补全行为与其他域隔离时,用/etc/resolver/ 文件:
- 创建目录:sudo mkdir -p /etc/resolver
- 为域名新建配置文件(如针对 internal.company.com):sudo nano /etc/resolver/internal.company.com
- 写入内容(至少含 search 行):
search internal.company.com nameserver 10.1.1.50- 保存后确认权限:
ls -l /etc/resolver/internal.company.com 应显示 -rw-r--r-- root wheel
- 此配置优先级高于全局搜索域,且只对匹配该域名的查询生效(如 `api` → `api.internal.company.com`)
⚠️ 注意:/etc/resolver/ 下的文件名必须与目标域名完全一致(不能用通配符),且不能有端口或路径;若域名含子域(如 staging.internal.company.com),需单独建对应文件。
验证与排错要点
- 测试补全是否工作:ping gitlab 或 nslookup api,观察解析出的完整域名
- 查看当前所有生效搜索策略:scutil --dns,重点关注 search domain[s] 和 resolver # 区块
- 若修改后无效,先刷新 DNS 缓存:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder(macOS Ventura 及更新系统)
- 搜索域不参与 HTTPS 或 URL 自动补全(浏览器地址栏输入 `store` 不会跳转到 `store.apple.com`,除非你在浏览器里启用了相关功能)
不复杂但容易忽略

















