Caddy + Tailscale:零信任内网服务暴露
内部服务需要被外部访问,但不想暴露给所有人。Caddy 的 forward_auth 指令配合一个轻量 OAuth 后端,可以实现"只有指定 GitHub 仓库成员才能访问"的访问控制。
架构
三层:Caddy(TLS 终端 + 静态文件)-> gate(Python OAuth 验证)-> 静态内容。Caddy 对每个请求先调 forward_auth gate:8787/verify,gate 校验 Cookie 中的 HMAC 签名会话,通过则返回 200 并附带 X-Forwarded-User 头,否则 302 到 GitHub OAuth 登录。
gate 实现
gate 是一个不到 200 行的纯标准库 Python HTTP 服务。它不做数据库——会话是 HMAC 签名 Cookie,7 天有效。成员判定用登录者自己的 OAuth token 请求 GET /repos/<repo>,200 即成员。不需要机器 PAT。
Tailscale 回源
Caddy 和 Spark 之间走 Tailscale 直连(WireGuard,延迟约 13ms)。Spark 上的服务只绑 tailscale0 或 127.0.0.1,公网唯一入口是 VPS 的 Caddy。这样即使 Caddy 配置错误,攻击面也只限于 VPS 本身。
备案落地
域名备案通过后,Caddy 自动申请 Let's Encrypt 证书,HTTP-01 挑战走 80 端口。公开站直接 file_server 无认证,内部站挂在子域名上继续走 OAuth 守门。
← 返回首页