frp 内网穿透实现外网访问 fnos NAS 服务(完整版)
一、文档说明
- 核心目的:通过 frp 实现外网访问局域网内 fnos NAS 服务(供他人使用),个人使用推荐 tailscale 组网
- 环境依赖:需一台带公网 IP 的服务器(本文用阿里云 ECS Ubuntu 20.04,3M 带宽年付 99 元)
- 文件准备:frps(服务端)、frpc(客户端)配置文件已合并至同一文件夹(见附件)
二、准备工作
- 阿里云 ECS 前置操作:确保已登录 ECS 服务器,且具备 sudo 权限
- 依赖安装:若 ECS 未装 Docker 和 Docker-Compose,先执行以下命令(Ubuntu 示例):
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装Docker
sudo apt install docker.io -y
# 安装Docker-Compose
sudo apt install docker-compose-plugin -y
# 验证安装
docker --version && docker compose version
三、frps 部署(阿里云 ECS 端)
3.1 配置 frps.toml 文件
核心配置项说明(已标注与 frpc 的关联关系):
| 配置项 |
示例值 |
说明 |
| bindAddr |
"0.0.0.0" |
服务端监听地址,默认 0.0.0.0(无需修改) |
| bindPort |
7000 |
服务端通信端口,需与 frpc.toml 的 serverPort 完全一致 |
| auth.method |
"token" |
认证方式,固定为 token(需与 frpc 一致) |
| auth.token |
"your-secure-token" |
认证密钥,需与 frpc.toml 的 auth.token 完全一致(建议复杂字符组合) |
| webServer.port |
7001 |
控制台访问端口(默认 7001,可自定义) |
| webServer.user |
"admin" |
控制台登录用户名(自定义) |
| webServer.password |
"your-admin-pwd" |
控制台登录密码(自定义,建议复杂) |
| allowPorts |
[{start=9000,end=9002}] |
允许客户端映射的端口范围,新增端口需在此添加(示例:[{start=9003,end=9005},{start=9006,end=9008}]) |
| log.to |
"/var/log/frps.log" |
日志存储路径(无需修改,需确保容器有写入权限) |
完整配置文件(可直接复制使用,需替换auth.token和webServer.password):
# 基础通信配置
bindAddr = "0.0.0.0"
bindPort = 7000
# 认证配置
auth.method = "token"
auth.token = "your-secure-token" # 替换为自定义密钥,需与frpc一致
# 控制台配置
webServer.addr = "0.0.0.0"
webServer.port = 7001
webServer.user = "admin"
webServer.password = "your-admin-pwd" # 替换为自定义密码
webServer.pprofEnable = false
# TLS加密与连接配置
transport.tls.force = true
transport.tcpMux = true
transport.maxPoolCount = 2000
# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 3
log.disablePrintColor = false
# 端口权限控制
allowPorts = [
{ start = 9000, end = 9002 } # 可按需求新增端口段
]
# 默认必要参数(无需修改)
maxPortsPerClient = 8
u**acketSize = 1500
nathole**ysisDataReserveHours = 168
3.2 启动 frps 服务(Docker-Compose)
- 将附件中的frp文件夹上传至 ECS 服务器(示例路径:/home/ubuntu/frp)
- 进入 frp 目录执行启动命令:
# 进入frp文件夹
cd /home/ubuntu/frp
# 后台启动frps服务
docker compose -f docker-compose-frps.yml up -d
# 验证服务状态(出现"Up"表示启动成功)
docker compose -f docker-compose-frps.yml ps
3.3 阿里云 ECS 开放安全组规则
(必须操作!否则外网无法访问 frp 服务)
- 登录阿里云控制台 → 进入「ECS 实例列表」→ 找到目标服务器 → 点击「安全组」
- 点击「配置规则」→ 「添加安全组规则」,按以下参数配置:
| 规则方向 |
类型 |
端口范围 |
授权对象 |
描述 |
| 入方向 |
自定义 TCP |
7000/7000 |
0.0.0.0/0 |
frp 通信端口 |
| 入方向 |
自定义 TCP |
7001/7001 |
0.0.0.0/0 |
frp 控制台端口 |
| 入方向 |
自定义 TCP |
9000-9002 |
0.0.0.0/0 |
frp 映射端口 |
四、frpc 部署(局域网 fnos NAS 端)
4.1 配置 frpc.toml 文件
核心配置项说明(需与 frps 对应):
| 配置项 |
示例值 |
说明 |
| serverAddr |
"120.XX.XX.XX" |
阿里云 ECS 的公网 IP(需替换为实际 IP) |
| serverPort |
7000 |
与 frps.toml 的 bindPort 一致 |
| auth.token |
"your-secure-token" |
与 frps.toml 的 auth.token 完全一致 |
| [[proxies]] |
- |
每个 [[proxies]] 对应一个 NAS 服务的映射(可新增多个) |
| name |
"libertool" |
映射名称(自定义,如服务名) |
| type |
"tcp" |
协议类型(NAS 服务默认用 tcp) |
| localIP |
"0.0.0.0" |
NAS 本地 IP(0.0.0.0 表示本机所有 IP,无需修改) |
| localPort |
9091 |
NAS 服务的本地端口(如 libertool 服务端口) |
| remotePort |
9000 |
映射到 ECS 的端口(需在 frps.allowPorts 范围内) |
完整配置文件(示例含 3 个服务映射,可按需新增):
serverAddr = "120.XX.XX.XX" # 替换为ECS公网IP
serverPort = 7000
auth.method = "token"
auth.token = "your-secure-token" # 与frps一致
log.to = "/var/log/frpc.log"
log.level = "info"
log.maxDays = 3
# 映射1:libertool服务(本地端口9091 → 公网端口9000)
[[proxies]]
name = "libertool"
type = "tcp"
localIP = "0.0.0.0"
localPort = 9091
remotePort = 9000
# 映射2:dify服务(本地端口80 → 公网端口9001)
[[proxies]]
name = "dify"
type = "tcp"
localIP = "0.0.0.0"
localPort = 80
remotePort = 9001
# 映射3:PDF服务(本地端口7070 → 公网端口9002)
[[proxies]]
name = "pdf"
type = "tcp"
localIP = "0.0.0.0"
localPort = 7070
remotePort = 9002
4.2 启动 frpc 服务(fnos NAS 容器管理)
- 登录 fnos NAS 管理界面 → 进入「容器管理」模块 → 点击「Compose 新建项目」
- 项目配置:
- 项目名称:自定义(如frpc-nas)
- 文件夹:选择 NAS 上存放frp文件夹的路径(需包含frpc.toml和docker-compose-frpc.yml)
- 配置内容:复制以下docker-compose.yml代码(或直接读取文件):
services:
frpc:
image: stilleshan/frpc:0.64.0 # 稳定版镜像
container_name: frpc
restart: always # 开机自动重启
network_mode: "host"
volumes:
- ./frpc.toml:/frp/frpc.toml # 挂载配置文件
- ./logs:/var/log # 挂载日志目录
environment:
- TZ=Asia/Shanghai # 时区配置(避免日志时间偏差)
- 点击「部署」,等待容器启动完成(状态显示 “运行中” 即为成功)

