首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >拒绝限速与断联!用国内轻量云自建 frp 实现全能内网穿透,打造个人专属私有云入口

拒绝限速与断联!用国内轻量云自建 frp 实现全能内网穿透,打造个人专属私有云入口

作者头像
用户12547393
发布2026-06-26 20:25:45
发布2026-06-26 20:25:45
140
举报
frp 内网穿透封面
frp 内网穿透封面

[!NOTE] 对于拥有群晖、威联通、飞牛私有云等家庭 NAS 的极客,或者需要远程调试程序的开发者来说,如何将本地服务安全、快速地发布到公网是一个永恒的痛点。虽然我们可以用各种虚拟局域网(如 Tailscale)进行组网,但如果想把本地的网页直接分享给朋友、微信小程序开发调试,或者通过标准的 HTTP 访问服务,还是需要自建公网入口。今天老周手把手教大家用 Docker-compose 自建 frp,并通过 Caddy 反向代理实现“单域名复用 80/443 端口”,打造一套高速、安全且全掌控的内网穿透系统!本教程仅用于个人多设备互联与合规的远程办公场景。


亲爱的读者,欢迎回到 老周的AI进化实验室

在前几期文章中,我们详细介绍了 Headscale 以及 RustDesk 自建服务的避坑教程,许多小伙伴都已经成功用上了私有虚拟网络。但是,这几天有几位做小程序开发和 NAS 影音分享的朋友给老周留言:

“老周啊,我的很多网页和调试接口是要分享给客户或者给微信服务器回调使用的,人家设备上根本不可能去装 Tailscale 客户端,这该怎么破?”

答案其实很简单,也很经典:自建 frp 内网穿透

作为国内开源界使用最广、技术最成熟的内网穿透神器,frp 可以将内网设备的端口安全、稳定地映射到具有公网 IP 的服务器上。今天,老周就带大家避开新手最容易踩的“一服务一端口”和“SSL 证书配置繁琐”的两个大坑,用 Docker-compose + Caddy 搭建一套完美复用 80/443 端口并能自动续签 HTTPS 证书的 frp 穿透矩阵!


⚖️ 为什么选择自建 frp?

市面上其实有不少商业穿透软件(如花生壳、某某壳、Natapp 等),但它们对免费用户的限制极其严苛:限速 128KB/s、限制连接数、甚至强制要求域名备案并收费。而自建 frp 拥有绝对的优势

  • 带宽完全跑满:传输速度仅取决于你购买的国内云主机(如阿里云北京、腾讯云广州)的带宽大小,看 4K 影音或大文件传输毫无压力。
  • 多端口复用(Web 穿透神技):许多新手搭建 frp,每增加一个本地服务就要在路由器和云服务器上多放行一个端口(如 8081, 8082...),十分不优雅且容易被端口扫描。本教程配合 Caddy,可以实现所有 Web 服务共用一个 443 端口,通过不同的子域名自动分发
  • 绝对的安全隐私:所有的通信隧道与流量只流经您自己的云服务器,绝无第三方数据截留或泄露风险。

🛠️ 第一步:前期准备工作

为了搭建本系统,我们需要准备:

  1. 一台国内云服务器 (VPS):推荐使用 Ubuntu 22.04 或 Debian 12,拥有公网 IP。建议选择大厂的轻量应用服务器,性价比较高。
  2. 一个域名:将您的域名(例如 yourdomain.com 及其泛域名 *.yourdomain.com)的 A 记录解析到您的云服务器公网 IP 上。
  3. 放行安全组端口: 登录云服务器控制台,在安全组规则中放行以下入站端口:
    • 80 / 443:用于外网用户的 Web 访问(Caddy 监听)。
    • 7000:用于 frp 服务端与客户端建立隧道连接的主控制端口。
    • 7500:用于查看 frp 服务器连接状态的 Web 面板端口。

🐋 第二步:云服务器端 (frps) Docker 部署

我们采用 Docker-compose 部署,这样不仅配置简单,后续迁移也极快。

1. 创建工作目录

在云服务器上创建文件夹:

代码语言:javascript
复制
mkdir-p/opt/frp-server&&cd/opt/frp-server 

2. 编写 frps 服务端配置文件

新建 frps.toml 配置文件:

代码语言:javascript
复制
nanofrps.toml 

粘贴以下配置。请将 your_secure_token_here 替换为您自定义的强密码,这是客户端与服务端连接的凭证:

代码语言:javascript
复制
# frps.tomlbindAddr="0.0.0.0"bindPort=7000# 开启 TCP 多路复用,提升传输稳定性tcpMux=true# 身份验证凭证,客户端必须匹配一致auth.method="token"auth.token="your_secure_token_here"# 虚拟主机监听端口(用于转发 HTTP/HTTPS 流量)vhostHTTPPort=8080vhostHTTPSPort=8443# frp 服务端仪表盘配置(用于监控连接状态)webServer.addr="0.0.0.0"webServer.port=7500webServer.user="admin"webServer.password="admin_dashboard_password"

3. 编写 Docker-compose.yml 文件

新建 docker-compose.yml 文件:

代码语言:javascript
复制
nanodocker-compose.yml 

填入以下内容:

代码语言:javascript
复制
version:'3'services:frps:image:fatedier/frps:v0.60.0container_name:frpsrestart:alwaysnetwork_mode:hostvolumes:-./frps.toml:/etc/frp/frps.toml

运行命令拉起服务:

代码语言:javascript
复制
dockercomposeup-d 

此时,访问 http://您的服务器IP:7500 并输入上面配置的仪表盘账号密码,就可以看到 frp 干净的监控后台了。


