# 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 用大白话描述整个过程 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.toml(NAS 客户端) ```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/