High Sierra系统下Fortclient VPN自定义DNS服务器的替代方法求助
解决High Sierra下FortiClient强制DNS的问题
我之前也踩过FortiClient这个DNS强制接管的坑,High Sierra之后苹果对VPN的网络管理机制做了调整——尤其是采用Network Extension框架的VPN客户端(FortiClient就是其中之一),会直接通过系统级的DNS代理锁定DNS设置,普通的scutil修改根本顶不住。下面分享几个亲测有效的方法,你可以根据自己的情况选择:
方法1:修改FortiClient的VPN配置文件
FortiClient的VPN配置文件里其实可以自定义DNS设置,只是默认被客户端隐藏了。步骤如下:
- 先关闭FortiClient客户端
- 打开终端,用sudo权限进入配置目录:
cd /Library/Application Support/Fortinet/FortiClient/conf - 备份原配置文件(重要!防止改坏了无法恢复):
sudo cp vpnconfig.conf vpnconfig.conf.backup - 用文本编辑器打开配置文件,比如nano:
sudo nano vpnconfig.conf - 找到类似
dns_primary和dns_secondary的字段,把它们的值改成你想要的DNS服务器(比如8.8.8.8和8.8.4.4) - 保存退出后,重新启动FortiClient,连接VPN试试
⚠️ 注意:这个方法可能违反客户的网络安全政策,建议先和客户IT团队沟通确认,避免不必要的麻烦。
方法2:用dnsmasq本地接管DNS解析
这个方法相当于在本地搭一个DNS代理,不管VPN推送什么DNS,都转接到你指定的服务器上,比较稳妥:
- 用Homebrew安装dnsmasq(如果没装Homebrew,先安装它):
brew install dnsmasq - 编辑dnsmasq的配置文件:
sudo nano /usr/local/etc/dnsmasq.conf - 添加一行指定你想用的DNS服务器,比如:
server=8.8.8.8 server=8.8.4.4 - 启动并设置开机自启dnsmasq:
sudo brew services start dnsmasq - 把系统的DNS服务器改成
127.0.0.1:- 可以通过系统偏好设置→网络→选中当前网络→高级→DNS,添加
127.0.0.1到最顶部 - 或者用命令行:
networksetup -setdnsservers Wi-Fi 127.0.0.1 # 如果是以太网,把Wi-Fi换成Ethernet
- 可以通过系统偏好设置→网络→选中当前网络→高级→DNS,添加
这样一来,所有DNS请求都会先经过本地的dnsmasq,再转发到你指定的服务器,就能绕过VPN的强制DNS了。
方法3:用脚本自动重置DNS(适合必须用VPN默认路由的情况)
如果客户要求必须开启“发送所有流量”,上面的方法可能失效,这时候可以写个脚本,在VPN连接后自动重置DNS:
- 创建一个脚本文件,比如
fix_vpn_dns.sh:#!/bin/bash # 等待VPN连接完成(可以根据实际情况调整等待时间) sleep 10 # 重置FortiClient VPN的DNS服务器 networksetup -setdnsservers "FortiClient VPN" 8.8.8.8 8.8.4.4 - 给脚本添加执行权限:
chmod +x fix_vpn_dns.sh - 用Automator或者Launchd设置脚本在VPN连接时自动运行:
- 打开Automator,创建一个“应用程序”,添加“运行Shell脚本”动作,把上面的脚本内容放进去
- 然后在系统偏好设置→用户与群组→登录项,添加这个Automator应用;或者用Launchd监听VPN的状态变化触发脚本
方法4:调整VPN的网络服务优先级
这个方法不一定百分百有效,但可以试试:
- 打开系统偏好设置→网络
- 点击左下角的齿轮图标,选择“设定服务顺序”
- 把你的主网络(Wi-Fi或以太网)拖到FortiClient VPN的上面
- 点击“应用”
这样系统会优先使用主网络的DNS设置,但如果VPN强制推送DNS,可能还是会被覆盖,不过可以作为辅助手段。
内容的提问来源于stack exchange,提问作者alex88
相关产品推荐
相关产品推荐

