前段时间自己搭建了一个shadowsocks服务,在windows,MAC,Android和IOS上使用都挺方便的,基本上只需要shadowsocks本身就可以搞定。
各个平台的客户端下载:https://shadowsocks.com/client.html
在Linux下的使用有些特殊,安装shadowsocks-gui 之后默认是全局模式,而且没有选项可以设置成PAC模式,这比较坑。总不能上什么网都去国外转一圈再回来。网上搜了一圈,大致方法有两种。
方法一:
直接使用别人共享的PAC文件,例如直接在“系统设置”-》“网络”-》“网络代理”中选择“方法”为“自动”,下面URL填入:
https://raw.githubusercontent.com/clowwindy/gfwlist2pac/master/test/proxy_abp.pac
即可使用此共享的PAC规则文件进行上网。
也可以将此文件保持到本地,例如将文件保存为/home/xxx/autoproxy.pac, 然后URL一栏填入file:///home/xxx/autoproxy.pac即可。(xxx为当前用户的用户名)
此方法的优点是简单,不需要复杂的制作pac过程。
方法二:使用工具制作自己的pac文件。
目前常用的制作工具有以下两个:
Genepac:https://github.com/JinnLynn/genpac
gfwlist2pac:https://github.com/clowwindy/gfwlist2pac
两个工具功能差不多,但是前者选项多一些,功能更强大一些,特别是获取gfwlist的时候也可以使用代理,这是后者不具备的。由于获取gfwlist是从googlecode.com,这个网站由于众所周知的原因访问不了,因此用后者就没法在线获取到gfwlist文件,只有通过其他途径下载到本地后再制作pac文件,这就比较麻烦。因此强烈推荐使用前面一个Genepac。
Genepac的安装:(需要先安装pip工具,安装方法很简单,自行百度)
sudo pip install genpac
工具安装完成后下面是使用方法:(不同版本可能参数会不同,以下是1.3.0版本的说明)
genpac [-h|--help] [-v|version]
[-p PROXY|--proxy=PROXY]
[--gfwlist-url=URL] [--gfwlist-proxy=PROXY]
[--gfwlist-local=FILE] [--update-gfwlist-local]
[--user-rule=RULE] [--user-rule-from=FILE]
[-c FILE|--config-from=FILE] [-o FILE|--output=FILE]
[-z|--compress]
[--base64]
[--init[=PATH]]
可选参数:
-h, --help 帮助
-v, --version 版本信息
-p PROXY, --proxy=PROXY PAC文件中使用的代理信息, 如:
SOCKS 127.0.0.1:8080
SOCKS5 127.0.0.1:8080; SOCKS 127.0.0.1:8080
PROXY 127.0.0.1:8080
--gfwlist-proxy=PROXY 获取gfwlist时的代理设置, 如果你可以正常访问gfwlist, 则无必要使用该选项
格式为 "代理类型 [用户名:密码]@地址:端口" 其中用户名和密码可选, 如:
SOCKS5 127.0.0.1:8080
SOCKS5 username:password@127.0.0.1:8080
--gfwlist-url=URL gfwlist网址,无此参数或URL为空则使用默认地址, URL为-则不在线获取https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
--gfwlist-local=FILE 本地gfwlist文件地址, 当在线地址获取失败时使用
--update-gfwlist-local 当在线gfwlist成功获取且gfwlist-local存在时, 更新gfwlist-local内容
--user-rule=RULE 自定义规则, 该参数允许重复使用或在单个参数中使用`,`分割多个规则,如:
--user-rule="@@sina.com" --user-rule="||youtube.com"
--user-rule="@@sina.com,||youtube.com"
--user-rule-from=FILE 从文件中读取自定义规则, 该参数使用规则与--user-rule相同
-c FILE, --config-from=FILE
从文件中读取配置信息
-o FILE, --output=FILE 输出到文件, 无此参数或FILE为-, 意味着输出到stdout
-z, --compress 压缩输出
--base64 base64加密输出, 注意: 部分浏览器并不支持经过base64加密的pac文件
--init[=PATH] 初始化配置和用户规则文件
genepac可以使用全命令行或者配置文件方式来生成pac文件。所谓的配置文件方式其实就是将所有配置参数写到一个文件里面,直接导入此文件来生成pac文件。两者效果一样。
在主目录下新建一个shadowsocks的文件夹,方便管理生成的文件:
mkdir ~/shadowsocks
cd shadowsocks
命令行方式:
genpac --proxy="SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" -o autoproxy.pac --gfwlist-url="https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt"
即可在shadowsocks文件夹下生成autoproxy.pac文件
配置文件方式:
将下面内容保存为名为config.ini的文件,并放置于shadowsocks文件夹下
; 配置示例
; 注: 命令中直接输入的选项优先级高于配置文件
; 布尔型的设置仅当为true时才为真
[config]
; PAC文件中的代理
; 注: 如果配置的是多条可选项,应使用引号包围,如下面的例子
; proxy = "SOCKS5 127.0.0.1:9527; SOCKS 127.0.0.1:9527"
proxy = SOCKS5 127.0.0.1:1080
; gfwlist获取相关设置
; 获取gfwlist时的代理
gfwlist-proxy = SOCKS5 127.0.0.1:1080
; gfwlist文件网址,留空使用默认,值为`-`则表示不在线获取
gfwlist-url = https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
; gfwlist本地文件,在线地址获取失败时读取本地
; gfwlist-local = /PATH/TO/GFWLIST/LOCAL
; 更新本地gfwlist文件 默认 false
; 当成功获取在线的gfwlist文件并且gfwlist-local存在,是否更新gfwlist-local
; update-gfwlist-local = false
; 是否压缩,默认 false
; compress = false
; 是否base64加密输出,默认 false
; 警告:部分浏览器并不支持base64编码的PAC文件,慎重使用此选项
; base64 = false
; 用户自定义规则文件,可使用`,`分割多个文件
; user-rule-from = /PATH/TO/USER/RULE/FILE_1,/PATH/TO/USER/RULE/FILE_2
;user-rule-from = ~/shadowsocks/user-rules.txt
; 输出文件 该值为空或`-`则输出到stdout
output = ~/shadowsocks/autoproxy.pac
在终端下执行
genpac -c ~/shadowsocks/config.ini
即可在shadowsocks文件夹下生成autoproxy.pac文件
由上面的操作可以看出,两种方式其实没什么区别,前者是直接在命令行下敲入参数,后者是讲参数写入文件,生成的时候直接导入文件即可。相比较来说后者简单一些,不容易出错,也便于管理。
然后在“系统设置”-》“网络”-》“网络代理”中选择“方法”为“自动”,下面URL填入:
file:///home/xxx/shadowsocks/autoproxy.pac
即可使用此PAC规则文件进行上网。(xxx为当前用户的用户名)
另外,如果要使用自定义的规则文件,可以在命令行方式中加入参数
--user-rule-from="~/shadowsocks/user-rules.txt"
或者在配置文件方式中去掉config.ini文件中
;user-rule-from = ~/shadowsocks/user-rules.txt
前面的分号注释,变成
user-rule-from = ~/shadowsocks/user-rules.txt
具体自定义文件内容及规则:user-rules.txt (将下面内容保存为user-rules.txt放置于shadowsocks目录下)
! 用户自定义的代理规则
!
! 语法与gfwlist相同,即AdBlock Plus过滤规则
!
! 简单说明如下:
! 1. 通配符支持,如 *.example.com/* 实际书写时可省略* 如.example.com/ 意即*.example.com/*
! 2. 正则表达式支持,以\开始和结束, 如 \[\w]+:\/\/example.com\
! 3. 例外规则 @@,如 @@*.example.com/* 满足@@后规则的地址不使用代理
! 4. 匹配地址开始和结尾 |,如 |http://example.com、example.com|分别表示以http://example.com开始和以example.com结束的地址
! 5. || 标记,如 ||example.com 则http://example.com、https://example.com、ftp://example.com等地址均满足条件
! 6. 注释 ! 如 ! Comment
!
! 更详细说明 请访问 http://adblockplus.org/en/filters
!
! 配置该文件时需谨慎,尽量避免与gfwlist产生冲突,或将一些本不需要代理的网址添加到代理列表
!
! Tip: 在最终生成的PAC文件中,用户定义规则先于gfwlist规则被处理
! 因此可以在这里添加一些常用网址规则,或能减少在访问这些网址进行查询的时间
! 如:
@@sina.com
@@163.com
twitter.com
youtube.com
||google.com
||wikipedia.org
文中提到的所有文件见附件:
shadowsocks.tar:http://www.pulller.com/wp-content/uploads/2015/06/shadowsocks.tar1.gz