如果你用的国内CVM,有时访问一些网站如github特别慢,你不想忍受了,于是决定要折腾一下,可以看一下这篇文章。
补充:如果你想偷懒,就直接去偷看一键脚本吧。
背景
最近在学习一些东西,实践时经常要在CVM机器上git clone一些代码,无奈访问github实在龟速,故寻找如何更快速的办法。
方案概述
借助ssr能力再加上privoxy提供代理,将一些网络流量分流到更快的通道。同时希望ssr支持订阅方式,毕竟当前出国主要经过机场。
步骤
安装ssr-command-client
详情可查看这里,只需要几步操作。
- 安装ssr-command-client
1
| pip install shadowsocksr-cli
|
- 添加订阅
1
| shadowsocksr-cli --add-url [你的订阅地址]
|
- 更新订阅
有类似如下输出:
1
2
| 2022-02-08 19:25:05,378 - parse_utils.py[line:113] - [parse_shadowsocksr_by_subscribe_url] - INFO: Start parse ssr subscribe url: ...
2022-02-08 19:25:10,243 - logger.py[line:53] - [main] - INFO: Func - update Total time: 4.86s
|
- 查看订阅情况
可能有如下输出:
- 启动ssr代理。使用-p指定监听端口,默认1080。
1
| shadowsocksr-cli -s [上面订阅列表中的id] -p 1080
|
- 设置HTTP代理。(这步仅为测试,非必须)
1
| export ALL_PROXY=socks5://127.0.0.1:1080
|
- 测试代理工作情况。(这步仅为测试,非必须。可以在设置代理前后分别测试)
1
| curl http://ip-api.com/json/?lang=zh-C
|
可能的输出:
1
| {"status":"success","country":"新加坡","countryCode":"SG","region":"","regionName":"","city":"新加坡","zip":"627753","lat":1.32123,"lon":103.695,"timezone":"Asia/Singapore","isp":"DigitalOcean, LLC","org":"Digital Ocean","as":"AS14061 DigitalOcean, LLC","query":"..."}
|
即发现已经是国外IP访问了。
以上进行到第5步时,本地的sock5代理已经起来。6,7步骤非必须。
使用privoxy来分流
我们希望只对于必要的流量才走代理,如果全走代理的话,流量上有些吃不消并且也不见得快。所以要分流。
- 安装privoxy。
用于设置各种代理规则。引用一段其它[博文](http://cckpg.blogspot.com/2011/06/privoxy.html)的描述:
Privoxy的好处是它支持HTTP和SOCKS的上游代理,并且允许用户使用灵活的规则配置选择性地使用代理。另外非常棒的一点是,当上游代理为SOCKS4a/SOCKS5的时候,它会要求上游代理进行DNS解析,从而有效避免DNS污染。这一点也是PAC本身无法实现的。
1
| apt-get install privoxy
|
- 生成用于gfw的规则文件。
有通过gfwlist2privoxy来生成,发现它对python3不兼容,找了另一个更简单的方式。
1
2
3
4
5
6
| # 下载autoproxy2privoxy代码
git clone https://github.com/cckpg/autoproxy2privoxy.git
# 进入并生成gfw.action。注意如何上面ssr监听端口修改了,这里也把1080替换为对应的端口。
cd autoproxy2privoxy && make -B proxy=socks5://127.0.0.1:1080
# 拷贝到privoxy目录下
sudo cp gfwlist.action /etc/privoxy/
|
- 修改privoxy的配置。
1
2
3
4
5
6
7
8
9
10
11
| # 找到以下filterfile相关行注释掉
#filterfile default.filter
#filterfile user.filter # User customizations
# 找到默认的一些action注释掉
#actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
#actionsfile default.action # Main actions file
#actionsfile user.action # User customizations
# 添加一条我们需要的action
actionsfile gfwlist.action
|
- 重启privoxy。
1
| service privoxy force-reload
|
- 设置环境变量代理。
使用privoxy监听的端口。如果你没有修改上面/etc/privoxy/config的listen-address的话,默认是监听在8118端口上。
1
| export ALL_PROXY=127.0.0.1:8118
|
成果
现在访问国内外速度都不错了。比如git clone一个仓库,有如下速度。
1
2
3
4
5
6
| ubuntu@mercedes:~$ git clone https://github.com/istio/istio.git
Cloning into 'istio'...
remote: Enumerating objects: 322602, done.
remote: Counting objects: 100% (808/808), done.
remote: Compressing objects: 100% (518/518), done.
Receiving objects: 41% (132267/322602), 82.68 MiB | 11.72 MiB/s
|
11MB+/s,知足了,原来是几十KB的龟速啊!
一键脚本
补充于2022-4-1:太长不看,就直接看这个一键脚本吧(修改一下你的订阅地址)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| #!/bin/bash
# 安装ssr-cli
pip install shadowsocksr-cli
export PATH=/home/ubuntu/.local/bin:$PATH
# 添加订阅
shadowsocksr-cli --add-url [你的订阅地址]
# 更新订阅
shadowsocksr-cli -u
# 选择节点启动服务
shadowsocksr-cli -s 8 -p 1080
# 安装privoxy代理
sudo apt-get install privoxy -y
# 设置一下代理,不然下面拉代码下载东西可能很慢
export ALL_PROXY=socks5://127.0.0.1:1080
# 下载autoproxy2privoxy代码
git clone https://github.com/cckpg/autoproxy2privoxy.git
# 进入并生成gfw.action。注意如何上面ssr监听端口修改了,这里也把1080替换为对应的端口。
cd autoproxy2privoxy && make -B proxy=socks5://127.0.0.1:1080
# 拷贝到privoxy目录下
sudo cp gfwlist.action /etc/privoxy/
# 注释掉原来几行
sudo sed -i 's/actionsfile match-all.action/#actionsfile match-all.action/' /etc/privoxy/config
sudo sed -i 's/actionsfile default.action/#actionsfile default.action/' /etc/privoxy/config
sudo sed -i 's/actionsfile user.action/#actionsfile user.action/' /etc/privoxy/config
# 插入一行上面生成的规则
sudo sed -i -e '/#actionsfile user.action/a\
actionsfile gfwlist.action' /etc/privoxy/config
# 重启privoxy
sudo service privoxy force-reload
# 设置代理到privoxy
echo "Please set the proxy like this:"
echo "export ALL_PROXY=127.0.0.1:8118"
|
参考资料