Mac上可为特定应用强制走代理而不影响全局网络:先确认代理端口并验证监听,再通过终端环境变量(如export all_proxy=socks5://127.0.0.1:7890)配合open -a启动;或创建shell脚本实现一键启动;若被防火墙拦截,需用socketfilterfw放行对应二进制。

Mac上某些应用需要走代理访问境外资源,但又不能全局开启系统代理影响国内服务,必须让该应用明确绕过本地直连、强制走指定代理通道。
确认代理服务已就绪并获取端口
打开你正在使用的代理客户端(如 Clash for Mac、Surge、Stash),确保其后台服务已启动且「系统代理」开关已开启。在控制台或设置页中找到 SOCKS5 或 HTTP 代理监听端口,常见为 7890、7891 或 8080;【务必记下实际端口号,填错会导致所有后续操作失效】。
在终端执行 lsof -i :7890(将 7890 替换为你的真实端口),若返回进程信息,说明代理正在监听;若无输出,先启动代理软件并检查其「允许来自局域网的连接」和「启用系统代理」是否同时开启。
通过终端临时环境变量启动应用(推荐)
这一步让目标应用完全继承当前终端的网络出口,不依赖系统代理设置,也不污染其他程序。
打开“终端”,输入以下命令(以 SOCKS5 端口 7890 为例):
export all_proxy=socks5://127.0.0.1:7890; open -a "Chrome.app"
如果代理需用户名密码,改用:export all_proxy=socks5://user:pass@127.0.0.1:7890; open -a "Postman.app"。
注意:必须用 open -a 启动,双击图标或从程序坞点击不会继承环境变量;【关闭该终端窗口后,从此处启动的应用也会断开代理】。
为特定应用创建独立代理启动脚本
避免每次手动输命令,适合高频使用的工具。
第一步:用文本编辑器新建文件,例如命名为 launch-chrome-proxy.sh,内容如下:
#!/bin/zsh<br>export all_proxy=socks5://127.0.0.1:7890<br>open -a "Google Chrome"
第二步:在终端进入该文件所在目录,执行:chmod +x launch-chrome-proxy.sh。
第三步:以后只需运行 ./launch-chrome-proxy.sh 即可一键启动走代理的 Chrome。
这个脚本只影响它启动的应用,不影响系统其他流量,也不需要修改任何系统级设置。
使用 socketfilterfw 绕过防火墙拦截(仅当应用被阻止时)
如果应用启动后提示“被防火墙阻止”或无法建立出站连接,说明 macOS 防火墙未放行该进程的代理通信路径。
方法一:图形界面添加(适用于已签名应用)
进入「系统设置 → 隐私与安全性 → 防火墙 → 防火墙选项…」→ 点击「+」→ 导航到 /Applications/Chrome.app → 添加 → 确保状态为「允许传入连接」。
方法二:终端强制放行(支持未签名或命令行启动的二进制)
执行:sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
再执行:sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
这一步完成后,该二进制文件即可自由发起代理连接,不再被防火墙拦截。

















