Shadowsocks(R)设置:系统代理模式、PAC、代理规则

Shadowsocks(R)控制代理模式的地方主要就是这三个设置:系统代理模式PAC代理规则,相信很多人对这三个设置会感到很迷惑,尤其是PAC代理规则里面相似的选项,那么它们究竟应该怎么设置,又分别实现什么功能呢?

系统代理模式

Shadowssocks(R)右键菜单的第一个选项就是系统代理模式,要想了解它是干什么的,首先要知道什么是系统代理设置

系统代理设置顾名思义就是Shadowssocks(R)在系统设置里面设置一个代理服务器,让软件可以直接调用系统代理设置直接连接代理服务器,而不需要单独的配置。

这样所有的软件都可以知道现在有一个代理服务器可以连接,而且只要跟随系统代理设置即可连接,无需额外配置。

一般而言,只有浏览器(包括内嵌在各种软件中的浏览器,比如 WeGame、优酷、迅雷9等软件中的内嵌浏览器)会自动调用系统代理进行连接。

而其它大部分应用一般是不会自动启用系统代理进行连接的,要在支持使用代理的软件里面手动设置, 所以这个选项的设置不会影响到这些软件

这是因为绝大部分需要进行代理的需求都在浏览器上,其它软件很少有这个需要(如果有的话一般会提供配置和开关给用户)。

查看系统代理设置:

所以,系统代理设置控制的就是这个,它有三个选项:

直连模式

直接模式会在系统代理设置里关闭代理,使启用系统代理设置的软件(一般为浏览器)直接连接网络。

但是,它并没有关闭在本地构建的代理服务器,其它手动配置代理的软件仍然可以进行连接。

PAC模式

PAC模式会在系统代理设置设置一个PAC脚本文件,让系统通过这个文件自动选择每一个连接是否启用代理服务器,以及选择哪一个代理服务器

详细的PAC介绍见 PAC 一节。

DqQo.png

全局模式

全局模式会在系统代理设置手动设置一个代理服务器,所有跟随系统代理设置的软件(一般是浏览器)都会使用这个代理服务器

DxcR.png

PAC

代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理器或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议(WPAD)自动配置的。

简单来说,PAC是一种自动选择每一个连接是否使用代理服务器,以及选用哪一个代理服务器的技术,而自动选择是通过一个JavaScript脚本文件实现的,这个脚本文件制定了一系列的规则进行判断。

我们选择在系统代理模式中选择PAC模式后,PAC才会生效。

在系统设置里面可以看到PAC脚本地址:

UV4S.png

复制地址在浏览器打开后可以下载PAC脚本文件,这个文件很大,这里我列出部分内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var direct = "DIRECT;";
if (direct == "__DIR" + "ECT__") direct = "DIRECT;";

var wall_proxy = function(){ return "PROXY 127.0.0.1:1080;DIRECT;"; };
var wall_v6_proxy = function(){ return "PROXY 127.0.0.1:1080;DIRECT;"; };

...
...
...

function FindProxyForURL(url, host) {
if ( isPlainHostName(host) === true ) {
return direct;
}
if (defaultMatcher.matchesAny(url, host) instanceof BlockingFilter) {
return wall_proxy();
}
if ( check_ipv4(host) === true ) {
return getProxyFromIP(host);
}
return direct;
}

这个也就是Shadowsocks(R)文件夹下的pac.txt文件的内容。

Shadowsocks(R)右键菜单的PAC选项可以更新PAC文件为各种规则,但是貌似不能自动更新,可以定期手动更新下来获取最新的PAC文件规则。

代理规则

Shadowsocks(R)会在用户的电脑上构建一个本地Socks5代理代理规则选项是对所有连接了这个代理的网路请求进行判断,根据不同的判断依据选择是否进行代理。所以,代理规则选项是控制是否进行代理的最终开关。

代理规则选项通过域名的IP地址来判断是否某个域名是否来自大陆,也可以通过自定义规则来判断。

代理流程图

参考网络上的资料,我画了一张Shadowsocks(R)代理流程图:

DMqC.png

通过流程图可以看出,如果系统代理模式设置了PAC模式,浏览器等通过系统代理设置进行连接的软件要通过PAC代理规则两层判断,而剩余情况只需通过代理规则这一层判断。