代理软件的代理模式介绍

常用的代理软件,通常会有系统代理模式、PAC、代理规则等多项设置,这些设置通常都十分相近,容易混淆,所以做一次简单的梳理。
ssr-csharp,shadowsocks-windows
这两个 windows 软件,通常在右键菜单里会有系统代理模式PAC代理规则,三个关系到一个 url 是否会走代理的配置,为了搞清楚他们之间的关系,我们需要先知道系统代理和 PAC 是什么

  1. 系统代理
    一个操作系统,无论是 Windows、macOS、Linux 各个发型版本,都会有对应的系统级代理设置功能,这个设置是对所有运行在操作系统上的软件公开的,所有的软件都可以知道当前是否有系统代理可用,自己是否要使用系统代理。
    例如,在 c# 中
    public static System.Net.IWebProxy GetSystemWebProxy();
    

在我们常用的浏览器中,浏览器类的软件,通常都是默认如果你设置了系统代理,就会通过系统代理来访问外部网络,例如 Chrome、Firefox 等,都有这样的机制。 而其他的软件,通常也会设计自己的代理策略,例如走系统代理,不走系统代理,或者支持用户设置。 例如,下图中 Docker 的 macOS 客户端中,支持设置使用系统代理,但是不支持用户设置为不使用代理。
Docker上的代理设置界面
另外,在早期版本的 windows 上,经常会看到一些软件代理设置中,有使用 IE 代理的选项,这是因为早期版本的 Windows,IE 代理设置和系统代理设置是同步的,IE 代理就是系统代理。目前新版本的 Windows 已经不再集成 IE, 所以 大部分软件现在都该叫系统代理设置了。例如下图早期版本的迅雷代理设置截图。
早期版本的迅雷设置界面
2. PAC
要说 PAC,我们就要先了解代理有哪些模式。 打开 macOS 的代理配置界面,可以看到,有多种代理协议可选,常用的包括 HTTP,SOCKS5 等。如果我们设置 HTTP 或者 SOCKS5 代理,那么启用系统代理的应用,就会将所有的请求全部转发到这个代理服务器,通过代理服务器进行访问。通常这对应着我们的 ssr 客户端里的系统代理模式-> 全局模式,这种模式下,使用系统代理的软件,所有的网络请求就全部会通过系统代理设置的代理服务器。

接下来说 PAC,PAC 是 Proxy Auto-Config 的简写,系统代理可以选用这种模式。 PAC 的意思是代理自动配置,作用是是根据用户请求的地址,决定使用哪个代理服务器,PAC 通常是一个 js 脚本。 这个模式就对应 ssr 系统代理模式-> PAC 模式 在 Windows 的 ssr 客户端上,一般还支持设置不通的 PAC 规则, 例如跳过局域网跳过局域网和大陆IP等,这些功能其实都是通过修改 PAC 的 js 脚本来实现的。
PAC 代理设置

知道了系统代理和 PAC 的概念之后,我们来看下 Windows 里面 ssr 客户端的设置
系统代理模式-直连:顾名思义,不设置任何系统代理,直接连接,不通过代理服务器。
系统代理模式-全局:全局模式会设置系统代理的 socks5 代理,所有使用系统代理的软件的所有请求,都会通过设置的代理服务器。
系统代理模式-PAC:设置系统代理走 PAC 模式,使用系统代理的软件发出的请求,会通过 PAC 进行自动代理切换。

未完待续...