/PaaS

在 PaaS 平台上部署 Vmess WebSocket 和 Trojan Websocket 协议,支持WS-0RTT降低延迟,并可开启 Cloudflared 隧道。

Primary LanguageShellMIT LicenseMIT

鸣谢

概述

  1. 本项目用于在 PaaS 平台上部署 Vmess WebSocket 和 Trojan Websocket 协议,支持 CI/CD 和拉取容器镜像两种部署方式。

    已更换为 sing-box 核心,如需部署原 Xray 核心版本,请前往 archieve 分支

  2. 可以启用 Cloudflared 隧道,以内网穿透模式接入 Cloudflare,可以使用 Cloudflare 支持的全部十多个端口。

  3. 支持 WARP 出站。可以通过 CLASH_MODE 变量控制 chatgpt、bing、netflix、disney、dazn、spotify 和 imgur 是否分流到 WARP 出站。

    修改 content/config-wg.json 文件 169 行,可自定义分流规则。

    WARP 解锁效果示例

    美国 Heroku

    image

    爱尔兰 Heroku

    image

  4. 支持直接访问 .onion tor 网络域名(需要客户端使用 socks/http 代理方式或者 Fakeip/Fakedns 透明代理环境)。

  5. 支持 WS-0RTT 降低延迟,Xray 核心客户端在 Websocket 路径后加上 ?ed=2048 即可启用。

  6. 支持 Clash api,可以连接 yacd 面板,选择 Direct / WARP / Tor 出站,启用/关闭分流功能,查看当前速度、连接、日志等信息。

    截图

    image

    image

注意

请勿滥用,PaaS 平台账号封禁风险自负

部署方式

客户端相关设置

接入CloudFlare

部署方式

请勿使用本仓库直接部署

Heroku 部署方法

Heroku 已于2022年11月末关闭免费服务

  1. 点击本仓库右上角Fork,再点击Create Fork。
  2. 在Fork出来的仓库页面上点击Setting,勾选Template repository。
  3. 然后点击Code返回之前的页面,点Setting下面新出现的按钮Use this template,起个随机名字创建新库。
  4. 项目名称注意不要包含 v2rayheroku 两个关键字(用户名以 example 为例,修改后的项目名以 demo 为例)
  5. 登陆heroku后,浏览器访问 dashboard.heroku.com/new?template=https://github.com/example/demo
支持 CI/CD 平台(Render,Northflank,Doprax等)部署方法
  1. 点击本仓库右上角Fork,再点击Create Fork。
  2. 在Fork出来的仓库页面上点击Setting,勾选Template repository。
  3. 然后点击Code返回之前的页面,点Setting下面新出现的按钮Use this template,起个随机名字创建新库。
  4. 项目名称注意不要包含 v2rayxray 等关键字。
  5. 在 PaaS 平台管理面板中连接你新建立的 github 仓库。
  6. 按下文变量部分设置所需的变量,如果需要设置内部 HTTP 端口,默认为3000,也可以自行设置 PORT 变量修改。
  7. 然后部署即可。
支持拉取容器镜像 PaaS 平台(Koyeb,Northflank等)部署方法
  1. 点击本仓库右上角Fork,再点击Create Fork。
  2. 在Fork出来的仓库页面上点击Setting,勾选Template repository。
  3. 然后点击Code返回之前的页面,点Setting下面新出现的按钮Use this template,起个随机名字创建新库。
  4. 项目名称注意不要包含 v2rayheroku 等关键字。
  5. 点击仓库Settings > Actions > General,滚动到页面最下方,将Workflow permissions设置为Read and write permissions。
  6. 点击页面右侧 Create a new release,建立格式为 v0.1.0 的tag,其它内容随意,然后点击 Publish release。
  7. 大概不到一分钟后,github action 构建容器镜像完成,点击页面右侧 Packages, 再点击进入刚生成的 Package。
  8. 点击页面右侧 Package settings,在页面最下方点击 Change visibility,选择 public 并输入 package 名称以确认。
  9. 容器镜像拉取地址在 package 页面 docker pull 命令示例中,其它部署步骤请参阅具体平台文档。需要设置的环境变量见下文,内部监听端口默认为3000,也可自行设置 PORT 环境变量更改。
Patr 部署方法
  1. 点击本项目网页上部 Code 按钮,再点击 Create codespace on main。

image

  1. 点击 Patr 管理面板左侧 Docker Repository,建立新 Repo。

image

  1. 点击进入 Patr 新建立的 Repo,页面最下方有三条命令:

image

  1. 在之前打开的 Codespace 网页中,点击终端,执行上图中的三条命令,中间需要输入 Patr 账户密码。

image

  1. 回到 Patr 网页,点击 Infrastructure > Deployment > Create Deployment,Name 随意,Image Details 选择刚才建立的 Repo,Region 选择 Singapore。

image

  1. 点击 NEXT STEP,Ports 设置为 3000,按下文变量部分设置好需设定的变量。将 Startup Probe 和 Liveness Probe 端口设置为 3000,路径为 /

