本文是一年多以前还在用VPS科学上网的时候的整理的,VPS主机用的则是利用教育邮箱从GitHub白嫖的DigitalOcean50美元优惠券,最低配置5美元1个月,可以用10个月。配置过程其实是比较麻烦的,曾经想写个一件脚本,奈何当时一直没有学shell编程。利用VPS搭的梯子速度不快,看YouTube还经常比较卡,好处是可以学习一些Linux系统的知识,让我在研究生的预备阶段接触实验室的服务器时没那么捉襟见肘。到了后期,VPS的端口和IP经常被墙,一般端口一天之内就墙了,端口墙过几次之后整个IP就被墙了,端口被墙还好,只要22端口没被墙就可以轻松改端口,然而IP被墙就只能重新换个IP了。而DigitalOcean的登录页面使用的一些服务需要翻墙才可以,这样造成了先有蛋还是先有鸡的矛盾——登录DigitalOcean是为了换IP继续翻墙,但不翻墙又登录不了DigitalOcean,我的解决办法是用手机上的VPN软件翻墙到DigitalOcean网站上换IP,这样既麻烦,又有造成数据泄露的危险。痛定思痛,我于2020年6月份放弃了自己搭建VPS的做法,转而购买付费科学上网工具,这样节省了不少时间和经历,也至于在需要查Google的时候掉链子。
这样,本文只是为了整理而整理,因为这篇文章已经写了很久了,如果因为文件在几个电脑中周转而遗失,未免有些可惜,因此整理到个人博客上,也是给初建的博客充实一下内容。再者,虽然已经不用VPS翻墙了,偶尔还是可以用VPS提供的IPv6能力登录一下IPv6-only
的网站的,比如北邮人PT。
关于如何获得GitHub教育优惠及如何注册DigitalOcean账号并充值,不在本文范围之内,本文默认已经可以开通VPS了。
1. 创建Droplets
在Digital Ocean主页选择Create—>Droplets
,如图所示。
2. 主机设置
在当前页面依次选择设置项。
Choose an image
一般选择
Ubuntu 18.04 x64
,根据自己需求也可选择其他Linux发行版。Choose a plan
如果服务器访问量不大(如主要用于
get across the Great Firewall),选择最低配置的$5种类即可。Add backups
需要额外费用,为主机月租的20%,一般没有需求不选择。
Add block storage
添加可以在不同主机中移动的存储,一般不需要
Choose a datacenter region
选择主机所在地区,列出的地区如下图
实际对于一台特定的主机,并不是所有的区域都可以选择,不能选择的地区会显示为灰色。比如图中的纽约1号计方,旧金山1号机房和阿姆斯特丹2号机房都不可选。
不同地区的主机在中国大陆的访问速度也不同。可以利用Digital Ocean官方的测速工测试。网址为Digitl Ocean speed test
需要指出的是,由于中国三大运营商走的国际线路不同,因此同一个机房在不同运营商的网络代理下速度也不一样。
目前来看,表现比较好的机房有阿姆斯特丹、伦敦、班加罗尔。旧金山1号和新加坡机房之前速度挺快,但最近似乎比较慢,并且有被墙的风险。考虑到中美贸易战的影响,最好不要选择美国的机房,建议选择欧洲和印度的机房。
现在(2019年6月8日)推荐的是班加罗尔的机房,测速很快,实际使用也比之前的新加坡机房要快。猜想的原因可能是印度距离中国比较近(但中印隔着喜马拉雅山,可能线路最终还是从欧洲或东南亚绕过来的)。Select additional options
可选项,推荐勾选
IPv6
,这样可以上北邮人一类的纯IPv6 pt站。Add your SSH keys
这一步是比较关键的一步。如果选择SSH登录主机的话,这一步必不可少,当然可以选择不用SSH登录,但我没试过。
首先需要下载
PuTTY
,并安装,这一步不赘述。安装完成后在Windows开始菜单中看到的PuTTY系列如下图所示:首先打开
PuTTYgen
,会看到如下所示的界面。Type of key to generate
选择RSA
,Number of bits to generate key
设为2048
即可。点击
Generate
按钮,出现进度条,此时正在产生密钥对,移动鼠标使得光标在空白区域随机移动,否则进度条会停滞不前,这样的目的是产生随机的独一无二的密钥对。完成后会出现上图界面。在
Key passphrase
中输入密码,并Confirm passphrase
,这个是私钥的密码,也将是将来登录主机时需要输入的密码。依次选择
Save public key
和Save private key
,保存公钥和私钥在一个你能找到的位置,保存的格式为ppk
格式,命名可以随意,但为了易于辨识,可以命名为public_key.ppk
和private_key.ppk
。保存完毕后不要关闭此页面。把图中的那一串神秘代码(就是公钥)复制下来(全选复制即可)。现在回到Digital Ocean主机创建页面,在
Add your SSH keys
中选择New SSH key
,在弹出的对话框中粘贴刚刚复制的公钥,如果这是一个合法的公钥代码,方框右边将会出现一个绿色的✅鼓励你一下。然后给这个公钥(随便)起个名字,当然为了辨识度,还是起个有意义的名字,比如pub_key_20190608
。这样添加公钥就完成了。这里提一下为什么上一段说“保存完毕后不要关闭此页面”。如果关闭了这个页面,也是可以通过文本编辑器打开保存的公钥ppk文件找到公钥代码的,但这时复制过来经常会出现问题,可能是换行符的问题,此时方框的右边会给你一个红色的❌反鼓励你一下。
Finalize and create
最后一步,检查一下设置信息。并且可以给自己的主机命名,这个命名将作为自己的主机名。也可以使用默认的名字。
到这一步就完成了一个big step了哦。可以点击Create
按钮了。页面将跳转到Droplets,等进度条结束,就可以看到你的主机IP地址了,这标志着你已经有了一台自己的虚拟个人服务器(VPS)了。如下图所示(我有两个Droplets):
3. 登录主机
现在就可以用PuTTY
登录你的主机了。首先打开PuTTY
(not PuTTYgen
)。
主界面就是这样子。在Host Name (or IP address)
方框中填入自己的IP地址,Port
就用默认的22
。Connection type
选择SSH
。一切按照默认的来就行。
接着选择Connection->SSH->Auth
,如下所示:
点击Browse...
,选择之前保存的私钥ppk文件即可。之后再点击Session
按钮,回到最初的起点。在Saved Sessions
方框中输入一个名字,当然也是可以随便起的。点击Save
按钮,就可以看到方框中出现了一个你刚刚的命名。以后每一次要登录主机,就双击你的Session
名,点击Load
,在点击Open
即可。
点击Open
后,就会出现一个黑框(并没有眼镜🐸)。等待几秒(也许不需要等待),就会出现login as:
几个不大不小的字,在后面输入root
,并按Enter
键,会出现让你输入密码的界面。
这里要输入的密码就是保存密钥时输入的密码。输入密码时屏幕上是什么都不显示的,(闭着眼睛)输入即可。输入完了Enter
一下。这时你就登录上了你的主机了,界面如下所示:
现在就可以准备安装科学上网的工具了。
4. 使用Shadowsocks
Shadowsocks是用于服务器端和客户端代理的软件。
以下所有输入均为命令行输入,基础是你已经登录了主机,并出现了上面那张图。
首先输入sudo apt update
,会升级什么什么玩意,不管。
然后来一个sudo pip3 install shadowsocks
,这就安装好Shadowsocks了。这一步如果报错,通常都是没有pip3
导致的,使用命令sudo apt install python3-pip
即可。
现在开始配置Shadowsocks。输入命令sudo vim /etc/shadowsocks.json
,这个命令是用vim
创建一个空的json格式文件,而我们需要在里面输入一些内容。首先按i
键进入编辑模式,此时页面左下角会出现--INSERT--
字样。接着输入如下代码(你可能会想着来一套Ctrl-C
, Ctrl-V
,但在vim
下这个行不通,至于怎么复制粘贴,我也不会,所以暂时还是老老实实敲代码进去。在vim
中全键盘操作,鼠标没用PuTTY
中似乎是可以右键复制粘贴的,vim中是否可以鼠标复制粘贴应该取决与不同的终端是否提供了快捷功能):
1 | { |
其中可以更改的地方为:
server_port: 12345
:后面的端口号随便输入,开心就好,0-65536
之间都是OK的,但为了稳妥,还是建议输入8000
以后的数字。password: "your password"
:自己的密码,毋庸多言。这个密码是后面在Shadowsocks客户端登录时要用的
输入完毕后检测一下有没有错。没错的话按一下ESC
键,注意到此时左下角变成了/etc/shadowsocks.json
等等文字。再输入:wq
,按Enter
键退出vim
编辑模式。
用如下命令启动Shadowsocks:
ssserver -c /etc/shadowsocks.json -d start
如果正常的话,Shadowsocks就启动了,会看到一些友善的提示,表明了Shadowsocks已经在运行。
当然天有不测风云,运行这一步命令后可能会出现错误(如果没有那是最好了),报错形式如下:
1 | AttributeError: /usr/local/ssl/lib/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup |
原因是openssl
升级到1.1.0
以上版本,导致shadowsocks2.8.2启动报undefined symbol: EVP_CIPHER_CTX_cleanup
错误。解决办法如下:
- 输入
vim /usr/local/lib/python3.6/dist-packages/shadowsocks/crypto/openssl.py
,打开文件 - 按
i
键进入编辑模式,找到第52行(或者附近),将libcrypto.EVP_CIPHER_CTX_cleanup.argtypes
替换为libcrypto.EVP_CIPHER_CTX_reset.argtypes
- 同样找到第111行附近,同样将
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes
替换为libcrypto.EVP_CIPHER_CTX_reset.argtypes
- 修改完毕,按
ESC
键,再输入:wq
退出。
这时再次运行:
ssserver -c /etc/shadowsocks.json -d start
就会正常启动了,并出现了一些比较友善的提示,这样服务器端的Shadowsocks就配置完成了。
5. 使用BBR加速
BBR
可以加速TCP,尽可能跑满带宽, 并且尽量不要有排队的情况。在网络环境较差的情况下,使用BBR
有比较好的效果。总而言之,使用BBR
加速后网速会更快。操作步骤如下:
修改系统变量
1
2echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf保存生效
1
sysctl -p
查看内核是否已开启
BBR
1
sysctl net.ipv4.tcp_available_congestion_control
显示以下即为开启
1
net.ipv4.tcp_available_congestion_control = bbr cubic reno
查看
BBR
是否启动1
lsmod | grep bbr
显示以下即为开启
1
tcp_bbr 20480 14
部分显示会有细微不同,只要没有疯狂报错即可。
如果以上所有内容都完成了,那么可以关掉PuTTY
,也就是说,服务器端的事情都做完了。下面可以进行客户端的设置。
6. 客户端Shadowsocks配置
实际上现在用的Shadowsocks客户端一般都是ShadowsocksR,https://可以点开这个链接下载最新版。
如图所示,服务器IP、服务器端口、密码需要修改,填入/etc/shadowsocks.json
配置文件里的东西就行了。点击确定
按钮。
客户端的Shadowsocks同样需要一些设置。
系统代理模式
选择PAC模式
代理规则
选择绕过局域网和大陆
PAC
那里可以选择更新为GFWList
,稍等片刻会弹出提示更新成功。以上步骤结束,就可以打开浏览器试试Google啦。
7. Chrome设置科学上网切换
7.1. 设置插件
首先打开chrome商店(在左上角)搜索SwitchyOmega
,如图所示:
点击安装,会出现一个小图标,如下图:
右键这个图标,选择选项,
第一次打开选项页面时会有一些提示什么的,全部跳过。
首先点击情景模式,按照下图所示的配置一下:
点击auto switch,选择添加规则列表,因为我已经设置好了,这里无法演示,最终效果应该跟下图一样。
规则列表设置如下图,选择AutoProxy
,规则列表网址填入内容为:
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
填好后点击立即更新情景模式,会出现一大堆网址,如下图所示:
点击应用选项,就OK了。
7.2. 如何应用
对于大部分网址,该插件会自动判断是否需要翻墙模式,比如谷歌就会翻墙,百度就不会翻墙。
当一个网站为翻墙模式时,这个插件的图标会变蓝色,并且当你把鼠标移到插件图标上时,会出现一堆文字,如下图所示:
当一个网站不是翻墙模式时,这个插件的图标是黄绿色的,并且当你把鼠标移到插件图标上时,会出现少量文字,其中有直接连接的提示,如下图所示。
直接连接就是不翻墙的意思,proxy是一个单词,即“代理”的意思,代理就是翻墙。
对于有些网站,可能不用翻墙模式就能打开,但是网页速度比较慢,或者下载速度比较慢;或者这个网站插件认为不用翻墙,但实际上必须要翻墙才能打开,这时就需要手动设置这个网站为翻墙模式。实现这样的操作有以下两种模式。
一是临时翻墙,临时翻墙的意思是在chrome没有关闭之前,打开这个网站都会翻墙,但如果关掉了chrome,再打开chrome登这个网站,就有成了不翻墙模式。这个模式对于偶尔用的网站比较适用。操作方法为:左键点击插件图标,左键点击那个扫帚一样的图标(这个图标后面都会有你当前页面的网址,我这里用bing做个演示),在下拉菜单中选择proxy
,就使得这个网站临时变成翻墙模式了。同理,如果你想使某个本来使翻墙模式的网站不翻墙,那么就可以点击直接连接
。
第二种模式是永久翻墙,适用于一些经常需要访问的网站,所谓的永久模式,就是说即使你关闭了chrome,再打开chrome登这个网站,仍然是翻墙模式。设置方法为:点击添加条件,如下图。
会弹出如下界面,注意画红线的地方。条件设置表示你要设置的网址,这里是*.bing.com
,网址中的*
是通配符的意思,*.bing.com
表示所有后缀是.bing.com
的网址(如www.bing.com
, images.bing.com
, wiki.bing.com
等等等等),这一栏一般不要修改。情景模式有两个:proxy
和直接连接
,如果你想设置这个网站为翻墙,就选择proxy
,如果像设置为不翻墙,就选择直接连接
。选择好后点击添加条件
。如果你设置的是翻墙,那么你会发现插件的图标变成了蓝色,表明这个网站当前正在使用翻墙模式。
设置一个网站为永久模式后,插件会记录这些网站用什么模式,可以点开插件的选项看看。下面是我的情况,一些网站我设置成了翻墙,而一些网站我设置的是不翻墙,也就是直接连接。如果你点击删除按钮,那么这个网站是否翻墙又回到插件默认的状态了。