红联Linux门户
Linux帮助

shadowsocks在ubuntu下的自动代理(PAC模式)

发布时间:2016-02-21 15:49:38来源:pulller.com作者:linux人

前段时间自己搭建了一个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


本文永久更新地址:http://www.linuxdiyf.com/linux/18265.html