五、部署验证
- 访问 frp 控制台:
- 浏览器输入:http://ECS公网IP:7001
- 输入webServer.user和webServer.password登录
- 查看「代理列表」:所有配置的[[proxies]]应显示 “在线” 状态
- 访问 NAS 服务:
- 示例 1(dify 服务):http://ECS公网IP:9001
- 示例 2(libertool 服务):http://ECS公网IP:9000
- 若能正常打开服务界面,说明穿透成功
六、常见操作示例
示例 1:新增 NAS 服务映射
- 编辑frpc.toml,新增一段[[proxies]]:
[[proxies]]
name = "new-service" # 自定义名称
type = "tcp"
localIP = "0.0.0.0"
localPort = 8080 # 新增服务的本地端口
remotePort = 9003 # 新增端口(需在frps.allowPorts中添加{start=9003,end=9003})
- 同步更新 ECS 的frps.toml的allowPorts:
allowPorts = [
{ start = 9000, end = 9002 },
{ start = 9003, end = 9003 } # 新增端口段
]
- 重启服务:
- ECS 端:cd /home/ubuntu/frp && docker compose -f docker-compose-frps.yml restart
- NAS 端:在「容器管理」中重启frpc容器
七、注意事项
- 安全防护:
- auth.token建议使用大小写字母 + 数字 + 特殊符号的组合(如Frp@2025!),避免泄露
- allowPorts仅开放必要端口,不建议配置过大的端口范围(如9000-9999)
- 定期查看 frp 日志(./logs/frps.log和./logs/frpc.log),排查异常连接
- 稳定性保障:
- ECS 需开启 “开机自启”,避免服务器重启后 frps 服务中断
- NAS 端容器配置restart: always,确保 NAS 重启后 frpc 自动恢复
- 若穿透速度慢,可检查 ECS 带宽是否充足(3M 带宽适合小流量服务,大文件传输建议升级带宽)
- 故障排查:
- 若控制台显示 “代理离线”:检查 frpc 与 frps 的auth.token是否一致、ECS 安全组是否开放7000端口
- 若服务无法访问:检查localPort是否为 NAS 服务的实际端口、remotePort是否在allowPorts范围内

附件:frp.zip