frp内网穿透

frp内网穿透

很多兄弟在家里搞了 NAS(不管是群晖、威联通还是自己攒的黑群),最头疼的问题就是:人在外面,怎么连回去?

运营商基本不给公网 IP,这就让 NAS 变成了一个“大局域网存储”。为了解决这个问题,大家通常会折腾各种方案,但最后发现还是 frp 最稳。


为什么折腾了半天,还得是 frp?

目前的内网穿透方案其实挺多,但大多都有硬伤:

  • 厂家自带域名(如绿联、群晖 QuickConnect)

    • 缺点:域名又长又难记,而且流量经过厂家中转,速度慢得感人,看个高清视频卡到怀疑人生。

  • 公共穿透服务(如向日葵、花生壳)

    • 缺点:免费版限速到几百 KB,稍微想快一点就要交月费。而且映射数量有限,想给多个 Docker 服务做穿透?加钱。

  • Cloudflare Tunnel

    • 缺点:虽然免费且安全,但毕竟节点都在海外,国内访问延迟高,握手慢,甚至时不时抽风连不上。

相比之下,frp (Fast Reverse Proxy) 的优势在于:只要你有一个国内的云服务器,流量握手极快,带宽取决于你的服务器带宽,完全自由定制。


阿里云“99 计划”:最香的跳板机

做 frp 穿透,核心得有个带公网 IP 的中转站。

现在刚好赶上阿里云的 “99 计划”,2 核 2G 的 ECS 实例一年只要 99 块钱,而且续费同价。这个配置拿来跑 frp 绰绰有余,带宽给力,还能顺便跑个 Caddy 做反向代理。

我的推荐链接

https://www.aliyun.com/minisite/goods?userCode=1qkt8mbb

买好服务器后,建议安装 Ubuntu 或 Debian 系统,接下来我们就用 Docker Compose 把穿透搭起来。


实战配置:Docker Compose 一键部署

我们要准备两套配置:云服务器跑服务端(frps),家里 NAS 跑客户端(frpc)。

1. 服务端(frps)配置

在云服务器上新建目录 frp,创建 frps.toml

Ini, TOML

# frps.toml
bindPort = 7000          # 服务端监听端口,和客户端通信
vhostHTTPPort = 80       # 接收 HTTP 请求的端口
vhostHTTPSPort = 443     # 接收 HTTPS 请求的端口
auth.token = "你的安全密钥" # 务必设置复杂点

创建 docker-compose.yml

YAML

services:
  frps:
    image: fatedier/frps:latest
    container_name: frps
    restart: always
    network_mode: host
    volumes:
      - ./frps.toml:/etc/frp/frps.toml

2. 客户端(frpc)配置

在 NAS 上新建目录 frp,创建 frpc.toml

Ini, TOML

# frpc.toml
serverAddr = "你的云服务器IP"
serverPort = 7000
auth.token = "你的安全密钥"

[[proxies]]
name = "nas-web"
type = "http"
localIP = "127.0.0.1"   # 如果是 NAS 本身的服务
localPort = 5000        # NAS 管理界面的端口
customDomains = ["nas.example.com"]

[[proxies]]
name = "docker-app"
type = "http"
localIP = "172.17.0.1"  # 或者是内网其他机器 IP
localPort = 8080        # NAS 上其他 Docker 服务的端口
customDomains = ["app.example.com"]

创建 docker-compose.yml

YAML

services:
  frpc:
    image: fatedier/frpc:latest
    container_name: frpc
    restart: always
    volumes:
      - ./frpc.toml:/etc/frp/frpc.toml

进阶:如何优雅地处理 HTTPS?

frp 本身可以处理 HTTPS,但最推荐的方式还是 [Caddy + frp]

  1. 云端 Caddy 监听 80/443。

  2. Caddy 负责自动申请证书,并反向代理到云服务器本地的 8080(frp 转发出来的端口)。

  3. frp 只负责把流量打回内网。

这样做的好处是,你不需要在内网折腾证书,证书在云端服务器自动就续期了,省心省力。

实现步骤:

  1. 在 frpc 里的 proxies 类型写成 tcp,或者用 http 配合云端的 Nginx/Caddy。

  2. 如果你有多个 Docker 服务(比如 Plex、Transmission、青龙面板),只需要在 frpc.toml 里多加几个 [[proxies]] 模块,分配不同的子域名即可。


避坑小贴士

  • 防火墙:阿里云控制台的安全组一定要放行 700080443 等端口,否则客户端永远连不上。

  • frp 官方文档:这是最权威的参考,遇到特殊的 TCP/UDP 转发需求,直接去翻文档。

  • 版本匹配:确保服务端和客户端的 frp 版本一致,不然可能会报各种稀奇古怪的连接错误。

搞定这一套,你的 NAS 就能随时随地通过自己的顶级域名秒连了。

How to Use FRP for Remote Access 这个视频详细演示了 frp 的基本原理和加密传输的配置,对于理解流量是如何从公网穿透到内网非常有帮助。

Caddy使用浅析 2026-01-15
SBUS 协议解析实践:从原始数据到 Java 解码 2026-01-16

评论区