返回文章列表
行业动态

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

其一
2025-12-23
3个月前
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 组合
  • • 内网穿透 + 私有云服务
  • • 零碎设备自动切换解析

本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议