__ _ _ / _| ___ _ __(_) | | |_ / _ \| '__| | | | _| (_) | | | | | |_| \___/|_| |_|_|
📅 配置日期:2026-03-20 最后更新:2026-03-20
目标:把运行在家里 Mac mini 上 3456 端口的应用(OpenClaw),通过公网域名 https://claw.foril.site 对外访问。
难点:mini 是家庭网络里的设备,没有公网 IP,无法直接从外部访问。
解决方案:利用 CloudCone VPS(有公网 IP)作为跳板,通过 Tailscale 组建虚拟局域网,再用 Caddy 反向代理把流量转发到 mini。
| 设备 | 位置 | 公网 IP | Tailscale IP | 用途 |
|---|---|---|---|---|
| cc (CloudCone VPS) | 美国洛杉矶 | 142.171.219.228 | 100.100.124.43 | 公网入口、反向代理、代理节点 |
| mini (Mac mini) | 家里局域网 | 无 | 100.102.57.29 | 运行 OpenClaw 应用 (端口 3456) |
| forilmacbookpro | 随身携带 | - | 100.114.165.13 | 日常使用的 MacBook |
当用户在浏览器访问 https://claw.foril.site 时,请求经过以下流程:
code用户浏览器 │ │ ① DNS 解析 claw.foril.site │ → Cloudflare DNS (灰色云朵/DNS only) │ → 返回 142.171.219.228 (cc 的公网 IP) │ ▼ cc VPS (142.171.219.228) │ │ ② TCP 连接到 443 端口 │ → Caddy 接收 (TCP 443) │ → 自动 TLS 终止 (Let's Encrypt 证书) │ → 匹配域名 claw.foril.site │ │ ③ Caddy 反向代理 │ → 转发请求到 100.102.57.29:3456 │ → 走 Tailscale WireGuard 加密隧道 │ ▼ mini (100.102.57.29) │ │ ④ 应用收到请求 │ → Express 服务器 (端口 3456) │ → 处理并返回响应 │ ▼ 原路返回给用户浏览器
claw.foril.site → 142.171.219.228(Cloudflare,DNS only 模式,灰色云朵)| 协议 | 端口 | 服务 | 用途 |
|---|---|---|---|
| TCP | 22 | SSH | 远程管理 |
| TCP | 443 | Caddy | HTTPS 反向代理,服务 claw.foril.site |
| TCP | 8443 | sing-box (VLESS Reality) | 代理节点 |
| UDP | 443 | sing-box (TUIC) | 代理节点 (QUIC 协议) |
| TCP | ? | S-UI 面板 | sing-box 管理面板 |
⚠️ Caddy 和 TUIC 可以共用 443 端口号,因为一个是 TCP 一个是 UDP,互不冲突。 Caddy 已禁用 HTTP/3 (QUIC),避免和 TUIC 的 UDP 443 冲突。
foril 和 root 的密码都改为了新密码bash# 安装命令 curl -fsSL https://tailscale.com/install.sh | sudo sh # 启动并认证 sudo tailscale up
100.100.124.43ccforilbash# 通过官方 APT 源安装 # 版本:v2.11.2
Caddy 配置文件 /etc/caddy/Caddyfile:
code{ servers { protocols h1 h2 } } claw.foril.site { reverse_proxy 100.102.57.29:3456 }
配置说明:
protocols h1 h2:只启用 HTTP/1.1 和 HTTP/2,禁用 HTTP/3(因为 HTTP/3 用 UDP 443,和 TUIC 冲突)claw.foril.site:Caddy 看到域名会自动申请 Let's Encrypt 证书reverse_proxy 100.102.57.29:3456:转发到 mini 的 Tailscale IP⚠️ 注意区分 sing-box 中的两个"端口"概念:
- 监听端口 (listen_port):sing-box 实际占用的端口,客户端连接到这里
- 握手服务器端口 (Reality server_port):Reality 协议去真实网站借 TLS 证书时连接的端口,这个不要乱改
systemctl disable nginx)claw.foril.site → A 记录 → 142.171.219.228只需要两步:
在 Cloudflare 给 foril.site 加一条 A 记录,指向 142.171.219.228(DNS only)。
bashssh cc sudo nano /etc/caddy/Caddyfile
在文件中加入新的站点块:
code新应用.foril.site { reverse_proxy 目标Tailscale_IP:端口 }
然后重载 Caddy(零停机):
bashsudo systemctl reload caddy
bash# 查看 Caddy 状态 sudo systemctl status caddy # 查看 Caddy 日志 sudo journalctl -u caddy -f # 重载 Caddy 配置(不停机) sudo systemctl reload caddy # 查看端口占用 sudo ss -tlnp | grep :443 # TCP 443 sudo ss -ulnp | grep :443 # UDP 443 # 查看 Tailscale 状态 sudo tailscale status # 查看 sing-box 状态 # 通过 S-UI 面板管理
code┌──────────────────────────────────────────┐ │ cc VPS (CloudCone, LA) │ │ 142.171.219.228 │ │ │ claw.foril.site ────►│ TCP 443 → Caddy (HTTPS, Let's Encrypt)│ (HTTPS) │ │ reverse_proxy │ │ ▼ │ │ 100.102.57.29:3456 ──────────────┼──── Tailscale ────► mini:3456 │ (Tailscale WireGuard) │ (家里 Mac mini) │ │ 代理客户端 ──────────►│ TCP 8443 → sing-box (VLESS Reality) │ │ UDP 443 → sing-box (TUIC) │ │ │ │ TCP 22 → SSH │ └──────────────────────────────────────────┘