From 0942f3038610af3cb890bbee3a9f0e24d002b5e9 Mon Sep 17 00:00:00 2001 From: mm644706215 Date: Tue, 30 Sep 2025 20:50:00 +0800 Subject: [PATCH] update --- README.md | 94 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index d13d7f2..08c7022 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# Proxy Stack — VLESS(WS+TLS) with your custom Caddy (Cloudflare/Alidns + caddy-l4) +# Proxy Stack — VLESS (WS+TLS / gRPC+TLS) with Caddy (Cloudflare/Alidns + caddy-l4) -这包兼容两种部署模式: +该项目提供两种部署模式,并同时支持两种传输(WebSocket 与 gRPC): -- **A. 标准模式(无 L4)**:`server/docker-compose.yml` 直接让 Caddy 占用 80/443;v2ray 走 `/ray` 路由,适合多数“网站 + 代理共存”的情况。 -- **B. L4 前置模式**:`server/docker-compose-l4.yml` 用 caddy-l4 独占 80/443,根据 SNI 把 `DERPER`/其他 TLS 流量直接四层转发,`caddy-http` 仅监听 8443;适合你需要在 443 上同时承载多种非 HTTP TLS upstream(如 Tailscale derper)时。 +- **A. 标准模式(无 L4)**:`server/docker-compose.yml` 直接让 Caddy 占用 80/443;VLESS-WS 走 `/ray`,VLESS-gRPC 走 `/grpc`。适合“网站 + 代理共存”。 +- **B. L4 前置模式**:`server/docker-compose-l4.yml` 用 caddy-l4 独占 80/443,根据 SNI 把 `DERPER`/其他 TLS 流量四层转发,`caddy-http` 监听 8443;适用于在 443 上承载多种非 HTTP TLS upstream(如 Tailscale derper)。 > 两种模式均保持 **复用 443 端口**;未来增加站点/服务仅需改 Caddyfile 或 l4.json。 @@ -11,22 +11,25 @@ ## 目录 ``` -proxy-stack-vless-wss-caddy-v2/ +v2ray_proxy/ ├─ README.md ├─ server/ -│ ├─ Dockerfile.caddy-l4 # 你的 caddy 构建(含 cloudflare/alidns/caddy-l4) -│ ├─ docker-compose.yml # 模式 A(无 L4,Caddy 直接 80/443) -│ ├─ docker-compose-l4.yml # 模式 B(有 L4,Caddy-HTTP 监听 8443) +│ ├─ Dockerfile.caddy-l4 # 自定义 Caddy(含 cloudflare/alidns/caddy-l4) +│ ├─ docker-compose.yml # 模式 A(Caddy 直接 80/443) +│ ├─ docker-compose-l4.yml # 模式 B(caddy-l4 占 80/443,caddy-http 8443) │ ├─ caddy/ -│ │ ├─ Caddyfile # 站点与 /ray 反代(模式A/B都用) -│ │ ├─ l4.json # 仅模式B使用:L4 路由(SNI → upstream) +│ │ ├─ Caddyfile # 站点 + 反代:/ray → WS,/grpc → gRPC(h2c) +│ │ ├─ l4.json # 仅模式 B:L4 路由(SNI → upstream) │ │ ├─ env/ -│ │ │ └─ caddy.env.example # DNS 证书与 ACME 环境变量示例 -│ │ └─ site/index.html # 占位站点 -│ └─ v2ray/config.json # VLESS WS 入站(/ray) +│ │ │ ├─ caddy.env.example # ACME 与 DNS Provider 示例 +│ │ │ └─ caddy.env # 你的实际变量(ACME_EMAIL、CF_API_TOKEN 等) +│ │ └─ site/index.html # 占位站点 +│ └─ v2ray/config.json # 入站:10000(WS /ray)、10001(gRPC serviceName=grpc) └─ client/ ├─ docker-compose.yml - └─ v2ray-client.json + ├─ v2ray-client.json # 默认:VLESS-WS /ray + ├─ v2ray-client-grpc.json # 备选:VLESS-gRPC /grpc + └─ test-speed.ps1 # 代理测速脚本(HTTP/SOCKS5) ``` --- @@ -41,7 +44,7 @@ proxy-stack-vless-wss-caddy-v2/ - `DOMAIN`:你的域名(与上面解析一致) - `DERPER_HOST`(可选,L4 模式匹配用) -> 你可同时放 Cloudflare 与阿里云变量,Caddyfile 里按需选择 DNS Provider。 +> 可同时放 Cloudflare 与阿里云变量,`Caddyfile` 内按需选择 DNS Provider。Cloudflare Token 至少授予 Zone:Read 与 Zone:DNS:Edit。 --- @@ -52,7 +55,9 @@ cd server docker compose up -d --build ``` -- 将自动构建你自定义的 caddy 镜像,并用 `caddy/Caddyfile` 配置站点与 `/ray` 反代。 +- 构建自定义 Caddy,并按 `caddy/Caddyfile` 配置站点与反代: + - VLESS-WS:`/ray` → `v2ray:10000` + - VLESS-gRPC:`/grpc` → `v2ray:10001`(h2c) - 健康检查:访问 `https:///_health` 返回 200。 --- @@ -64,30 +69,71 @@ cd server docker compose -f docker-compose-l4.yml up -d --build ``` -- `caddy-l4` 独占 80/443,并按 `caddy/l4.json` 的 **SNI** 规则把 `DERPER_HOST` 直接四层转发,其他 TLS 走 `caddy-http:8443`。 -- `caddy-http` 同样装的是你自定义的 caddy(可自动签发证书),承担网站与 `/ray`。 +- `caddy-l4` 独占 80/443,按 `caddy/l4.json` 的 **SNI** 规则把 `DERPER_HOST` 直达,其他 TLS 走 `caddy-http:8443`。 +- `caddy-http` 自动签证书,承担网站与 `/ray`、`/grpc`。 --- -## 4) 客户端 +## 4) 客户端(选择 WS 或 gRPC 配置) +默认配置为 VLESS-WS: ```bash cd client -# 修改 v2ray-client.json 的 后: docker compose up -d -# 得到本机代理:SOCKS5 127.0.0.1:1080;HTTP 127.0.0.1:8080 +# 本机代理:SOCKS5 127.0.0.1:1080;HTTP 127.0.0.1:8080 ``` -**Docker 构建走代理:** +切换为 VLESS-gRPC 测试(将 gRPC 配置覆盖运行文件,或自行调整 compose): +```bash +cd client +copy /Y v2ray-client-grpc.json v2ray-client.json # Windows PowerShell 示例 +docker compose restart +``` + +两端需保持一致: +- 服务器:`/ray` 对应 WS,`/grpc` 对应 gRPC(serviceName=grpc) +- 客户端:`v2ray-client.json` 使用 WS;`v2ray-client-grpc.json` 使用 gRPC + +**Docker 构建走代理(可选):** ```bash DOCKER_BUILDKIT=1 docker build --build-arg HTTP_PROXY=http://127.0.0.1:8080 --build-arg HTTPS_PROXY=http://127.0.0.1:8080 -t img:latest . ``` --- -## 5) 常见问题 +## 5) 测速与验证 + +- PowerShell 脚本: +```powershell +cd client +./test-speed.ps1 -Mode http -SizeMB 100 # 走 HTTP 代理测速 +./test-speed.ps1 -Mode socks -SizeMB 100 # 走 SOCKS5 代理测速 +``` + +- 容器内 speedtest-cli(通过代理): +```bash +docker exec -it v2ray-client sh -c 'apk add --no-cache speedtest-cli >/dev/null 2>&1 || true; \ + export HTTPS_PROXY=http://127.0.0.1:8080; speedtest-cli --secure' +``` + +## 6) 常见问题 - 证书失败:检查 80/443 是否放行;DNS 是否生效;`caddy.env` 中 DNS Token 是否正确。 +- ACME 限速:避免频繁重启触发过多签发;调试请用 Staging,正式证书就绪后保持稳定。 - 端口复用:在 `Caddyfile` 新增 `handle`/`route` 或在 `l4.json` 新增 SNI 分流;无需额外占端口。 -- 性能:选好 LA 节点/带宽;必要时在 v2ray 启用 `mux`。 +- `/ray` 404:确保 `Caddyfile` 中 `/ray` 使用独立 `handle @vless_ws`,在静态站点 `handle` 之前匹配。 +- Windows 本机连不上 1080/8080:重启 Docker/WSL;显式绑定 `127.0.0.1:端口:容器端口` 或改用高位端口。 +- 性能:不同时间/节点有差异;gRPC 常较 WS 更稳(HTTP/2 多路复用、指纹更像常规流量),不保证一定更快。 > 法律合规自行确认;仅用于合法用途。 + +--- + +## 7) 运维与建议 +- 去掉 compose `version` 字段以消除告警;为镜像固定版本标签(避免 `latest`)。 +- 增加 `healthcheck`、资源限制;开启访问日志后可按路径过滤或降级日志级别。 +- 将 UUID/域名/路径抽为环境变量,便于轮换;必要时前置 CDN 或使用 Reality/XTLS-Vision(更强抗探测,改动更大)。 + +## 8) 同步到服务器(示例) +```bash +rsync -avz --delete --progress -e "ssh -p 22" "C:/Users/pylyz/Documents/v2ray_proxy/" youruser@:~/v2ray_proxy/ +```