This commit is contained in:
2026-04-18 15:08:57 +08:00
commit 2a67f56512
13 changed files with 2729 additions and 0 deletions

View File

@@ -0,0 +1,525 @@
# frp 内网穿透 - 原理与部署指南
> **适用对象**:没有技术背景的人员
> **阅读时间**:约 15 分钟
> **最后更新**2026-04-17
---
## 1. 什么是 frp为什么需要它
### 1.1 一句话解释
**frp 就是一座"桥"**,让外面的人可以通过公网访问到你家里(或公司内网)的设备。
### 1.2 生活类比
想象一下这个场景:
```
你家有一台 NAS网络存储器里面存了很多照片。
你想让朋友们通过互联网访问你的 NAS 上传照片。
但是问题来了:
- 你家的 NAS 没有"公网身份证"公网IP外面的人找不到它
- 就像你家住在一个封闭小区里,快递员进不来
怎么办?
- 你在小区门口找了一个"门卫"frp 服务端),他站在公网上
- 你在家里装了一个"对讲机"frp 客户端),和门卫保持通话
- 朋友来找你时,先到门卫那里,门卫通过对讲机通知你,然后帮你把东西转达过去
这就是 frp 的工作原理!
```
### 1.3 专业术语对照表
| 你会看到的术语 | 大白话解释 |
|---------------|-----------|
| 公网 IP | 你在互联网上的"门牌号",全球唯一,任何人都能找到 |
| 内网 IP | 你家内部的"房间号",只有家里的人能找到 |
| 内网穿透 | 让外面的人能绕过小区门禁,找到你家里的设备 |
| frpsfrp server | frp 服务端,装在公网服务器上,相当于"门卫" |
| frpcfrp client | frp 客户端,装在你家里的 NAS 上,相当于"对讲机" |
| 端口Port | 设备上的"窗口编号",比如 80 窗口用来传网页22 窗口用来远程控制 |
| 反向代理 | 代替别人收快递,然后转交给你 |
---
## 2. frp 是怎么工作的?
### 2.1 整体流程图
```
互联网(公网)
┌───────────────────┼───────────────────┐
│ │ │
用户手机/电脑 公网服务器frps 其他网站
"我要上传照片" "门卫"在这里等着 (互不干扰)
│ │
│ ① 请求到达公网服务器 │
│ ──────────────────────→ │
│ │
│ ② 服务器转发给家里的NAS │
│ │ ──────────────────────→
│ │ │
│ 你家的 NASfrpc
│ "对讲机"收到消息 │
│ 处理上传请求 │
│ │
│ ③ NAS 处理完,原路返回 │
│ ←────────────────────── │ ←──────────────────────
│ │ │
收到"上传成功!" │ │
```
### 2.2 用大白话描述整个过程
1. **你买了一台公网服务器**(比如阿里云、腾讯云的云服务器),它有一个公网 IP全世界都能访问到它
2. **在公网服务器上安装 frps**服务端它就像一个24小时值班的门卫
3. **在你家里的 NAS 上安装 frpc**(客户端),它主动连接到公网服务器,说:"嘿,我是某某某家的 NAS如果有人找我请转接给我"
4. **当用户访问你的网站时**,请求先到达公网服务器,服务器再通过已经建立好的连接,把请求转发到你家里的 NAS
5. **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
登录到你的公网服务器,执行以下命令:
```bash
# 下载 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`
```bash
nano frps.toml
```
写入以下内容(直接复制粘贴即可):
```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
```bash
# 启动服务端
./frps -c frps.toml
```
如果看到类似 `frps started successfully` 的提示,说明启动成功了!
#### 4.1.4 设置开机自启(推荐)
让 frps 在服务器重启后自动运行:
```bash
# 创建系统服务
sudo nano /etc/systemd/system/frps.service
```
写入以下内容:
```ini
[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 安装路径。
```bash
# 启用并启动服务
sudo systemctl enable frps
sudo systemctl start frps
# 查看运行状态
sudo systemctl status frps
```
---
### 4.2 第二步:在 NAS 上安装 frpc客户端
> 这一步在 NAS 上操作。不同品牌的 NAS 操作方式略有不同,下面以通用方式说明。
#### 4.2.1 下载 frp
SSH 登录到你的 NAS执行
```bash
# 如果是 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`
```bash
nano frpc.toml
```
写入以下内容:
```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
```bash
./frpc -c frpc.toml
```
看到 `start proxy success` 就说明连接成功了!
#### 4.2.4 设置开机自启
```bash
sudo nano /etc/systemd/system/frpc.service
```
写入:
```ini
[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
```
```bash
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 连接群晖
1. 打开群晖控制面板 → 终端机和 SNMP → 勾选"启动 SSH 功能"
2. 在电脑上用终端工具连接:
```bash
ssh 你的NAS用户名@192.168.1.100
```
### 5.2 使用 Docker 安装 frpc推荐
群晖支持 Docker用 Docker 安装更方便管理:
1. 打开群晖的 **Docker** 套件(或 Container Manager
2. 在 **注册表** 中搜索 `frpc`,下载镜像
3. 在 **映像** 中双击下载好的镜像,创建容器
4. 在 **卷** 设置中,挂载配置文件
5. 在 **网络** 设置中,勾选"使用与 Docker Host 相同的网络"
或者通过命令行:
```bash
# 创建配置文件目录
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 端口被占用怎么办?
如果提示端口被占用,说明有其他程序已经在用这个端口了:
```bash
# 查看哪个程序占用了端口
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公网服务器
```toml
# ============================================
# frp 服务端配置 - 放在公网服务器上
# ============================================
# frp 通信端口(客户端通过此端口连接)
bindPort = 7000
# 认证令牌(请修改为你自己的强密码!)
auth.token = "请改成你自己的强密码"
# 管理面板(可选,方便查看状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "请改成管理面板密码"
```
### 9.2 frpc.tomlNAS 客户端)
```toml
# ============================================
# 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/