从零开始的VPS生活 Vol2-4:科学上网——稳定压倒一切的v2ray
v2ray是一个更nerd的科学上网工具,论好用,它不及ss的丰富“产业链”(官网原话),但是因为它的数据包载体更加灵活,所以用它作为一个稳定的备胎是非常实际且有效的。
v2ray的设置极为丰(复)富(杂),本文只是给出一种偏重于稳定的设置方案,如有其他需求,可以自行研究,官网上有足够详细的资料。由于这种方案延迟极高,适用场景主要在于作为科学上网手段的应急备份,以及对延迟要求不高的视频场景(看直播/高码率视频的稳定性优于其他工具,只要连上了就基本不会断连),看网页的话会非常不爽。
本文采用的方案为websocket——tls——cdn。由v2ray-core提供接口,nginx作为反向代理,cloudflare作为cdn(你也可以选择其他免费的或者收费的cdn,物理距离近(如香港/韩国)的话可以显著降低延迟)
本文假定读者已经能够顺利安装nginx,创建虚拟主机,了解在何处修改虚拟主机的配置文件,且能够使用acme.sh生成证书并将其配置在nginx的https配置中。 如果学习上述内容有困难,建议使用lnmp.org的一键安装包,在安装过程中不安装MySQL并在安装后调低php-fpm的worker数量。即可享受其提供的“lnmp”cli工具的便利。 本文同样假定读者已经拥有使用公共服务商的cdn服务设置网站的cdn的能力,总之这篇文章并不面向新手
安装
由于官方没有提供软件源安装的方案,所以这里采用官方的一键安装脚本:
bash <(curl -L -s https://install.direct/go.sh)
配置v2ray
编辑/etc/v2ray/config.json,填入以下内容:
{
"inbounds": [{
"port": 10010,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [{
"id": "7742f2cd-aaaa-bbbb-cccc-66ed3025ef61",
"alterId": 64
},
{
"id": "1001478b-dddd-eeee-ffff-7629b9c8d3e3",
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/download"
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
}, {
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}]
}
}
这里要改的地方:
Clients的ID,这里填写随机生成的UUID,相当于ss的密码,记住一定要去生成一个新的自用。比如使用这个。
Client的数量可以任意添加,应该保证一个设备一个,方便区分。
wsSettings.path,这里可以任意填写,记住跟下面的nginx配置中相同。
port端口,防火墙不要开放这个端口给外部,nginx内网访问就足够了。
然后启动即可:
systemctl start v2ray
systemctl enable v2ray
配置nginx
nginx怎么安装,启用,建立虚拟主机,我就不在这讲了,这部分用caddy或者其他什么东西都是可以的。
这里使用的域名是download.noobear.com(实际上不存在),需要换成自己的域名。例子修改自lnmp一键安装包生成的虚拟主机配置。
server
{
listen 80;
listen [::]:80;
server_name download.noobear.com ;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/download.noobear.com;
# 这是acme.sh续期证书时使用的部分
location ~ /.well-known {
allow all;
}
# 禁止访问任何隐藏文件
location ~ /\.
{
deny all;
}
# 把所有http请求转化为https的
location ~ /
{
rewrite ^(.*)$ https://$host$1 permanent;
}
access_log off;
}
server
{
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name download.noobear.com ;
index index.html index.htm index.php default.html default.htm default.php;
# 配置https需要的证书和加密方式
ssl on;
ssl_certificate /usr/local/nginx/conf/ssl/download.noobear.com/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/download.noobear.com/download.noobear.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
# 这条是lnmp一键安装包生成的不使用重写规则的条目
include rewrite/none.conf;
# 这是acme.sh续期证书时使用的部分
location ~ /.well-known {
allow all;
}
# 这是最关键的部分,端口要和上面一致
location /download {
proxy_redirect off;
proxy_pass http://127.0.0.1:10010;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
# 不使用连接日志
access_log off;
}
配置CDN
cdn配置,各服务商各异,重点在于将download.noobear.com(示例地址)经由cdn进行连接。这样同时有助于保护服务器本身的IP。
客户端参数
这里的参数项翻译采用Windows上的V2RayW版本,其他版本客户端请自行对照填入。
- 主inbound:http
- 服务器地址:download.noobear.com:443
- User ID:7742f2cd-aaaa-bbbb-cccc-66ed3025ef61(或任意一个自定义的ID)
- alterID:64
- 加密协议:默认
- 网络:ws(WebSocket)
- 传输设置-WebSocket-Path:/download(上面设置的)
- 传输设置-WebSocket-Headers:(留空)
- 传输设置-TLS-启用:是
- 传输设置-TLS-允许非安全:否
- 传输设置-TLS-serverName:download.noobear.com