Featured image of post 国内CVM访问github加速

国内CVM访问github加速

如果你用的国内CVM,有时访问一些网站如github特别慢,你不想忍受了,于是决定要折腾一下,可以看一下这篇文章。
补充:如果你想偷懒,就直接去偷看一键脚本吧。

背景

最近在学习一些东西,实践时经常要在CVM机器上git clone一些代码,无奈访问github实在龟速,故寻找如何更快速的办法。

方案概述

借助ssr能力再加上privoxy提供代理,将一些网络流量分流到更快的通道。同时希望ssr支持订阅方式,毕竟当前出国主要经过机场。

步骤

安装ssr-command-client

详情可查看这里,只需要几步操作。

  1. 安装ssr-command-client
1
pip install shadowsocksr-cli
  1. 添加订阅
1
shadowsocksr-cli --add-url [你的订阅地址]
  1. 更新订阅
1
shadowsocksr-cli -u

有类似如下输出:

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
  1. 查看订阅情况
1
shadowsocksr-cli -l

可能有如下输出: ssr

  1. 启动ssr代理。使用-p指定监听端口,默认1080。
1
shadowsocksr-cli -s [上面订阅列表中的id] -p 1080
  1. 设置HTTP代理。(这步仅为测试,非必须)
1
export ALL_PROXY=socks5://127.0.0.1:1080
  1. 测试代理工作情况。(这步仅为测试,非必须。可以在设置代理前后分别测试)
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来分流

我们希望只对于必要的流量才走代理,如果全走代理的话,流量上有些吃不消并且也不见得快。所以要分流。

  1. 安装privoxy。 用于设置各种代理规则。引用一段其它[博文](http://cckpg.blogspot.com/2011/06/privoxy.html)的描述: Privoxy的好处是它支持HTTP和SOCKS的上游代理,并且允许用户使用灵活的规则配置选择性地使用代理。另外非常棒的一点是,当上游代理为SOCKS4a/SOCKS5的时候,它会要求上游代理进行DNS解析,从而有效避免DNS污染。这一点也是PAC本身无法实现的。
1
apt-get install privoxy
  1. 生成用于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/
  1. 修改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
  1. 重启privoxy。
1
service privoxy force-reload
  1. 设置环境变量代理。 使用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"

参考资料