从零开始的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