🔒 第三步:配置 Caddy 实现单端口复用与自动 SSL 证书

有了 frps 服务端后,如果我们要穿透内网的 NAS 界面(假设子域名为 nas.yourdomain.com)和本地开发环境(如 dev.yourdomain.com),我们需要在云服务器上配置反向代理,将 443 端口的 HTTPS 请求,根据域名自动转发给 frp 监听的本地端口,并自动向 Let's Encrypt 申请 SSL 证书。

这里老周推荐使用极简的 Caddy(无需复杂配置,比 Nginx 简单 10 倍,能全自动续签证书)。

在云服务器 /opt/frp-server 目录下,新建 Caddyfile

代码语言:javascript
复制
nanoCaddyfile 

填入以下反代理分发规则(请把域名替换为您自己的真实域名):

代码语言:javascript
复制
# 穿透 NAS 的子域名 nas.yourdomain.com {     reverse_proxy localhost:8080 }  # 穿透本地开发网页的子域名 dev.yourdomain.com {     reverse_proxy localhost:8080 } 

原理透析: 当用户访问 nas.yourdomain.com 时,请求首先到达 Caddy 的 443 端口。Caddy 自动为其启用 HTTPS 加密,然后将解密后的流量转给本机的 localhost:8080(即 frp 接收 HTTP 穿透流量的虚拟端口),frp 再通过已经建立的隧道把流量准确送达家里的 NAS。

在云服务器的 docker-compose.yml 中追加 Caddy 服务,合并后的配置如下:

代码语言:javascript
复制
version:'3'services:frps:image:fatedier/frps:v0.60.0container_name:frpsrestart:alwaysnetwork_mode:hostvolumes:-./frps.toml:/etc/frp/frps.tomlcaddy:image:caddy:2-alpinecontainer_name:caddyrestart:alwaysnetwork_mode:hostvolumes:-./Caddyfile:/etc/caddy/Caddyfile-./caddy_data:/data-./caddy_config:/config

保存并执行 docker compose up -d 重新部署。Caddy 会在后台悄悄为您申请好所有的 SSL 证书。


💻 第四步:本地客户端 (frpc) 配置与连接

现在回到您家里的电脑或 NAS 设备上。我们同样通过 Docker-compose 部署 frp 客户端(frpc)。

1. 创建工作目录

代码语言:javascript
复制
mkdir-p/opt/frp-client&&cd/opt/frp-client 

2. 编写 frpc.toml 客户端配置文件

新建 frpc.toml

代码语言:javascript
复制
nanofrpc.toml 

填入以下连接规则,将 <您的国内云服务器IP> 和域名替换为您的实际配置:

代码语言:javascript
复制
# frpc.toml# 服务端公网连接信息serverAddr="<您的国内云服务器IP>"serverPort=7000# 身份验证凭证,必须与服务端一致auth.method="token"auth.token="your_secure_token_here"# 虚拟局域网 TCP 多路复用transport.tcpMux=true# 穿透规则 1:家庭 NAS 界面(假设 NAS 本地运行在 192.168.1.100:5000)[[proxies]]name="home-nas-web"type="http"localIP="192.168.1.100"localPort=5000customDomains=["nas.yourdomain.com"]# 穿透规则 2:本地程序开发调试(假设开发机本地运行在 127.0.0.1:8080)[[proxies]]name="local-dev-web"type="http"localIP="127.0.0.1"localPort=8080customDomains=["dev.yourdomain.com"]

3. 编写本地客户端 docker-compose.yml

代码语言:javascript
复制
version:'3'services:frpc:image:fatedier/frpc:v0.60.0container_name:frpcrestart:alwaysnetwork_mode:hostvolumes:-./frpc.toml:/etc/frp/frpc.toml

保存并运行 docker compose up -d 启动客户端。


⚡ 连线测试与安全优化

此时,您在咖啡厅或公司,打开任意浏览器输入 https://nas.yourdomain.com,便能瞬间直连到家里的 NAS 网页管理端。 * 检查小绿锁:浏览器地址栏会自动显示安全的 HTTPS 加密小绿锁,这表明流量已经受到了我们自建的 Caddy 证书保护,数据传输安全无虞。 * 性能实测:通过自建穿透,文件的下载与上传速度完全能跑满您国内云服务器的物理带宽,摆脱了任何商业软件的几十 KB 限速。


💡 老周总结

通过 Docker-compose + frp + Caddy 的架构方案,我们不仅避开了多端口暴露的安全风险,更用最优雅的方式实现了一站式多域名 HTTP/HTTPS 端口复用,这对于需要长期稳定分享内网应用的朋友来说是最完美、最高效的内网穿透出口解决方案。

如果您在安装配置或证书申请过程中遇到阻碍,欢迎在留言区给老周留言,我们一起探讨解决!


[!TIP] 觉得本期教程实用?别忘了点击“关注”老周的AI进化实验室,并把文章分享给身边同样饱受远控限速折扰的极客朋友们!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老周的AI进化实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⚖️ 为什么选择自建 frp?
  • 🛠️ 第一步:前期准备工作
  • 🐋 第二步:云服务器端 (frps) Docker 部署
    • 1. 创建工作目录
    • 2. 编写 frps 服务端配置文件
    • 3. 编写 Docker-compose.yml 文件
  • 🔒 第三步:配置 Caddy 实现单端口复用与自动 SSL 证书
  • 💻 第四步:本地客户端 (frpc) 配置与连接
    • 1. 创建工作目录
    • 2. 编写 frpc.toml 客户端配置文件
    • 3. 编写本地客户端 docker-compose.yml
  • ⚡ 连线测试与安全优化
  • 💡 老周总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档