15 KiB
frp 内网穿透 - 原理与部署指南
适用对象:没有技术背景的人员
阅读时间:约 15 分钟
最后更新:2026-04-17
1. 什么是 frp?为什么需要它?
1.1 一句话解释
frp 就是一座"桥",让外面的人可以通过公网访问到你家里(或公司内网)的设备。
1.2 生活类比
想象一下这个场景:
你家有一台 NAS(网络存储器),里面存了很多照片。
你想让朋友们通过互联网访问你的 NAS 上传照片。
但是问题来了:
- 你家的 NAS 没有"公网身份证"(公网IP),外面的人找不到它
- 就像你家住在一个封闭小区里,快递员进不来
怎么办?
- 你在小区门口找了一个"门卫"(frp 服务端),他站在公网上
- 你在家里装了一个"对讲机"(frp 客户端),和门卫保持通话
- 朋友来找你时,先到门卫那里,门卫通过对讲机通知你,然后帮你把东西转达过去
这就是 frp 的工作原理!
1.3 专业术语对照表
| 你会看到的术语 | 大白话解释 |
|---|---|
| 公网 IP | 你在互联网上的"门牌号",全球唯一,任何人都能找到 |
| 内网 IP | 你家内部的"房间号",只有家里的人能找到 |
| 内网穿透 | 让外面的人能绕过小区门禁,找到你家里的设备 |
| frps(frp server) | frp 服务端,装在公网服务器上,相当于"门卫" |
| frpc(frp client) | frp 客户端,装在你家里的 NAS 上,相当于"对讲机" |
| 端口(Port) | 设备上的"窗口编号",比如 80 窗口用来传网页,22 窗口用来远程控制 |
| 反向代理 | 代替别人收快递,然后转交给你 |
2. frp 是怎么工作的?
2.1 整体流程图
互联网(公网)
│
┌───────────────────┼───────────────────┐
│ │ │
用户手机/电脑 公网服务器(frps) 其他网站
"我要上传照片" "门卫"在这里等着 (互不干扰)
│ │
│ ① 请求到达公网服务器 │
│ ──────────────────────→ │
│ │
│ ② 服务器转发给家里的NAS │
│ │ ──────────────────────→
│ │ │
│ 你家的 NAS(frpc) │
│ "对讲机"收到消息 │
│ 处理上传请求 │
│ │
│ ③ NAS 处理完,原路返回 │
│ ←────────────────────── │ ←──────────────────────
│ │ │
收到"上传成功!" │ │
2.2 用大白话描述整个过程
- 你买了一台公网服务器(比如阿里云、腾讯云的云服务器),它有一个公网 IP,全世界都能访问到它
- 在公网服务器上安装 frps(服务端),它就像一个24小时值班的门卫
- 在你家里的 NAS 上安装 frpc(客户端),它主动连接到公网服务器,说:"嘿,我是某某某家的 NAS,如果有人找我,请转接给我"
- 当用户访问你的网站时,请求先到达公网服务器,服务器再通过已经建立好的连接,把请求转发到你家里的 NAS
- NAS 处理完后,结果原路返回给用户
关键点:是 NAS 主动"打电话"给公网服务器的,所以不需要你家有公网 IP。只要你的 NAS 能上网,就能用 frp。
3. 你需要准备什么?
3.1 硬件/服务清单
| 需要的东西 | 说明 | 大概费用 |
|---|---|---|
| 一台公网服务器 | 阿里云/腾讯云等云服务器,最便宜的就行 | 约 50-100 元/月 |
| NAS 设备 | 你已有的 NAS(群晖、威联通等) | 已有 |
| 家里的网络 | NAS 需要能正常上网 | 已有 |
3.2 需要提前获取的信息
在开始安装之前,请准备好以下信息:
□ 公网服务器的 IP 地址(例如:123.45.67.89)
□ 公网服务器的登录密码
□ NAS 的登录密码(或 SSH 权限)
□ NAS 在家里的内网 IP(例如:192.168.1.100)
□ 你想给网站分配的端口号(建议用 8080)
怎么看 NAS 的内网 IP?
登录 NAS 的管理界面,一般在"网络设置"或"控制面板 → 网络"里能看到,通常格式是192.168.x.x
4. 安装步骤
4.1 第一步:在公网服务器上安装 frps(服务端)
这一步通常由技术人员或有服务器经验的人操作。如果你是租的云服务器,可以请服务商帮忙。
4.1.1 下载 frp
登录到你的公网服务器,执行以下命令:
# 下载 frp(以 Linux 64位 为例)
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.61.1_linux_amd64.tar.gz
# 进入目录
cd frp_0.61.1_linux_amd64
4.1.2 创建配置文件
用文本编辑器创建一个配置文件 frps.toml:
nano frps.toml
写入以下内容(直接复制粘贴即可):
# frp 服务端配置文件
# 绑定端口 - frpc 客户端通过这个端口连接到服务端
bindPort = 7000
# 认证令牌 - 相当于暗号,客户端和服务端必须一致才能连接
# 请把下面的 your_secret_token 改成一个只有你知道的密码!
auth.token = "your_secret_token"
# frp 管理面板(可选,方便查看运行状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"
⚠️ 重要:请把
your_secret_token改成一个强密码!这个密码用于验证客户端身份,防止别人盗用你的服务器。
4.1.3 启动 frps
# 启动服务端
./frps -c frps.toml
如果看到类似 frps started successfully 的提示,说明启动成功了!
4.1.4 设置开机自启(推荐)
让 frps 在服务器重启后自动运行:
# 创建系统服务
sudo nano /etc/systemd/system/frps.service
写入以下内容:
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/root/frp_0.61.1_linux_amd64/frps -c /root/frp_0.61.1_linux_amd64/frps.toml
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
⚠️ 注意:把路径替换成你实际的 frp 安装路径。
# 启用并启动服务
sudo systemctl enable frps
sudo systemctl start frps
# 查看运行状态
sudo systemctl status frps
4.2 第二步:在 NAS 上安装 frpc(客户端)
这一步在 NAS 上操作。不同品牌的 NAS 操作方式略有不同,下面以通用方式说明。
4.2.1 下载 frp
SSH 登录到你的 NAS,执行:
# 如果是 x86 架构的 NAS(大多数群晖/威联通是这种)
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
# 如果是 ARM 架构的 NAS(部分 NAS 是这种)
# wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_arm64.tar.gz
# 解压
tar -xzf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
4.2.2 创建配置文件
创建配置文件 frpc.toml:
nano frpc.toml
写入以下内容:
# frp 客户端配置文件
# 公网服务器的地址和端口
serverAddr = "123.45.67.89" # ← 改成你的公网服务器 IP
serverPort = 7000
# 认证令牌 - 必须和服务端设置的一致!
auth.token = "your_secret_token" # ← 改成和服务端一样的密码
# 图片上传服务的代理配置
[[proxies]]
name = "nas-uploader"
type = "tcp"
localIP = "127.0.0.1" # NAS 本机地址
localPort = 5000 # NAS 上网站运行的端口
remotePort = 8080 # 公网服务器上对外暴露的端口
参数解释:
| 参数 | 含义 | 怎么填 |
|---|---|---|
| serverAddr | 公网服务器的 IP | 填你的云服务器 IP |
| serverPort | 服务端的连接端口 | 默认 7000,和服务端配置一致 |
| auth.token | 认证密码 | 和服务端填一样的 |
| localPort | NAS 上网站的端口 | 5000(网站默认端口) |
| remotePort | 对外开放的端口 | 8080(用户通过这个端口访问网站) |
4.2.3 启动 frpc
./frpc -c frpc.toml
看到 start proxy success 就说明连接成功了!
4.2.4 设置开机自启
sudo nano /etc/systemd/system/frpc.service
写入:
[Unit]
Description=frp client
After=network.target
[Service]
Type=simple
ExecStart=/root/frp_0.61.1_linux_amd64/frpc -c /root/frp_0.61.1_linux_amd64/frpc.toml
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc
4.3 第三步:验证是否成功
打开浏览器,访问:
http://你的公网服务器IP:8080
例如:http://123.45.67.89:8080
如果能看到网站页面,恭喜你,frp 配置成功了!🎉
5. 群晖 NAS 特别说明
如果你使用的是群晖 NAS,操作方式稍有不同:
5.1 通过 SSH 连接群晖
- 打开群晖控制面板 → 终端机和 SNMP → 勾选"启动 SSH 功能"
- 在电脑上用终端工具连接:
ssh 你的NAS用户名@192.168.1.100
5.2 使用 Docker 安装 frpc(推荐)
群晖支持 Docker,用 Docker 安装更方便管理:
- 打开群晖的 Docker 套件(或 Container Manager)
- 在 注册表 中搜索
frpc,下载镜像 - 在 映像 中双击下载好的镜像,创建容器
- 在 卷 设置中,挂载配置文件
- 在 网络 设置中,勾选"使用与 Docker Host 相同的网络"
或者通过命令行:
# 创建配置文件目录
mkdir -p /volume1/docker/frpc
# 把 frpc.toml 放到这个目录下
# 然后启动容器
docker run -d \
--name frpc \
--restart always \
-v /volume1/docker/frpc/frpc.toml:/etc/frp/frpc.toml \
--network host \
snowdreamtech/frpc
6. 常见问题排查
6.1 连接不上怎么办?
按以下顺序检查:
第1步:检查公网服务器上的 frps 是否在运行
→ 在服务器上执行:systemctl status frps
→ 如果没运行,执行:systemctl start frps
第2步:检查 NAS 上的 frpc 是否在运行
→ 在 NAS 上执行:systemctl status frpc
→ 如果没运行,执行:systemctl start frpc
第3步:检查防火墙是否开放了端口
→ 公网服务器的 7000 端口(frp 通信)和 8080 端口(网站访问)必须开放
→ 在云服务器管理控制台的"安全组"中添加规则
第4步:检查 token 是否一致
→ frps 和 frpc 的 auth.token 必须完全一样
→ 注意大小写和空格
第5步:检查服务器的 IP 地址是否正确
→ frpc.toml 中的 serverAddr 是否填对了
6.2 端口被占用怎么办?
如果提示端口被占用,说明有其他程序已经在用这个端口了:
# 查看哪个程序占用了端口
lsof -i :7000 # 查看 7000 端口
lsof -i :8080 # 查看 8080 端口
# 解决方法:换一个端口号
# 比如把 remotePort = 8080 改成 remotePort = 9090
6.3 网站能访问但上传失败?
→ 检查 NAS 上的网站服务(Flask)是否在运行
→ 检查 localPort 是否和网站实际运行的端口一致
→ 检查 NAS 的存储目录是否有写入权限
6.4 速度很慢怎么办?
→ frp 的速度取决于公网服务器的带宽和 NAS 的上传带宽
→ 建议选择国内云服务器(阿里云/腾讯云),延迟更低
→ 如果只是传图片,一般带宽足够了
7. 安全注意事项
7.1 一定要做的事
- ✅ 修改默认 token:不要用示例中的
your_secret_token,改成强密码 - ✅ 设置防火墙规则:只开放必要的端口(7000 和 8080),关闭其他端口
- ✅ 定期更新 frp:关注 frp 的版本更新,及时升级修复安全漏洞
7.2 建议做的事
- 🔶 使用 HTTPS:通过 Nginx 配置 SSL 证书,让传输更安全
- 🔶 限制访问 IP:如果只有特定的人需要访问,可以在防火墙中限制来源 IP
- 🔶 定期查看日志:检查是否有异常访问记录
7.3 不要做的事
- ❌ 不要把 token 写在公开的地方(比如 GitHub)
- ❌ 不要使用过于简单的 token(比如
123456) - ❌ 不要开放不必要的端口
8. 速查表
8.1 常用命令
| 操作 | 命令 |
|---|---|
| 启动 frps | ./frps -c frps.toml |
| 启动 frpc | ./frpc -c frpc.toml |
| 查看服务状态 | systemctl status frps 或 systemctl status frpc |
| 重启服务 | systemctl restart frps 或 systemctl restart frpc |
| 查看日志 | journalctl -u frps -f 或 journalctl -u frpc -f |
8.2 文件位置速查
| 文件 | 位置 | 说明 |
|---|---|---|
| frps 配置 | 公网服务器上的 frps.toml |
服务端配置 |
| frpc 配置 | NAS 上的 frpc.toml |
客户端配置 |
| frps 服务文件 | /etc/systemd/system/frps.service |
开机自启配置 |
| frpc 服务文件 | /etc/systemd/system/frpc.service |
开机自启配置 |
8.3 端口速查
| 端口 | 用途 | 在哪里 |
|---|---|---|
| 7000 | frp 通信端口 | 公网服务器 |
| 7500 | frp 管理面板(可选) | 公网服务器 |
| 5000 | 网站服务端口 | NAS |
| 8080 | 对外访问端口 | 公网服务器 |
9. 附录:完整配置文件模板
9.1 frps.toml(公网服务器)
# ============================================
# frp 服务端配置 - 放在公网服务器上
# ============================================
# frp 通信端口(客户端通过此端口连接)
bindPort = 7000
# 认证令牌(请修改为你自己的强密码!)
auth.token = "请改成你自己的强密码"
# 管理面板(可选,方便查看状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "请改成管理面板密码"
9.2 frpc.toml(NAS 客户端)
# ============================================
# frp 客户端配置 - 放在 NAS 上
# ============================================
# 公网服务器地址(请修改为你的服务器 IP)
serverAddr = "123.45.67.89"
serverPort = 7000
# 认证令牌(必须和服务端一致!)
auth.token = "请改成你自己的强密码"
# 图片上传网站代理
[[proxies]]
name = "nas-uploader"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5000
remotePort = 8080
有问题? 把报错信息截图发给技术人员,或者查看 frp 官方文档:https://gofrp.org/zh-cn/