以WebSocket TLS Web配置v2ray - glloyd0314/glloyd0314.github.io GitHub Wiki

以WebSocket+TLS+Web配置v2ray

本指南基于Ubuntu 18.04 LTS建立。

前置工作

  1. 购买顶级域名(例如glloyd.com)和服务器

  2. 将顶级域名绑定在Cloudflare的个人账户上,设置SSL/TLS的加密模式为完全,开启始终使用HTTPS

  3. 在Cloudflare里建立并解析一个二级域名(例如tls.glloyd.com)到服务器的ip地址,调整代理状态为“仅限DNS”

配置v2ray与服务器

对于已安装Nginx的服务器

配置v2ray

  1. 使用ssh进入服务器,执行v2ray官方安装脚本
bash <(curl -L -s https://install.direct/go.sh)
  • 如果从github下载v2ray时卡顿严重,则建议手动安装v2ray

首先下载v2ray官方安装脚本

wget -N --no-check-certificate https://install.direct/go.sh && chmod +x go.sh

随后对应Linux系统架构到官方Github页面手动下载对应程序压缩包。例如x64架构,下载v2ray-linux-64.zip后执行以下命令进行本地安装

bash go.sh --local v2ray-linux-64.zip
  1. 记录安装完成时给出的v2ray端口号与UUID
PORT:42711  // 端口号
UUID:6b745421-de55-48c9-9396-1f15d8c6dab2 // UUID
  1. 修改v2ray的配置,即修改/etc/v2ray/config.json

首先将config.json清空

echo "" > /etc/v2ray/config.json

用nano打开config.json,写入服务器的v2ray配置

nano /etc/v2ray/config.json
{
  "inbounds": [
    {
      "port": 42711,  // 之前记录的端口号
      "listen":"127.0.0.1",
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "6b745421-de55-48c9-9396-1f15d8c6dab2",  // 之前记录的UUID
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
         "path": "/ws",
         "headers": {
             "host": "tls.glloyd.com"  // 建立的二级域名
         }
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}
  1. 运行脚本安装bbrplus内核
bash <(curl -s -L https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh)
  1. 安装完成重启服务器后再次运行脚本,启用bbrplus加速(这里同时重启了v2ray使得修改后的配置能够被加载)

配置Nginx

  1. 在Nginx里建立该二级域名tls.glloyd.com的php纯静态网站

  2. 获取二级域名tls.glloyd.com的Let's Encrypt的SSL证书并配置

  3. 在该网页配置文件的#SSL-END一行下面加入

    location /ws
    {
        proxy_pass http://127.0.0.1:42711;  // 之前记录的端口号
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
  1. 修改该网页文件夹内的index.html(可选,修改的是访问该二级域名时的页面)
<!doctype html>
<html>
<body>
    <p style="text-align:left">This page is intentionally left blank.</p>
</body>
</html>
  1. 服务端的v2ray配置完成,在客户端上根据相应参数已经可以连接使用

对于未安装Nginx的服务器

配置v2ray

  1. 使用ssh进入服务器,执行233boy的v2ray安装脚本
bash <(curl -s -L https://git.io/v2ray.sh)
  1. 直接选择WebSocket+TLS

  2. 使用脚本给出的随机端口,输入之前的二级域名tls.glloyd.com进行安装

  3. 选择自动配置tls,脚本将会调用Caddy进行部署(如果之前Cloudflare内对该二级域名的代理状态不是”仅限DNS“的话,这步会出错)

  4. 手动修改/etc/v2ray/config.json的alterid和streamSettings

nano /etc/v2ray/config.json
"alterid": 64
"streamSettings": {
  "network": "ws",
  "wsSettings": {
  "path": "/ws",
  "headers": {
    "host": "tls.glloyd.com"
    }
  }
}
  1. 手动修改/etc/v2ray/233blog_v2ray_backup.conf
nano /etc/v2ray/233blog_v2ray_backup.conf
alterid=64
  1. 运行脚本安装bbrplus内核
bash <(curl -s -L https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh)
  1. 安装完成重启服务器后再次运行脚本,启用bbrplus加速(这里同时重启了v2ray使得修改后的配置能够被加载)

  2. 服务端的v2ray配置完成,在客户端上根据相应参数已经可以连接使用

决定是否使用Cloudflare CDN

由于之前在Cloudflare中对该二级域名的代理状态为”仅限DNS“,

  1. 对于某些较远或被墙的服务器,此时连接v2ray可能会出现连不上或者速度慢的问题。如果将Cloudflare中的的代理状态切换为”已代理“,则Cloudflare起到CDN的作用,而v2ray的连接和速度通常都会有比较好的改善。

  2. 对于某些不开Cloudflare CDN也能顺利连接的服务器,可以在比较开与关不同状态下v2ray的连接、速度和丢包情况的好坏之后,自行选择是否使用Cloudflare CDN。

注意Cloudflare中切换成CDN后,需要过一段时间(大约15分钟)才能完全生效。

客户端v2ray的各项参数和配置config.json示例

  • 客户端v2ray的各项参数示例
 地址 (Address) = tls.glloyd.com // 之前使用的二级域名
 
 端口 (Port) = 443
 
 用户ID (User ID / UUID) = 6b745421-de55-48c9-9396-1f15d8c6dab2 // 之前安装v2ray时的32位UUID
 
 额外ID (Alter Id) = 64
 
 加密方式 (Security) = none
 
 传输协议 (Network) = ws
 
 伪装类型 (Host) = tls.glloyd.com // 之前使用的二级域名
 
 路径 (path) = /ws
 
 底层传输安全 (Security) = tls
 
 允许不安全连接 (AllowInsecure) = true
  • 客户端v2ray的config.json配置示例
{
  "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": "tls.glloyd.com",
              "port": 443,
              "users": [
                {
                  "id": "6b745421-de55-48c9-9396-1f15d8c6dab2",
                  "alterId": 64
                }
              ]
            }
          ]
        },
        "streamSettings": {
          "network": "ws",
          "security": "tls",
          "wsSettings": {
            "path": "/ws",
            "headers": {
              "host": "tls.glloyd.com"
            }
          }
        }
      }
  ]
}
⚠️ **GitHub.com Fallback** ⚠️