5.7 KiB
5.7 KiB
title, type, tags, date, last_updated
| title | type | tags | date | last_updated | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透 | source |
|
2026-05-28 | 2026-04-27 |
Source File
Summary(用中文描述)
- 核心主题:通过 VPS(公网服务器)+ frp(反向隧道)+ Caddy(自动 HTTPS 反向代理)实现家庭内网服务的公网域名访问
- 问题域:家庭/办公内网中的 NAS、Ubuntu 服务器运行的服务(如 n8n、Grafana、Transmission、SSH 等)如何通过自定义域名从公网安全访问
- 方法/机制:Cloudflare DNS A 记录指向 VPS 公网 IP → VPS 运行 frps(frp 服务端)和 Caddy → 内网主机运行 frpc(frp 客户端)将本地端口映射到 VPS → Caddy 反向代理到 frp 映射端口,自动申请 Let's Encrypt 证书提供 HTTPS
- 结论/价值:完整梳理了从 DNS 配置、frps/frpc 安装配置、Caddy 反向代理到 SSH 穿透的全套流程,并提供了 7 步系统化故障排查指南
Key Claims(用中文描述)
- frp 内网穿透工具包含 frps(服务端)和 frpc(客户端),通过 TCP 反向隧道将内网端口暴露到公网 VPS,支持 NAT 穿透和自动重连
- Caddy 自动管理 HTTPS 证书(Let's Encrypt),无需手动配置 SSL,通过 reverse_proxy 指令将请求转发到 frp 映射的本地端口
- Cloudflare DNS 仅负责将子域名 A 记录指向 VPS 公网 IP,不影响 TCP 流量的直接路由
- SSH 穿透不同于 HTTP/HTTPS,不经过 Caddy,仅通过 frps + frpc 的 TCP 映射实现(
type = tcp,remote_port = 60022) - 内网 NAS 上的 V2RayA 透明代理可能干扰 frp 连接,需要停止代理后重启 frpc
- frp 连接失败的主要原因包括:端口被占用/token 不一致/防火墙拦截/Caddy 误 proxy TCP 端口
- 通过
ssh -p 60022 user@ubuntu1.ishenwei.online可从公网 SSH 到内网 Ubuntu(需 DNS A 记录 + frpc 配置)
Key Quotes
"思路:Cloudflare DNS 指向公网上的一台VPS,VPS 上运行 Caddy;内网主机通过 frp 将服务暴露到 VPS(本地 127.0.0.1 或某个端口),VPS 反向代理到该端口。" — 整体方案架构描述
"Caddy 会自动申请并更新 Let's Encrypt 证书,提供 HTTPS 访问。" — Caddy 自动 HTTPS 特性
"⚠️ 重点提醒(安全性):SSH 穿透与 HTTP 不同,它是纯 TCP 流量,不经 Caddy(Caddy 只处理 HTTP/HTTPS),所以:Caddy 不参与 SSH 的代理,只用 frps + frpc 配置即可完成。" — SSH 与 HTTP 代理架构差异
"authentication failed token mismatch invalid login → 那肯定是 token 和 frpc 不一致。" — frp 连接失败的核心原因之一
"很多人遇到的问题是:他们编辑了
/opt/frp/frps.ini,但 systemd service 其实加载另一个路径,例如/etc/frp/frps.ini。" — frps 配置加载路径的常见陷阱
Key Concepts
- 内网穿透:通过公网服务器中转,使 NAT/防火墙后的内网服务可被外部访问的技术,本方案使用 frp 反向隧道实现
- 反向代理:Caddy 作为反向代理,将公网 HTTPS 请求转发到本地 frp 映射端口,提供统一的 HTTPS 入口
- TCP隧道:frp 通过 TCP 协议在 frpc 客户端和 frps 服务端之间建立持久隧道,支持非 HTTP 协议(如 SSH、MySQL)
- 自动HTTPS:Caddy 内置 Let's Encrypt 证书自动申请和续期,无需手动管理 SSL 证书
- DNS A记录:Cloudflare DNS 配置,将子域名(如 nas.ishenwei.online)指向 VPS 公网 IP
Key Entities
- RackNerd VPS:VPS 提供商(192.227.222.142),托管 frps 服务端和 Caddy 反向代理,作为内网穿透的公网中转站
- Synology NAS DS718:内网 NAS 设备(192.168.3.17),运行 frpc 客户端,通过 frp 暴露 NAS 服务(5000端口 → VPS 15000)、Navidrome、Calibre、WebDAV、Miniflux、Zipline、MySQL、SSH 等多个服务
- frp:开源内网穿透工具,本方案的核心,包含 frps(服务端,监听 7000 端口)和 frpc(客户端),版本 0.65.0;通过 token 认证确保连接安全
- Caddy:Go 语言编写的自动 HTTPS 反向代理服务器,与 frp 配合为内网服务提供 HTTPS 域名访问;支持
caddy validate命令验证配置语法 - Cloudflare:域名 DNS 托管服务商,通过 A 记录将 ishenwei.online 子域名指向 VPS 公网 IP
Connections
- 家庭网络环境概览_2026-04-03 ← extends ← 在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透(本文是该概览中内网穿透架构的详细展开)
- ubuntu-安装-frp-0-65-0-x86_64-操作笔记 ← depends_on ← 在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透(FRP 安装是该方案的前置步骤)
- mac-mini-安装-frp-0-65-0-arm64-操作笔记 ← depends_on ← 在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透(Mac Mini FRP 客户端配置参考)
- Ubuntu Server ← hosts ← 在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透(Ubuntu Server 24.04 是本方案的目标操作系统)
Contradictions
- 与 家庭监控方案-prometheus-grafana-node-exporter-cadvisor-blackbox 可能的差异点:
- 冲突点:监控方案中是否包含完整的公网访问配置
- 当前观点:本文提供完整公网域名访问方案,包含 HTTPS 和 SSH 穿透的详细配置
- 对方观点:监控方案侧重于 Prometheus + Grafana + exporters 的部署和告警配置,未展开公网访问细节
- 建议:在监控方案中补充指向本文内网穿透配置的外链,实现监控方案 + 公网访问的完整闭环