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