0%

关于系统代理问题

一些朋友乃至我自己过渡依赖于Surge/V2Ray/ClashX或者公司的代理软件,有时这些软件并不能满足自己的个性化诉求,或者离开这些软件,会发现无法正确的解决代理问题或者提不出好的方案。根本来说是没理解好代理设置这块。为了更好的进行代理相关操作,这里总结下我的认识。

这里多数例子会以Surge为例,其它App类似

Surge的系统代理做了什么

当开启了Surge类代理软件,App会进行2项基本操作

  1. Surge本身开启了本地代理服务器,它可以接受Socks/HTTP/HTTPS协议代理

  2. Surge在系统代理开启的时候会修改电脑的代理设定

    Surge下的系统代理开启方式如下

    https://static.1991421.cn/2022/2022-09-04-153644.jpeg

    当查看系统设置网络连接-代理部分会看到如下代理服务器配置

    https://static.1991421.cn/2022/2022-09-04-153728.jpeg

    再查看Surge下代理服务端口设定,可以确定上述描述是正确的。

    https://static.1991421.cn/2022/2022-09-04-153754.jpeg

配置后

  • 当所有走系统代理设定的App中发起HTTP/HTTPS/Socks协议请求时即会走这里配置的代理服务。当然下部的bypass代理设置解决的即部分IP/域名不走代理,比如常见的localhost。

  • 当Surge App关闭时,系统代理设定也会随之关掉。你会发现App关闭时,这里的设定会清空。

手动设置系统代理

比如开发中我们常用Whistle代理服务,但Whistle本身是不修改系统代理的,这样比如我们想让部分网页请求走Whistle代理就不行。了解了如上代理软件的做法之后这个问题就可以通过手动将Whistle代理服务作为系统代理解决。

比如这里Whistle的代理地址为127.0.0.1:8899,那么就将系统下HTTP/HTTPS的代理地址更改即可。这样Safari下网页访问会走Whistle代理。

https://static.1991421.cn/2022/2022-09-04-153820.jpeg

https://static.1991421.cn/2022/2022-09-04-153840.jpeg

为了方便设置Whistle为系统代理,除了上述GUI操作方式,也可以执行以下命令快速设定。

1
2
3
4
5
6
7
8
# 设置系统代理
npx @stacker/whistle.globalproxy set

# 自定义host/port
npx @stacker/whistle.globalproxy set --port 8899 --host 127.0.0.1

# 清空系统代理
npx @stacker/whistle.globalproxy clear

部分App无视系统代理

并非所有App都会走系统代理,无视系统代理的App有很多,如Mail,iTerm2,Terminal

  1. 当开启代理后,Mac下的mail会仍然无法收发Gmail邮件,因为App本身无视系统代理设定,因此无法走直接配置系统代理解决网络问题。当然也就无法在代理服务上抓包了。

  2. Surge针对无视系统代理这类App的解决方案是增强模式-虚拟网卡,但多数代理App是没有解决该问题的

  3. 部分App无视系统代理问题仅限在Mac上,比如iPhone上不存在该问题

系统代理vs浏览器代理

部分浏览器比如Chrome/Firefox支持单独的代理设定,这也就是为什么Chrome/Firefox下会有代理插件,比如SwitchyOmega,但Safari就不存在,因为Safari没有提供App层面代理设定支持,Safari完全走系统代理。

举例

假如系统默认网路无法访问谷歌,通过系统代理配置,从而支持谷歌,而Chrome现在代理配置走Whistle,那么Chrome下是无法访问谷歌的。

因为浏览器代理会覆盖系统代理,并不会形成浏览器代理=》系统代理的代理链。

虚拟网卡/透明代理

公司很多时候会提供OA客户端,但如果查看网络设定会发现,客户端并给有修改系统代理,但同时我们在登录OA客户端后可以谷歌/访问公司内网,这是因为这里客户端走了透明代理方案-虚拟网卡。如上提到的Surge-增强模式也是如此,当开启增强模式后,即使没有系统代理仍然可以上外网。

当终端ifconfig查看信息可以看到该虚拟网卡,当关闭OA连接是该网卡会销毁

https://static.1991421.cn/2022/2022-09-04-154231.jpeg

802.1X认证

OA客户端连接时会看到网络中显示出802.1X连接,是因为客户端走了802.1X认证,其目的是为了确保连结目标网络的安全性。

https://static.1991421.cn/2022/2022-09-04-181702.jpeg

https://static.1991421.cn/2022/2022-09-04-154202.jpeg

VPN

上述围绕着代理,而本身对于远程访问内网服务或外网,还有个方式是VPN代理。VPN代理并不等于上述的代理服务器,它是另一种手段,只是可以完成同一个目的。

Mac下VPN除了常用的官方VPN客户端外还可以使用OpenConnect命令。

https://static.1991421.cn/2022/2022-09-04-155044.jpeg

写在最后

代理是一种技术,而科学上网只是代理应用之后的一种目的,比如上述提到的Whistle,我常用来前端开发调试。so,代理问题搞清楚还是很有用的。

相关文档