同防火墙的斗争记

由于很多资料百度不好查到,而且wiki,还有很多dalao 的blog上面的学习资料要Google才搜得到,因此科学上网就成为了刚需。

心血来潮决定自己去搞一个VPS自己建立翻墙服务,免得天天去为了翻墙去到处找免费VPN,焦头烂额速度还慢,因此就看教程去学习搭建免费VPS进行翻墙,由于我的图床替换脚本被怀疑DDOS了,一天只能上传10张图,就很难顶,有些地方就不截图文字的方式

一、Shadow Socks + BBR plus

教程[https://medium.com/@jackme256/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-vultr-vps-%E6%90%AD%E5%BB%BA-shadowsocks-ss-%E6%95%99%E7%A8%8B-%E6%96%B0%E6%89%8B%E5%90%91-968613081aae](https://medium.com/@jackme256/科学上网-vultr-vps-搭建-shadowsocks-ss-教程-新手向-968613081aae)

最开始的网站教的就是去申请一个VPSVPS可以理解为别人开了一堆服务器给你用,你就花钱租一个服务器的使用权,那个教程网站推荐的是vultr,个人觉得还不错,便宜的2.5d/mo已经没了,就只有5d/mo

eknvMSjBmhf84I2.png

这个IPV6 ONLY, 顾名思义就只能访问支持IPV6的网站,非常坑爹,用来自己做做试验倒还不错,如果是自己做实验为什么不用阿里云的学生VPS呢?[手动滑稽]

一路点击下一步,这个就不用我多说了,后面有几个选项

9YZAJGc8W2Uj47E.png

开着没啥用,不过1和3反正开了也不要钱

为了演示这个我还专门重新开了一台服务器,不过一想到如果能让更多的人科学上网,看到外面的世界,这些就都不算什么了

使用 ssh 连接服务器

然后就是在服务器里面部署bbr plus

一键脚本

1
wget --no-check-certificate -O tcp.sh https://github.com/cx9208/Linux-NetSpeed/raw/master/tcp.sh && chmod +x tcp.sh && ./tcp.sh

国人很贴心的加上了中文支持,爽啊

DNM6ThaB2r8jU7o.png

选择2,一顿安装之后,会提示重启之后才能继续,那就reboot重启呗

重启后运行

1
./tcp.sh

选择开启对应的bbr加速就可以了

bbr 可以理解为是一种 tcp 延迟协议优化,什么?tcp是什么?建议学习计网。bbr plus 就是bbr的升级版,后面还有bbr 魔改版。

后面也有锐速可以选择,不过在线路以及UDP面前这些加速都算不了什么

然后就是shadowsocks(简称ss)的安装,过程比较智能

一键脚本

1
wget — no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh

安装过程是便利的,黑白框框文字不停跳动的界面是帅气的,很适合拿去公共场所全屏装X然后吸引目光,嗯,你就是带嗨阔!

然后最后你就会得到如下的东西,他还给你标红了,明显后面要用到

1
2
3
4
Your Server IP        :  12.34.56.78
Your Server Port : xxxx
Your Password : xxxxxx
Your Encryption Method: xxxxxxxxxxxxx

然后就是常见的控制命令了

1
2
3
启动 /etc/init.d/shadowsocks start
重启 /etc/init.d/shadowsocks restart
关闭 /etc/init.d/shadowsocks stop

然后去下载ss的客户端,地址放下边了

https://shadowsocks.org/en/download/clients.html

弄好了之后就填写你的刚才记下来的4个数据,对应填上去(管理员身份运行shadowsocks.exe,请),然后在小飞机图标那儿右键-全局模式/PAC模式(PAC模式需要你先更新一下PAC的list,PAC模式意思就是会直连国内的站点,对国外的站点才会用代理)

然后你可能会发现还是没网,如果你是用的centOS系的话那么就铁定没网,因为centOS系会关闭所有端口,惊不惊喜?

使用一下命令来打开你的端口

1
2
3
firewall-cmd --zone=public --add-port=xxxx(你的端口号)/tcp --permanent
firewall-cmd --zone=public --add-port=xxxx(你的端口号)/udp --permanent
firewall-cmd --reload

想查看自己开了那些端口

1
firewall-cmd --list-port

shadowsock + bbr plus + kcptun

直接tcp连接的话你的速度会受制于你的线路,后面室友给我介绍了这样一个kcptun,但是由于一些很悲伤的原因我把这玩意给删了,就没有图了

一键安装脚本

1
wget --no-check-certificate https://github.com/kuoruan/shell-scripts/raw/master/kcptun/kcptun.sh && chmod +x ./kcptun.sh && ./kcptun.sh

同样安装过程很良心,而且还是国人做的,很贴心的上了中文,即便是不会设置里面也会有默认设置,一路跟着默认设置走就是了

然后需要你在本地额外加一个接收端

教程:https://ssr.tools/588(需要科学上网)

这个加速的原理就是把原始的tcp发包变成udp发包,因此基于tcp优化的bbr可能在这里拿不上用场,原来的tcp发一个,udp就发个三四倍,是一种牺牲流量来换取速度的过程,单一的请求和tcp的效果差别不大,但是像看youtube/下载东西,这样的请求有奇效,我从原来的2000kbps跑到了后面的14000kbps,爽的一批。

不过你爽了,GFW也爽了,你的发包翻倍了,他接受到的特征包也翻倍了,而且对于你们中国电信之流的运营商来说,一个用户原先开一个网站要100k,现在还要500k,万恶的资本家就不乐意了,就会给你QOS(我至今还没有遇到这么温柔的对待),或者是直接封了你的端口,多来几次直接连你这个IP一块儿封了,骨灰都给你扬了,ping都ping不通。

特殊时期之前我倒没什么,特殊时期我一般是上午开,下午就没了,下午又开,晚上就没了。

v2ray

shadowsocks的流量已经被识别了,然后就迫不得已用了v2ray,配置麻烦就麻烦呗(真香),那咋办嘛

不过碰巧我找到了一键安装脚本

1
2
3
wget https://install.direct/go.sh
chmod +x ./go.sh
./go.sh

安装之后会着重显示你的uuid,alter_id,IP端口号,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  inflating: /tmp/v2ray/config.json  
creating: /tmp/v2ray/doc/
inflating: /tmp/v2ray/doc/readme.md
inflating: /tmp/v2ray/geoip.dat
inflating: /tmp/v2ray/geosite.dat
creating: /tmp/v2ray/systemd/
inflating: /tmp/v2ray/systemd/v2ray.service
creating: /tmp/v2ray/systemv/
inflating: /tmp/v2ray/systemv/v2ray
inflating: /tmp/v2ray/v2ctl
extracting: /tmp/v2ray/v2ctl.sig
inflating: /tmp/v2ray/v2ray
extracting: /tmp/v2ray/v2ray.sig
inflating: /tmp/v2ray/vpoint_socks_vmess.json
inflating: /tmp/v2ray/vpoint_vmess_freedom.json
PORT:xxxxx
UUID:cd0e558d-18a5-4077-b5ec-3b3c14a760c7
Created symlink from /etc/systemd/system/multi-user.target.wants/v2ray.service to /etc/systemd/system/v2ray.service.
V2Ray v4.20.0 is installed.

教程在这里

https://www.4spaces.org/digitalocean-build-v2ray-0-1/

然后需要你自己手动去下载客户端,教程里都有地址

v2ray是基于配置文件来进行设置的,打开配置文件

1
vi /etc/v2ray/config.json

dalao们一上来就能直接使用vim,地表最强编辑器,然而我这种俗人就只能偷偷地用最简单的记事本,高级一点就写vscode,还得躲着躲着写,被发现了还在用小学生编辑器就不好了,嘤嘤嘤

好了不扯那些,很多人进来肯定和我一样都是一脸懵逼的,没有高亮,没有括号匹配

a进入编辑模式,编辑完之后按Esc退出编辑模式,然后按:wq保存退出(冒号也要打)

我一般喜欢进入退出编辑模式,然后按vG小写的v大写的G,全选。复制到vscode里面编辑,改好了之后再放进服务端里面

什么?还有格式?建议学习JSON呢,而且网上也有很多在线JSON格式检查器呢

效果图如下

1VjIWMCsX6kt4iO.png

速度emmm也就那样吧,时而10000kbps,时而2000kbps,不过重在稳定,我把这种用来当备用机子

他这个如果不指定listen的话会监听到你的IPV6的 端口,然而我们的连接是IPV4的连接,所以就有你开了v2ray,连上了但是没网的情况,下面是修改服务端的配置文件

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
{
"inbounds": [
{
"port": 16823,
"protocol": "vmess",
"listen":"12.34.56.78",//在这里添加一个你的服务器IP
"settings": {//这后面的不管
"clients": [
{
"id": "b831381d-6324-4d53-ad4f-8cda48b30811",
"alterId": 64
}
]
},
"streamSettings": {
"network": "tcp"
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}

v2ray + mkcp

使用过udp加速之后再回去使用tcp普通的连接,就觉得有点慢。

就好像周围都是罗玉凤,你不会觉得罗玉凤有什么丑的,甚至觉得还凑合,但是有一天你看了一眼范冰冰,你就再也接受不了罗玉凤了。

好在v2ray里面有自带的udp发包模块只需要你在服务端和客户端配置文件里面改一下就可以了

直接上官网的样例

服务端

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
{
"inbounds": [
{
"port": 16823,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "b831381d-6324-4d53-ad4f-8cda48b30811",
"alterId": 64
}
]
},
"streamSettings": {
"network": "mkcp", //此处的 mkcp 也可写成 kcp,两种写法是起同样的效果
"kcpSettings": {//这个kcpSettings这一节可以不要
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": true,
"header": {
"type": "none"
}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}

客户端

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
44
45
{
"inbounds": [
{
"port": 1080,
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"settings": {
"auth": "noauth"
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "serveraddr.com",
"port": 16823,
"users": [
{
"id": "b831381d-6324-4d53-ad4f-8cda48b30811",
"alterId": 64
}
]
}
]
},
"streamSettings": {
"network": "mkcp",
"kcpSettings": {//这个kcpSettings这一节可以不要,设置了反而可能出错
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": true,
"header": {
"type": "none"
}
}
}
}
]
}

请不要直接复制粘贴上去,这个说的是英文,查单词的意思,请,然后对于实际情况自己修改

然后你就会发现你爽了,速度上来了

然后再特殊时期,上午开,下午就封了

v2ray + mkcp + udp2raw

上面说了udp容易被封禁的原因嘛,就是因为大量的UDP发包,又惹到了GFW又惹到了运营商,所以有个工具就是帮我们把UDP伪装成TCP协议,使用至今没被GG,两全其美,awsl

项目地址(有中文,毕竟国内这方面的需求比较大):https://github.com/wangyu-/udp2raw-tunnel/blob/master/doc/README.zh-cn.md

不过碰巧我又找到了一键安装脚本

1
bash <(curl -s -L https://233blog.com/udp2raw.sh)

原理就是先让你的数据通过你的udp2raw客户端,然后再让udp2raw客户端与服务端之间进行通信,然后达到伪装的效果。

使用方法文档上面已经写得比我好,那么不再多说,希望大家去看文档的时候不要关掉我这个窗口就好了

缺点就是你需要再本地开一个框框来作为本地udp2raw客户端,而且你的ssh一旦关掉,那么你的服务端也没了,而且手机更没法用

首先是服务端的问题,至于nohup我试过,没用的

使用screen,很多linux系统自带都有这个,在一个直接screen回车进入一个screen,然后运行

1
sudo ./udp2raw_amd64 -s -l 0.0.0.0:4096  -r 127.0.0.1:7777   -k "passwd" --raw-mode faketcp   --cipher-mode xor  -a

随后ctrl+a,d就可以回来了,

这个时候屏幕上就会显示你的screen信息

1
2
[detached from 1883.pts-0.vultr]
[root@vultr ~]

如果要回到你的原来的screen,就可以使用screen -p xxxx(上面给你的数字),回来

然后是客户端的解决,可以挂一个虚拟机的方式,随用随开,也可以写一个VB脚本,不过这样做手机可能有点难受

不过我推荐弄一台国内的VPS,或者是国内有一台固定IP的机器,然后在这台国内的机器上面开启udp2raw的客户端

然后在你的v2ray上面目标地址选择你的客户端所在的地址,端口选择udp2raw指定的端口,其余的不变即可,这样手机电脑就都可以使用了。

最终看YouTube的4K速度如下

hqu8rWc1JEpyOlK.png

究极方案 :v2ray + ws + tls + cdn

我还没试过这种方案,不过原理大概就是把你的VPS伪装成一个https的网站服务,然后还套上一个域名解析,导致GFW根本分不出来你到底是访问网站还是在科学上网,不过这是套了4层,要是还被挂掉,那么我没有办法了