macOS OpenVPN 推送 DNS 不生效是什么原因?怎么解决?

一次 macOS 平台 Split DNS 失效的完整排查与最终解决方案
在家里部署 NAS、私有服务的朋友,大多都会遇到一个共同需求:让外网、内网、VPN 环境下的访问域名保持一致。特别在使用 DDNS 的情况下,使用域名访问服务是刚需,内外网使用相同的域名更是刚需,更多信息请参考一文搞懂 Split DNS:用群晖实现内外网同域名自动解析!
例如:
example.com → 外网时解析到公网 IP example.com → 内网/VPN 下解析到内网IP(如 192.168.30.x)这就是典型的 Split DNS(智能分裂解析) 场景。
然而,很多人(包括我自己)在 macOS 上使用 OpenVPN 时会踩到一个大坑:
即使 VPN 已经连上,内部 IP 能访问,可域名始终解析不到内网 IP,只能拨通 VPN 之后再手动修改客户端的 DNS 配置,下次 VPN 连接之前又要把 DNS 修改为公网 DNS ,否则找不到 OpenVPN 服务器,种种问题,不一而足,让人头大……
本期我们将完整地复盘一次典型的故障分析,并给出最终可行的解决方案。
问题背景
- • 家庭网络中部署 Synology 群晖 DNS Server
- • 提供内网域名解析(如 example.com → 192.168.30.x)
- • 外网通过 DDNS(例如 阿里云)访问相同域名
- • 办公网络通过 OpenVPN 连接回家
为了自动实现 Split DNS,在 OpenVPN 服务端推送了 DNS:
push "dhcp-option DNS 192.168.30.125" # 群晖 DNSpush "dhcp-option DOMAIN example.com"按理说,客户端连上 VPN 后应该自动把 DNS 切换到群晖。
但 macOS 上的实际表现是:
内网 IP 可访问 ✔内网域名无法解析 ✘执行:
nslookup example.com 192.168.30.125结果:
Can't find example.com: No answer看似是群晖 DNS 问题?但深入排查后发现真正的原因并不在 DNS 服务配置上。
根本原因
macOS 的 OpenVPN 官方客户端(OpenVPN Connect)不接管系统 DNS!
这是很多人不知道的事实:
OpenVPN Connect for macOS 完全不会把服务器推送的 DNS 写入系统。
简言之:
- • 你 push 了 DNS → 客户端不会用
- • 你设置了 DOMAIN → 客户端也不会用
- • macOS 仍然继续使用原有的本地 DNS,例如:
所以域名永远解析无法指向至群晖 DNS,Split DNS 自然无法生效。
你可能尝试过的“伪解决方案”——都不行
以下方法在 macOS 上对 OpenVPN Connect 均无效:
- • 修改 .ovpn
- • 加脚本 up.sh / down.sh
- • 使用 block-outside-dns
- • 使用 register-dns
- • 修改 macOS DNS 顺序
- • 关闭系统 DNS 缓存
原因很简单:
OpenVPN Connect for macOS 不支持 DNS 推送,也不允许修改系统 DNS。
最终解决方案:使用 Tunnelblick
如果你希望:
- • VPN 连接后自动使用群晖 DNS
- • Split DNS 生效
- • 内外网同域名访问
- • 无需手动切换 DNS
那么 macOS 上唯一真正可行的办法就是——换客户端:
Tunnelblick(强烈推荐)
官网:https://tunnelblick.net

如何配置 Tunnelblick(3 步搞定)
安装 Tunnelblick
从官网下载安装,免费开源。
导入你的 .ovpn 配置文件
直接双击即可添加。
启用 DNS/WINS 接管(关键步骤)
进入:
VPN 配置 → 设置 → Set DNS/WINS选择:
✔ Set nameserver(推荐)
这一步的效果是:
- • macOS 系统 DNS 被替换为 192.168.30.125
- • OpenVPN push 的 DNS 设置开始生效
- • 域名自动按你的群晖 DNS 解析
连上 VPN 后再执行:
scutil --dns就能看到:
nameserver[0] : 192.168.30.125这意味着 Split DNS 已经完全正常。
最终效果
切换到 Tunnelblick 后,可以获得如下优势:
✔ VPN 自动切换 DNS,无需手动操作
✔ 内网域名自动解析到内网 IP
✔ 外网环境自动解析到公网 IP
✔ 所有 App(笔记、音乐、相册、视频)无需再修改配置
✔ 支持多域名、保留搜索后缀
✔ DNS 不泄漏到外网
✔ OpenVPN push 的 route / DNS 全部正常工作
这是目前 macOS 上最稳定、最优雅的方案。
写在最后
Split DNS 本质上是客户端能力问题,可能很多人更倾向于 OpenVPN 官方的客户端,以至于忽略了客户端的限制。
“Split DNS 不生效”问题,其本质并不是下面这些原因,不要排查错了方向:
- • DNS 配错
- • NAS 错
- • 路由规则错
- • OpenVPN 配错
根本原因却是 macOS 平台的 OpenVPN Connect 客户端根本不支持 DNS 管理。
切换到 Tunnelblick,就能彻底解决(我已经过验证)。
如果你也在追求:
- • 内外网同域名访问
- • 回家办公 / 智能家居
- • Synology + VPN 组合
- • 内网穿透 + 私有云服务
- • 零碎设备自动切换解析
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



