Skip to content

Commit 8c72b5a

Browse files
committed
test(network): 移除 rathole 文档配置内容断言
1 parent 4a77e6f commit 8c72b5a

4 files changed

Lines changed: 66 additions & 135 deletions

File tree

.trellis/spec/infra/rathole.md

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,17 @@
7373

7474
### 6. Tests Required
7575

76-
- Template tests:
77-
- 断言三份 TOML 示例存在:server、client、whitelist proxy。
78-
- 断言 `.gitignore` 忽略 `*.local.toml` 和真实日志。
79-
- 断言 PM2 configs 拆分、使用 `interpreter: 'none'`、引用对应 `.local.toml`
80-
- 断言 README 提到裸二进制 + PM2、`.local.toml`、白名单转发和四层边界。
76+
- Config/docs changes:
77+
- README、`.example.toml``.gitignore` 和 PM2 ecosystem 配置属于模板/文档类产物,不要求 Pester 断言页面结构或配置文件内容。
78+
- 修改这类文件时不要求新增或保留专门测试;人工核对示例可复制、无真实密钥即可。
8179
- Script tests:
8280
- `Show-Usage` 覆盖动作列表和 `-Role`
8381
- `Get-RatholeRoleConfig` 区分 client/server 路径。
8482
- `Get-Pm2InvocationPlan` 生成 start/restart/save 等 PM2 参数。
8583
- `Invoke-Pm2Command -DryRun` 返回可复制预览命令。
8684
- `Show-RatholeConfig` 返回复制命令与启动提示。
87-
- Smoke checks:
88-
- `node -c config/network/rathole/rathole-client.pm2.config.cjs`
89-
- `node -c config/network/rathole/rathole-server.pm2.config.cjs`
90-
- rathole 相关 Pester 测试必须在 host 和 Linux Pester 中通过。
85+
- Verification:
86+
- rathole `start.ps1` 逻辑测试必须在 host 和 Linux Pester 中通过。
9187

9288
### 7. Wrong vs Correct
9389

.trellis/tasks/05-13-rathole-config-examples-maintenance/prd.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
* [x] 仓库包含可复制的 `whitelist-proxy.example.toml`,用于公网 IP 白名单转发场景。
5454
* [x] Git 忽略规则覆盖真实 `.local` 配置文件。
5555

56+
## Test Scope Note
57+
58+
配置示例、PM2 ecosystem 和 README 属于配置/文档类产物,不编写专门 Pester 内容断言,也不要求为文档和配置文件保留单独测试;测试聚焦 `start.ps1` 的命令生成与维护逻辑。
59+
5660
## Definition of Done (team quality bar)
5761

5862
* Tests added/updated (unit/integration where appropriate)
@@ -106,7 +110,7 @@
106110

107111
**Decision**: MVP 采用裸二进制 + PM2 主线。文档说明 Compose 只是备选方式,维护脚本优先封装 PM2 动作。
108112

109-
**Consequences**: 第一版需要用户自行安装 rathole 与 PM2,但避免容器层开销;脚本和测试聚焦 PM2 命令生成、`.local.toml` 保护和 README 可操作性。后续如要更贴近 Linux 生产部署,可扩展 systemd 示例或安装器。
113+
**Consequences**: 第一版需要用户自行安装 rathole 与 PM2,但避免容器层开销;脚本测试聚焦 PM2 命令生成与维护逻辑,`.local.toml` 保护和 README 可操作性通过文档约定维护。后续如要更贴近 Linux 生产部署,可扩展 systemd 示例或安装器。
110114

111115
**Decision**: 公网白名单转发示例单独放入 `whitelist-proxy.example.toml`
112116

config/network/rathole/README.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,62 @@ Copy-Item `
106106
调用方 -> rathole server 暴露端口 -> rathole 隧道 -> 白名单公网服务器上的 rathole client -> 白名单目标服务
107107
```
108108

109-
目标服务看到的来源 IP 是白名单公网服务器。注意这个模式是 TCP/UDP 四层端口转发,不处理 HTTP Host、路径、Header 或 TLS 终止;如果需要七层路由,继续使用 Nginx、Caddy 或 Traefik。
109+
目标服务看到的来源 IP 是白名单公网服务器。
110+
111+
### HTTP/HTTPS 转发边界
112+
113+
你的白名单场景本质上是“让请求从某台已加入白名单的公网服务器发出去”。如果这台白名单服务器本身就是你对外暴露入口的机器,并且它能直接访问目标 HTTP/HTTPS 服务,优先用 Nginx/Caddy 这类 HTTP 反向代理会更直观:
114+
115+
```nginx
116+
server {
117+
listen 8443 ssl;
118+
server_name proxy.example.com;
119+
120+
location / {
121+
proxy_pass https://api.allowlist-only.example.com;
122+
proxy_set_header Host api.allowlist-only.example.com;
123+
proxy_set_header X-Real-IP $remote_addr;
124+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
125+
proxy_set_header X-Forwarded-Proto $scheme;
126+
}
127+
}
128+
```
129+
130+
这种情况下,目标服务看到的来源 IP 就是这台 Nginx 所在白名单服务器的公网 IP,而且你还能顺手处理域名、路径、Header、证书等 HTTP 细节。
131+
132+
rathole 适合下面这种更像“隧道”的情况:
133+
134+
- 入口端口不在白名单服务器上,需要把入口流量穿到白名单服务器再出去。
135+
- 目标不是 HTTP,或者你只想原样透传 TCP/UDP。
136+
- 白名单服务器不想跑完整 HTTP 反代配置,只需要固定端口转固定目标。
137+
138+
只要目标是一个固定 HTTP/HTTPS 服务,并且你只需要把一个入口端口转到一个目标地址,rathole 直接透传 TCP 也够用。例如:
139+
140+
```toml
141+
[client.services.whitelist_api]
142+
token = "replace-with-a-long-random-token"
143+
local_addr = "api.allowlist-only.example.com:443"
144+
```
145+
146+
对应 server 端暴露一个入口端口:
147+
148+
```toml
149+
[server.services.whitelist_api]
150+
token = "replace-with-a-long-random-token"
151+
bind_addr = "0.0.0.0:8443"
152+
```
153+
154+
访问 `公网入口:8443` 时,流量会原样进入白名单公网服务器,再由这台服务器访问 `api.allowlist-only.example.com:443`。如果这是 HTTPS,TLS 握手和证书校验发生在调用方与最终 HTTPS 服务之间,rathole 不解密也不改包。
155+
156+
这句话“rathole 不处理 HTTP Host、路径、Header 或 TLS 终止”的实际含义是:
157+
158+
- 能做:`公网入口:8443 -> api.allowlist-only.example.com:443`
159+
- 能做:`公网入口:8080 -> 127.0.0.1:3000`
160+
- 不能单独做:同一个入口端口按 `a.example.com` / `b.example.com` 分流到不同服务
161+
- 不能单独做:同一个入口端口按 `/api` / `/static` 分流
162+
- 不能单独做:替你添加 `X-Forwarded-For`、重写 `Host` 或统一签发/终止 HTTPS 证书
163+
164+
如果你只是借白名单服务器的公网 IP 访问某个固定 HTTP/HTTPS 服务,rathole 足够。如果你要“一个 443 端口承载多个域名、多个路径、统一证书”,就把 Nginx、Caddy 或 Traefik 放在 rathole 的一端或两端,让它们负责七层 HTTP 逻辑。
110165

111166
## PM2 管理
112167

tests/TailscaleRatholeTemplate.Tests.ps1

Lines changed: 0 additions & 124 deletions
This file was deleted.

0 commit comments

Comments
 (0)