image

  1. 点击 NEXT STEP,将 Horizontal Scale 拉到最左侧,直到价格显示 Free,然后点击 CREATE。

image

  1. 点击 Infrastructure > Deployment,点击 START 即启动容器,点击 PUBLIC URL 获得服务域名。

image

变量

对部署时需设定的变量做如下说明。

变量 默认值 说明
VmessUUID ad2c9acd-3afb-4fae-aff2-954c532020bd Vmess 用户 UUID,用于身份验证,务必修改,建议使用UUID生成工具
SecretPATH /mypath Websocket代理路径前缀,务必修改为不常见字符串
PASSWORD password Trojan 协议密码,务必修改为强密码。同时也是 Clash api 连接密钥
ArgoJSON 可选,Cloudflared 隧道 JSON 文件,保持默认空值为禁用 Cloudflared 隧道
OVERRIDE_DEST 可选,默认使用流量探测强制重新解析域名,保证 WARP 解锁效果并可以解决客户端 DNS 污染问题。但会造成 Tor 浏览器无法连接成功。设置为 disable 将禁用此功能
BLOCK_QUIC_443 true 可选,默认禁止 443 端口 quic 流量,强制网页流量使用 TCP 协议
WG_MTU 1408 可选,WireGuard MTU 值,如果 WARP 出站工作不正常,可尝试调整
CLASH_MODE rule 可选,默认 "rule" 模式会开启自动分流功能,设置为 direct 将禁用分流功能
NodeStatus_DSN 可选,NodeStatus 探针服务端连接信息,保持默认空值为禁用。示例:wss://username:password@status.mydomain.com

客户端相关设置

  1. 支持的协议:Vmess WS 80端口(仅限 Heroku)、Vmess WS TLS 443端口、Trojan WS TLS 443端口、Vmess WS 80/8080等端口 + Cloudflared 隧道、Vmess WS TLS 443/8443等端口 + Cloudflared 隧道、Trojan WS TLS 443/8443等端口 + Cloudflared 隧道。

    Cloudflared 隧道模式可以使用 Cloudflare 支持的全部端口:https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/

  2. Vmess 协议 AlterID 为 0。

  3. Websocket路径分别为:

    # Vmess
    ${SecretPATH}/vm
    # Vmess + 全局 WARP 出站
    ${SecretPATH}/wgvm
    # Trojan
    ${SecretPATH}/tr
    # Trojan + 全局 WARP 出站
    ${SecretPATH}/wgtr
    

    为了减少特征,浏览器直接访问Websocket路径,会返回401而不是bad request。

  4. 使用IP地址连接时,无tls加密配置,需要在 host 项指定域名,tls加密配置,需要在sni(serverName)项中指定域名。

  5. Xray 核心的客户端直接在路径后面加 ?ed=2048 即可启用 WS-0RTT,v2fly 核心需要在配置文件中添加如下配置:

    "wsSettings": {
        "path": "${WSPATH}",
        "maxEarlyData": 2048,
        "earlyDataHeadName": "Sec-WebSocket-Protocol"
    }
    
  6. yacd 面板 连接 URL 为 https://<域名><SecretPATH 变量>/api,Secret 密钥为 PASSWORD 变量值。

    可以通过代理选项卡中的 Select 代理组,选择指定出站。(容器重启后需要重新选择)

Vmess WS 配置示例
Vmess WS TLS 配置示例
Trojan WS TLS 配置示例

接入 CloudFlare

以下三种方式均可以将应用接入 CloudFlare,在某些网络环境下配合cloudflare优选ip可以提速。

  1. 为应用绑定 Cloudflare 上托管的域名。
  2. 通过 CloudFlare Workers 反向代理,workers.dev域名被sni阻断,无法使用tls协议链接,可以使用80端口无tls协议连接。也可以使用 Workers Routes 功能,绑定自己的域名。
  3. 通过 Cloudflared 隧道接入 CloudFlare

Cloudflare Workers反代

Cloudflared 隧道配置方式

  1. 前提在 Cloudflare 上有一个托管的域名,以example.com为例。以下为 Windows 系统命令举例。
  2. 下载 Cloudflared
    wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe
    
  3. 运行 cloudflared login,此步让你绑定域名。
    .\cloudflared-windows-amd64.exe login
    
  4. 运行 cloudflared tunnel create 隧道名,此步会生成隧道 JSON 配置文件。
    .\cloudflared-windows-amd64.exe tunnel create mytunnel
    
  5. 运行 cloudflared tunnel route dns 隧道名 argo.example.com, 生成cname记录,可以随意指定三级域名。
    .\cloudflared-windows-amd64.exe tunnel route dns mytunnel mytunnel.example.com
    
  6. 重复运行上面两步,可配置多个隧道。
  7. 部署时将 JSON 隧道配置文件内容填入 ArgoJSON 变量。
  8. 如果 PaaS 平台有容器空闲休眠的限制,无法通过 Cloudflared 隧道唤醒容器,保持长期运行建议使用 uptimerobot 之类网站监测服务定时 http ping PaaS 平台所提供的域名地址。