macOS可通过PAC文件实现域名白名单代理分流,并用networksetup命令配合Shell脚本与系统服务快捷键完成热键一键切换。具体步骤为:编写PAC文件上传至公网URL,在网络设置中配置自动代理;创建proxy-on.sh/proxy-off.sh脚本调用networksetup控制SOCKS代理;通过Automator封装为快速操作并绑定⌘⌥P等热键。
macos 本身不原生支持“热键一键切换代理/直连”或“自动按域名白名单绕过代理”的功能,但可以通过组合系统能力与第三方工具实现接近的效果。核心思路是:用脚本控制代理开关 + 用 pac 文件定义白名单规则 + 用全局快捷键触发切换动作。
配置支持域名白名单的 PAC 文件
PAC(Proxy Auto-Configuration)文件是 macOS 原生支持的代理分流机制,能根据 URL 动态决定走代理还是直连,比手动开关更灵活可靠。
- 新建一个纯文本文件,例如 proxy.pac,内容类似:
if (shExpMatch(host, "*.apple.com") ||
shExpMatch(host, "192.168.*") ||
shExpMatch(host, "localhost") ||
isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
return "SOCKS5 your-proxy-ip:1080";
}
- 将该文件保存为 UTF-8 编码,上传到可公开访问的地址(如 GitHub Pages、iCloud 共享链接或本地 Web 服务),确保 URL 以 http:// 或 https:// 开头(不能是 file://)
- 在 macOS “网络”设置 → “代理”中,勾选自动代理配置,填入该 PAC 文件的 URL
- 修改 PAC 后刷新网页即可生效,无需重启应用
用终端命令快速开关系统代理
macOS 的 networksetup 命令可精确控制各网络服务的代理状态,适合脚本化操作。
- 查看当前 Wi-Fi 的 SOCKS 代理状态:
networksetup -getsocksfirewallproxy "Wi-Fi" - 开启 SOCKS5 代理(替换为你的实际地址和端口):
networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 1080 && networksetup -setsocksfirewallproxystate "Wi-Fi" on - 关闭代理:
networksetup -setsocksfirewallproxystate "Wi-Fi" off - 把上述命令写成两个 Shell 脚本(如
proxy-on.sh和proxy-off.sh),并赋予执行权限:chmod +x proxy-on.sh proxy-off.sh
绑定热键实现一键切换
系统设置里的服务快捷键或 Karabiner-Elements 都可触发脚本,推荐前者——轻量、稳定、无需额外安装。
- 打开 Automator,新建“快速操作”,流程选择“运行 Shell 脚本”
- 粘贴完整路径调用脚本,例如:
/Users/yourname/proxy-on.sh - 保存为“启用代理”,再建一个“禁用代理”对应关脚本
- 进入“系统设置 → 键盘 → 键盘快捷键 → 服务”,在“快速操作”里为这两个服务分别分配热键(如 ⌘⌥P 和 ⌘⌥Shift+P)
- 确保服务左侧复选框已启用,之后任意界面下按下组合键即可切换
注意事项与补充建议
部分应用(如终端、curl、git)默认不走系统代理,需单独配置环境变量或使用 proxychains;浏览器若启用了 PAC,一般会自动遵循白名单规则;企业或学校网络可能限制 PAC 加载,请确认防火墙允许访问你托管 PAC 的地址。


















