[求助] macOS Sequoia 15.2 系统代理问题,部分应用无法走系统代理

2025 年 5 月 9 日
 Sh4wnny

问题描述

我目前遇到了一个关于 macOS 系统代理的问题,具体情况如下:

系统环境:macOS Sequoia 15.2
网络连接:有线连接公司内网,使用静态 IP
代理设置:在系统偏好设置中配置了 system proxy 才能访问外网

具体问题

正常工作的应用:Edge 浏览器等应用可以正常访问外网

不能正常工作的应用

尝试和发现

我怀疑是 system proxy 并没有代理到全部的网络流量,于是尝试使用了 Proxifier 进行全局代理(而不是使用 system proxy )。结果发现:

我的疑问

  1. 这是否为 macOS system proxy 的系统 bug ?
  2. 为什么有些应用可以正常使用系统代理,而另一些则不行?
  3. 有没有其他解决方案可以不依赖 Proxifier 但让所有应用都能走代理?

感谢各位 V 友的帮助!

3316 次点击
所在节点    macOS
17 条回复
EchoWhale
2025 年 5 月 9 日
走不走系统代理由应用程序决定。
有的走系统代理,有的需要单独设置,有的完全不走代理。

这就是为什么需要“透明代理”,它作为网关代理经过的所有流量。

不想付费 proxifier ,你试试 clash/shadowrocket 之类软件的增强模式/VPN 模式
najunuoyan
2025 年 5 月 9 日
@EchoWhale 1 楼正解
EVJohn
2025 年 5 月 9 日
你试试 surge 的虚拟 tun
1002xin
2025 年 5 月 9 日
如一楼所说,Surge 、Clash 增强模式可解
Sh4wnny
2025 年 5 月 9 日
@EchoWhale
@EVJohn
@1002xin
感谢回复!

我在设置 proxifier 的时候,需要勾选“Use target hostname in proxy request if available” 才可以访问外网,但是在使用 Surge 和其他网络代理工具的时候似乎没有看到类似的选项,猜测代理服务器是否可能通过本地的 mac 地址或者 ip 来判断是否代理? Surge 或者 Clash 的增强模式,虚拟网卡是否会改变本地的某种特征让代理服务器无法识别呢?使用 Surge 的时候显示代理服务器超时
(如果有常识性错误请多包涵)
KingZZZZ
2025 年 5 月 9 日
proxifier 有免费激活码
MacsedProtoss
2025 年 5 月 9 日
@Sh4wnny 你这种情况需要 surge 中加一个节点 这个节点是那个 http proxy 然后用增强模式接管所有流量都走那个 proxy
你们公司的网络方案还是太原始了…怎么还用手动配代理的形式啊
MacsedProtoss
2025 年 5 月 9 日
@Sh4wnny use target hostname 意思应该是 dns 解析也走 proxy 吧 而不是先解析完再去 proxy 那边用 IP 来访问
surge 之类的软件默认就是命中了代理规则的都是走代理的 dns 的应该是没啥问题
另外你也应该学一下基础的计算机网络,这里的网络应该是 router - Mac en0 - Mac surge tun - Mac app 不会影响到 router - Mac en0 这块的 也没有你提出的啥代理服务器无法识别的问题
263
2025 年 5 月 9 日
因为 Terminal 是绕过 macOS 的网络框架的,直接发起网络请求,所以不会走系统代理,需要单独配置,或则在局域网搭建透明代理。

本地配置 ~/.zshrc 内加入,自动获取 en0 网卡 ip (可根据自身网卡更改)配置代理,proxy_port 替换为自己实际的,no_proxy 添加自己绕过需代理的,配置好以后重启 Terminal ,Terminial 输入 Proxy on 开启代理,Proxy off 关闭代理:
function proxy() {
local ip=$(ipconfig getifaddr en0)
export all_proxy="socks5://$ip:proxy_port"
export http_proxy="http://$ip: proxy_port"
export https_proxy="http://$ip: proxy_port"
export no_proxy="npmjs.org"
echo "Proxy on"
}

function uproxy() {
unset all_proxy http_proxy https_proxy no_proxy
echo "Proxy off"
}

或者直接配置,ip 和端口写死,重启 terminal 直接生效
export all_proxy="socks5://$ip:proxy_port"
export http_proxy="http://$ip: proxy_port"
export https_proxy="http://$ip: proxy_port"
export no_proxy="npmjs.org"
263
2025 年 5 月 9 日
@263 笔误,是输入 proxy 开启,uproxy 关闭
Sh4wnny
2025 年 5 月 9 日
@MacsedProtoss 日本 IT 极其落后... 只要东西能用就绝不改

我尝试了添加这个 https proxy 到代理,但是访问一直 fail ,不知道是不是在代理服务器的那里的认证有什么问题
Sh4wnny
2025 年 5 月 9 日
@263 感谢回复

因为是用的笔记本有时候会带回家,每次使用 terminal 的时候使用 export https_proxy 确实可以让 terminal 走代理,担心如果直接加入本地配置后使用其他网络会有问题,现在暂时还是每次打开 terminal 时单独设置一遍
263
2025 年 5 月 9 日
所以你可以加两个函数,执行 proxy 开启,uproxy 关闭,灵活一些
Sh4wnny
2025 年 5 月 9 日
@MacsedProtoss 感谢!刚刚去查看了 Surge 关于 DNS 的描述:“By default, the DNS resolve always happens on the remote proxy server since Surge always sends proxy requests with domains.” 应该就和您之前说的一样不需要特意更改。
因为在传统工科行业网络相关的问题基本很难接触,计算机相关知识也是碰上了问题才去学习,感谢解答
rebounce
2025 年 5 月 9 日
不要升级,用 Monterey 这种 LTS 版本。
cohen121
2025 年 5 月 9 日
这里的系统代理可以简单理解为就是一个配置项,程序可以选择读取这个配置+自己内部实现的代理协议走代理。 所以这个系统代理和 让系统流量都走代理是没有任何关系的。
Volekingsg
2025 年 5 月 10 日
Safari 应该是会遵循系统配置的 System Proxy ,因此建议检查有限网络 DNS 是否设置?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1130559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX