介绍主流方案及具体方法
前言:
前段时间,国内搞hw,突然出现了大规模的封禁,自己使用了1年多的小鸡也被ban了,欲哭无泪。
借此契机,尝试了下新的科学上网方式,来让其起死回生而不至于白花钱浪费了,特此记录下。
目前主流常用于科学上网的主要有以下几种方案:
shadowsocks(简称ss、55)shadowsocksr(简称ssr、酸酸乳等)v2ray(简称v2)
上述的几种方案,最早出现的是ss,后续在ss的基础上出现了ssr,ssr是完全兼容ss。目前主流用的最多的还是ss和ssr,其中ssr相比ss相对安全一点。
v2相比前面2种方式支持的协议更多,功能更为全面,同时也是支持ss,但是与之相对的,配置繁琐等因而使用普及率没前两者广。
下面介绍具体的安装及使用(均以ubuntu系统为例,其他大同小异):
1、ss
1.1官方安装方式,项目链接主页shadowsocks github,包含多个不同版本的如Android、Windows客户端等。
我们需要做的是在主机安装服务端、安装比较简单,直接执行如下命令即可。1
2
3apt-get install python-pip
pip install shadowsocks等待上述命令完成即成功安装,如上是官方版本的安装方式,安装完成之后需要自己配置端口、密码、加密方式等设置文件启动。
具体的详细参数说明可以参考,上述方式下比较推荐的是通过加载配置文件来启动。
创建/etc/shadowsocks.json文件,示例如下:1
2
3
4
5
6
7
8
9
10{
"server":"my_server_ip",//服务器主机地址
"server_port":8388,//服务器开放端口
"local_address": "127.0.0.1",//本地监听地址
"local_port":1080,//本地监听端口
"password":"mypassword",//加密密码
"timeout":300,
"method":"aes-256-cfb",//加密方式,类似的还有rc4等
"fast_open": false//是否开启tcp加速
}同时也是支持多用户配置的,示例配置文件如下:
1
2
3
4
5
6
7
8
9
10
11{
"server": "0.0.0.0",
"local_port":1080,
"port_password":
{
"8989": "test01test",//端口、密码
"9001": "test02test"//端口、密码
},
"timeout": 600,
"method": "aes-256-cfb"
}上述文件创建设置好之后,直接通过已经安装的ssserver启动即可,具体命令如下:
前台运行
1
2ssserver -c /etc/shadowsocks.json
后台运行
1
2ssserver -c /etc/shadowsocks.json -d start
ssserver -c /etc/shadowsocks.json -d stop如想设置自动启动,自己加个开机启动项即可,可以直接在/etc/rc.local中添加上述启动命令。
1.2小白一键安装方式shadowsocks_install,建议新手使用这种方式,免去各类配置操作。
直接下载对应的sh脚本,赋予权限直接运行即可,python版本的如下:1
2
3
4wget https://github.com/teddysun/shadowsocks_install/blob/master/shadowsocks.sh
chmod 755 ./shadowsocks.sh
./shadowsocks.sh直接根据脚本的提示一步步正常填写就行了,比较简单,在此不多说。
原始作者及相关维护人员基本都退出了项目,相关的教程也都删了,后续应该是基本不会更新了。
2.ssr
2.1项目链接shadowsocksr github,最初的版本原作者迫于压力已经删了,很多资料都已经没了,同样也是包含windows、Android、mac等客户端。
ssr本质和ss是差不多的,只是在ss的基础上多了混淆和伪装,因而相对安全一点,相应的客户端是完全兼容ss的。
安装方式如下:1
git clone https://github.com/shadowsocksr/shadowsocksr.git
拷贝代码库到本地,执行如下命令:
1
2
3
4bash initcfg.sh
//然后移动到shadowsocks目录
python server.py -p 443 -k password -m aes-128-cfb -O auth_aes128_md5 -o tls1.2_ticket_auth_compatible
//-h 可以看到对应的帮助信息同样也可以采用读取配置文件的方式,然后直接执行如下代码即可:
1
python server.py
后台运行、停止和监控日志
1
2
3./logrun.sh
./stop.sh
./tail.sh关于各种混淆及协议方式的优劣对比,建议参考。
默认为
“protocol”:”auth_aes128_md5”
“obfs”:”tls1.2_ticket_auth_compatible”2.2推荐使用一键安装的方式,方法同上面的ss的一键安装方式shadowsocks_install。
1
2wget https://github.com/teddysun/shadowsocks_install/blob/master/shadowsocksR.sh
……后续操作类似,按照步骤提示信息一步步填写信息就行,简单省事。
上述ss和ssr的github项目有的默认分支设置的rm,切换成master主分支即可。
另外建议ss、ssr一般是建议使用常用端口如80、443,其他的可能被封的概率高些。3、v2
重点介绍,因为相对复杂,前面2种配置都相对比较简单,只用简单设置就好。3.1v2ray官网|v2ray github
支持多种协议,V2Ray 可同时开启多个协议支持,包括 Socks、HTTP、Shadowsocks、VMess 等。每个协议可单独设置传输载体,比如 TCP、mKCP、WebSocket 等。
本例采用了相对复杂的web+tls+反代的方案,正常使用无特殊要求的话,采用其他相对简单的方案即可,此方案是为了保障即使在ip被ban的情况下依旧能够正常使用。正常情况下,被封的ip 少则几天多则几个月都是有可能解封恢复的。
V2Ray 提供了一个在 Linux 中的自动化安装脚本。这个脚本会自动检测有没有安装过 V2Ray,如果没有,则进行完整的安装和配置;如果之前安装过 V2Ray,则只更新 V2Ray 二进制程序而不更新配置。
官方安装方式如下:
1 | bash <(curl -L -s https://install.direct/go.sh) |
此脚本会自动安装以下文件:
/usr/bin/v2ray/v2ray:V2Ray 程序;
/usr/bin/v2ray/v2ctl:V2Ray 工具;
/etc/v2ray/config.json:配置文件;
/usr/bin/v2ray/geoip.dat:IP 数据文件
/usr/bin/v2ray/geosite.dat:域名数据文件
此脚本会配置自动运行脚本。自动运行脚本会在系统重启之后,自动运行 V2Ray。目前自动运行脚本只支持带有 Systemd 的系统,以及 Debian / Ubuntu 全系列。
运行脚本位于系统的以下位置:
/etc/systemd/system/v2ray.service: Systemd
/etc/init.d/v2ray: SysV
脚本运行完成后,你需要:
编辑 /etc/v2ray/config.json 文件来配置你需要的代理方式;
运行 service v2ray start 来启动 V2Ray 进程;
之后可以使用 service v2ray start|stop|status|reload|restart|force-reload 控制 V2Ray 的运行。
卸载
其中 systemd 和 sysv 二选一,取决于你的系统。
#停用并卸载服务(systemd):
systemctl stop v2ray
systemctl disable v2ray
#停用并卸载服务(sysv):
service v2ray stop
update-rc.d -f v2ray remove
删除文件
rm -rf /etc/v2ray/* #(配置文件)
rm -rf /usr/bin/v2ray/* #(程序)
rm -rf /var/log/v2ray/* #(日志)
rm -rf /lib/systemd/system/v2ray.service #(systemd 启动项)
rm -rf /etc/init.d/v2ray #(sysv 启动项)
Linux 服务端使用一键安装脚本安装后如何对软件进行完全卸载
参考:https://github.com/v2ray/v2ray-core/issues/187
对于的操作配置问题,官方文档都有详细的说明,在此不细说,下面介绍具体使用的方案时再说。
- 3.2小白新手推荐一键安装方式,详细介绍,没什么特别多的说的,按照步骤一步步操作就行,如下图为一键脚本运行后生成的配置信息说明。
- 3.3WebSocket+TLS+Web+CDN 详细操作配置说明
主要包括以下几个步骤,v2ray 正常使用主要是通过2个配置,一个是服务器端的配置文件一个是客户端:1.正常安装v2ray,参考上面的步骤正常安装即可,上述2种方式均可。
2.使用WebSocket方案,服务器端配置文件信息如下(/etc/v2ray/config.json):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{
"inbounds": [
{
"port": 10000,//端口,自己定义修改
"listen":"127.0.0.1",//只监听 127.0.0.1,避免除本机外的机器探测到开放了 相应 端口
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",//uid 一个唯一值,可以自己生成相当于密码
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",//WebSocket 简写ws
"wsSettings": {
"path": "/zero"//伪装路径
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}大致配置上述参数即可,其他需要细节配置的部分可以参考官方说明如dns,ban ip等,总体来说,上述配置完成后就ok了。
3.TLS 传输层安全 tls是证书认证机制,因此使用tls需要申请证书,在这的前提是得注册一个域名。域名有免费域名和收费域名,不多讲,网上有很多。然后证书有免费和收费证书,对于我们小鸡来说肯定是用免费的啦。一般都是用的Let’s Encrypt的证书,免费三个月可以无限免费续期。比较方便的可以使用宝塔面板(在此强烈推荐,后续的一些操作可以更直观便捷)里面去申请相应的证书也可以用acme.sh,本质都是一样的都是自动续期。
我这边因为后面用了cloudflare的免费CDN,因此使用的是cloudflare(后面简称cf)的证书。在此有一个需要注意的事项就是宝塔和cloudflare其中一个不要开强制跳转https,不然会存在问题,我这里使用的是cf的25年的证书,然后cf开强制https,宝塔不开,如下图:
有其他证书问题的,直接看官方说明照着操作就可以了,宝塔操作后会自动在配置文件中设置,如下图:
我这里因为是用的nginx做为web服务器,还跑有其他的网站在机器上,因此主要是nginx相关的配置为主来进行说明的,其他的如caddy、apache等大同小异。
下面为一般常规操作的nginx服务器端配置,ssl证书就是自己正常申请的证书。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/v2ray/v2ray.crt;
ssl_certificate_key /etc/v2ray/v2ray.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name mydomain.me;
location /zero { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;#假设WebSocket监听在环回地址的10000端口上
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}前面的tls证书等配置完成之后,剩下就是nginx配置反向代理,如上面的nginx配置部分,其中location、地址端口等与前面的服务器v2ray配置要保持一致。
在使用宝塔面板时,配置反向代理可以更为便捷,如下图,配置需要代理的目录目标url即可。
上述所有步骤完成之后,服务器端的配置就已经都完成了。
4.客户端的配置,客户端的配置因不同客户端界面等操作都不太一样,具体的操作有细微区别。
大致的一个配置文件信息如下,其中客户端主要要记住的是几个关键信息,是与服务器相对应:协议、服务器地址、端口、userid、alterid、传输协议、路径、底层传输安全
vmess、xxx.com、443、xxxx-xxxxx-xxx-xxx、64、ws、/zero、tls1
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{
"inbounds": [
{
"port": 1080,//本地监听的端口
"listen": "127.0.0.1",
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "xxx.com",//自己的域名地址
"port": 443,
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",//需要和服务器保持一致
"alterId": 64
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/zero"//需要和服务器保持一致
}
}
}
]
}常规使用的客户端,windows有v2rayN,mac有v2rayX,Android有v2rayNG等,ios有kitsunebi、Shadowrocket等等。
5.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
本质就是通过CDN你的流量并不是直接到你自己的主机。依靠这个可以借助CDN解决你服务器被ban的访问的问题,开启CDN之后,实际上当你ping你的主机时,返回的就不是你主机的真实ip了。就比如说你的主机在美国洛杉矶、由于被ban,没法直接通过国内再去访问连接你的主机了。这是通过CDN就相当于是另外建立了一个桥梁,CDN运营商的服务器能够访问你在美国的服务器,然后你能够访问CDN,就间接的建立了连接,通过这种方式,其实你所有的流量都是在正常不过的网络请求而已。因而降低了被封的风险,当然同时也因此可能也牺牲了一些速度,但是总体来讲总比直接封了不能用了要强很多不是。
关于cdn的使用也比较简单了,在此使用的是cloudflare的服务,是可以免费添加几个网站的,具体2个步骤即可完成:修改dns添加域名解析,设置代理状态。
到此为止,目前主流的几种科学上网的方式都介绍完了。各有优劣,建议按需选择。
其实除此之外最简单的科学上网方式就是通过ssh客户端连接之后直接隧道设置转移规则转发就可以实现科学上网,无需在服务器端安装任何软件方便快捷。
2019/12/10 更新一个可以减少断流的方法,在cf的防护墙设置allow规则,如ip和相应的伪装路径等,同时也可以出于安全性考虑ban掉部分国外请求如来源国家非中国等。
相关工具及参考链接:
- ping.pe
用于测试自己ip到各个不同节点的访问延迟情况等,国外全绿国内全红说明ip被ban了。
尤其需要注意的部分虚拟主机厂商初始分配的ip就可能是国内不可访问的,建议是前期就选好,避免后续的问题。 - SwitchyOmega
算是浏览器比较好用的一个插件了,支持自己配置各种情景条件来判断什么走代理还是不走代理,并且可以自动更新gfwlist特别方便。
另外常见的设置主要是通过对应的客户端启用代理服务器监听本地的1080端口,浏览器SOCKS5连接本地代理服务器实现科学上网。 - 免费顶级域名申请、v2ray实现ws+tls+nginx加密传输、Cloudflare 中转 V2Ray WebSocket、Cloudflare+V2Ray+Caddy+WebSocket+TLS