https://github.com/gfwlist/gfwlist
Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级、速度感人等优点深受广大网友热捧。与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于Socks5安全加密协议,防止GF*W通过分析流量特征从而干扰的问题。而又不像GoAgent这种集中式爬墙模式,一般不会出现全局封锁等现象。不管你是因为什么原因喜欢上Shadowsocks,我相信她一定有给你带来好的体验的方面。
在Shadowsocks里面,系统代理模式有两种,一种是“系统代理模式”,另一种是“PAC代理模式”,通常情况下我们会选择后者,今天这里给大家解析一下PAC模式的原理以及如何修改PAC文件、user-rule文件实现自动代理,希望大家可以通过本文更的“科学上网”。
什么是PAC
代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。
一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理其或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自发现协议(Web Proxy Autodiscovery Protocol)自动配置的。
上面是从维基百科摘录的关于PAC的解释,我做了一个简单的图片解释什么是PAC:
简单的讲,PAC就是一种配置,它能让你的浏览器智能判断哪些网站走代理,哪些不需要走代理。用过Shadowsocks的朋友应该会知道, de style="margin: 0px; padding: 0px;" >shadowsocks.exede> 同级目录下有一个 de style="margin: 0px; padding: 0px;" >pac.txtde> 文件,这正是我们本文刚刚所说的pac配置文件。
打开 de style="margin: 0px; padding: 0px;" >pac.txtde> 文件,可以看到如下内容
可以看到pac配置文件是用的JavaScript语法,里面有一个变量 de style="margin: 0px; padding: 0px;" >rulesde> ,是一个JSon数组格式的数据类型,数组里面存放的是各种URL的通配符,那么在pac模式下,如果当访问符合这个数组里面任意一个URL通配符的网址时,系统会走代理,反之直连。比如图中pac配置,如果访问 de style="margin: 0px; padding: 0px;" >http://www.cloudflare.com/index.phpde> 时,会走代理,而访问百度、新浪等国内网站则会选择直连方式。
PAC的优势
PAC自动代理属于智能判断模式,相比全局代理,它的优点有:
- 不影响国内网站的访问速度,防止无意义的绕路
- 节省Shadowsocks服务的流量,节省服务器资源
- 控制方便
PAC文件及user-rule文件的语法规则
那么,当一个网站被墙,如何添加到PAC里面让其能够正常访问呢?在Shadowsocks里面,可以有如下两个方式:
1. 添加到 de style="margin: 0px; padding: 0px;" >pac.txtde> 文件中
编辑 de style="margin: 0px; padding: 0px;" >pac.txtde> 文件,模仿里面的一些URL通配符,再添加一个,例如de style="margin: 0px; padding: 0px;" >"||ip138.com",de> ,注意不要忘记了 de style="margin: 0px; padding: 0px;" >,de> 半角逗号,那么意思就是所有 de style="margin: 0px; padding: 0px;" >ip138.comde>域名下的网址都将走Shadowsocks代理,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了
2. 添加到 de style="margin: 0px; padding: 0px;" >user-rule.txtde> 文件中
编辑 de style="margin: 0px; padding: 0px;" >user-rule.txtde> 文件,这里和 de style="margin: 0px; padding: 0px;" >pac.txtde> 文件语法不完全相同,user-rule文件中,每一行表示一个URL通配符,但是通配符语法类似。例如添加一行de style="margin: 0px; padding: 0px;" >||ip138.com^de> ,然后记得右键小飞机-PAC-从GFWList更新本地PAC,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了
注意末尾不要忘记 de style="margin: 0px; padding: 0px;" >^de> 符号,意思是要么在这个符号的地方结束,要么后面跟着?,/等符号。
自定义代理规则的设置语法与GFWlist相同,语法规则如下:
- 通配符支持。比如 de style="margin: 0px; padding: 0px;" >*.example.com/*de> 实际书写时可省略 de style="margin: 0px; padding: 0px;" >*de> , 如de style="margin: 0px; padding: 0px;" >.example.com/de> , 和 de style="margin: 0px; padding: 0px;" >*.example.com/*de> 效果一样
- 正则表达式支持。以 de style="margin: 0px; padding: 0px;" >\de> 开始和结束, 如 de style="margin: 0px; padding: 0px;" >\[\w]+:\/\/example.com\de>
- 例外规则 de style="margin: 0px; padding: 0px;" >@@de> ,如 de style="margin: 0px; padding: 0px;" >@@*.example.com/*de> 满足 de style="margin: 0px; padding: 0px;" >@@de> 后规则的地址不使用代理
- 匹配地址开始和结尾 de style="margin: 0px; padding: 0px;" >|de> ,如 de style="margin: 0px; padding: 0px;" >|http://example.comde> 、 de style="margin: 0px; padding: 0px;" >example.com|de> 分别表示以 de style="margin: 0px; padding: 0px;" >http://example.comde> 开始和以 de style="margin: 0px; padding: 0px;" >example.comde> 结束的地址
- de style="margin: 0px; padding: 0px;" >||de> 标记,如 de style="margin: 0px; padding: 0px;" >||example.comde> 则 de style="margin: 0px; padding: 0px;" >http://example.comde> 、de style="margin: 0px; padding: 0px;" >https://example.comde> 、 de style="margin: 0px; padding: 0px;" >ftp://example.comde> 等地址均满足条件
- 注释 de style="margin: 0px; padding: 0px;" >!de> 。 如 de style="margin: 0px; padding: 0px;" >!我是注释de>
更多user-rule.txt语法规则,可以参考AdBlockPlus过滤规则https://adblockplus.org/en/filter-cheatsheet