foril@blog ~
  __            _ _ 
 / _| ___  _ __(_) |
| |_ / _ \| '__| | |
|  _| (_) | |  | | |
|_|  \___/|_|  |_|_|
// developer & blogger
💻theme: auto
[░░░░░░░░░░░░░░░░░░░░] 0%

2026-03-20-CC-VPS-网络架构笔记

📅 2026-03-20|⏱ ~8 min read|#开发小记

CC VPS 网络架构笔记

📅 配置日期:2026-03-20 最后更新:2026-03-20


##一、我想做什么?

目标:把运行在家里 Mac mini 上 3456 端口的应用(OpenClaw),通过公网域名 https://claw.foril.site 对外访问。

难点:mini 是家庭网络里的设备,没有公网 IP,无法直接从外部访问。

解决方案:利用 CloudCone VPS(有公网 IP)作为跳板,通过 Tailscale 组建虚拟局域网,再用 Caddy 反向代理把流量转发到 mini。


##二、涉及的设备

设备位置公网 IPTailscale IP用途
cc (CloudCone VPS)美国洛杉矶142.171.219.228100.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) │ → 处理并返回响应 原路返回给用户浏览器

关键路径说明

  • DNSclaw.foril.site142.171.219.228(Cloudflare,DNS only 模式,灰色云朵)
  • HTTPS:由 Caddy 自动管理 Let's Encrypt 证书(自动申请、自动续期)
  • VPN 隧道:cc 和 mini 之间通过 Tailscale(基于 WireGuard)建立加密点对点隧道

##四、cc VPS 上的端口分配

协议端口服务用途
TCP22SSH远程管理
TCP443CaddyHTTPS 反向代理,服务 claw.foril.site
TCP8443sing-box (VLESS Reality)代理节点
UDP443sing-box (TUIC)代理节点 (QUIC 协议)
TCP?S-UI 面板sing-box 管理面板

⚠️ Caddy 和 TUIC 可以共用 443 端口号,因为一个是 TCP 一个是 UDP,互不冲突。 Caddy 已禁用 HTTP/3 (QUIC),避免和 TUIC 的 UDP 443 冲突。


##五、今天做了哪些改动

1. 修改了 cc 的用户密码

  • forilroot 的密码都改为了新密码

2. 在 cc 上安装了 Tailscale

bash
# 安装命令 curl -fsSL https://tailscale.com/install.sh | sudo sh # 启动并认证 sudo tailscale up
  • 版本:v1.96.2
  • cc 的 Tailscale IP:100.100.124.43
  • cc 在 Tailnet 中的名称:ccforil

3. 在 cc 上安装了 Caddy

bash
# 通过官方 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

4. 修改了 sing-box (s-ui) 的 VLESS Reality 监听端口

  • 改动前:VLESS Reality 监听 TCP 443
  • 改动后:VLESS Reality 监听 TCP 8443
  • 在哪改的:S-UI 面板 → 入站 (Inbound) → VLESS Reality → 监听端口
  • TUIC 未改动:仍然监听 UDP 443(和 Caddy 的 TCP 443 不冲突)

⚠️ 注意区分 sing-box 中的两个"端口"概念:

  • 监听端口 (listen_port):sing-box 实际占用的端口,客户端连接到这里
  • 握手服务器端口 (Reality server_port):Reality 协议去真实网站借 TLS 证书时连接的端口,这个不要乱改

5. 安装了 Nginx(但未使用)

  • Nginx 已安装但 已停用 (systemctl disable nginx)
  • 原本计划用 Nginx 做 SNI 分流共享 443 端口,后来决定直接让 sing-box 让出 443 给 Caddy
  • Nginx 保留在系统中,以后有需要可以用

6. DNS 配置 (Cloudflare)

  • claw.foril.site → A 记录 → 142.171.219.228
  • 代理状态:DNS only(灰色云朵),不走 Cloudflare 代理,直连 cc

##六、以后加新路由怎么办

只需要两步:

步骤 1:添加 DNS 记录

在 Cloudflare 给 foril.site 加一条 A 记录,指向 142.171.219.228(DNS only)。

步骤 2:编辑 Caddyfile

bash
ssh cc sudo nano /etc/caddy/Caddyfile

在文件中加入新的站点块:

code
新应用.foril.site { reverse_proxy 目标Tailscale_IP:端口 }

然后重载 Caddy(零停机):

bash
sudo 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 │ └──────────────────────────────────────────┘
$ tree --headings