在NAS上部署frp,实现内网穿透

网络, 建站  ·  2026-02-23

铁威马NAS使用FRP内网穿透完整部署教程

目录

  • 铁威马NAS使用FRP内网穿透完整部署教程

    • 目录

    • 一、环境说明

    • 二、准备工作

    • 三、服务端部署(公网服务器)

      • 3.1 下载FRP

      • 3.2 配置服务端(frps.toml)

      • 3.3 启动服务端

      • 3.4 验证服务端运行状态


    • 四、客户端部署(铁威马NAS)

      • 4.1 下载FRP

      • 4.2 配置客户端(frpc.toml)

      • 4.3 启动客户端


    • 五、网络连通性故障排查指南

      • 5.1 故障现象:客户端连接超时(i/o timeout)

      • 5.2 故障案例:服务端只监听IPv6

      • 5.3 故障案例:telnet卡住无反应

      • 5.4 故障案例:配置文件格式错误


    • 六、验证穿透是否成功


    • 七、设置开机自启(推荐)

      • 7.1 服务端设置systemd服务

      • 7.2 客户端设置systemd服务


    • 八、常见问题

      • Q1: 公网访问时显示无法连接

      • Q2: 客户端显示login成功但无法访问

      • Q3: 如何查看实时日志




一、环境说明

本教程基于以下环境:

设备 IP地址 操作系统 角色
公网云服务器 公网IP Linux (x86_64) FRP服务端(frps)
铁威马NAS 192.168.3.42 TOS系统 FRP客户端(frpc)

需求:将NAS的 9900 端口映射到公网,通过 http://公网IP:18808 访问。

FRP版本:v0.67.0(配置文件格式为TOML)

二、准备工作

  1. 确认系统架构

    # 在服务器和NAS上分别执行
    uname -m
    • 输出 x86_64:下载 linux_amd64 版本

    • 输出 aarch64:下载 linux_arm64 版本

  2. 确认端口规划

    • 7788:FRP客户端连接端口

    • 18808:公网访问端口

    • 9900:NAS本地服务端口

    • 17500:服务端Web面板端口(可选)

三、服务端部署(公网服务器)

3.1 下载FRP

 

# 创建目录并进入
mkdir -p /usr/frp && cd /usr/frp

# 下载v0.67.0(x86_64架构)
wget https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.67.0_linux_amd64.tar.gz
cd frp_0.67.0_linux_amd64

3.2 配置服务端(frps.toml)

创建 frps.toml 文件:

# frps.toml
# 基础连接配置
bindAddr = "0.0.0.0"      # 添加这行,强制监听所有IPv4地址
bindPort = 7788
kcpBindPort = 7788

# HTTP 虚拟主机端口 - 公网访问端口
vhostHTTPPort = 18808

# Web 管理面板配置
webServer.port = 17500
webServer.user = "admin"
webServer.password = "admin@123"

# 认证配置
auth.method = "token"
auth.token = "m5afVnzgLTHDBVyO"

# 日志配置 (注意这里!)
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 30

# 传输配置 (注意这里!)
transport.maxPoolCount = 50

3.3 启动服务端

# 前台运行测试(查看是否有错误)
./frps -c ./frps.toml

# 看到类似输出表示成功:
# 2026-02-23 ... [I] [server/service.go:...] frps started successfully

# 按 Ctrl+C 停止,然后后台运行
nohup ./frps -c ./frps.toml > frps.log 2>&1 &

3.4 验证服务端运行状态

# 查看进程
ps aux | grep frps

# 查看端口监听
netstat -tlnp | grep 7788

正常输出示例

text


tcp        0      0 0.0.0.0:7788            0.0.0.0:*               LISTEN      12345/./frps
tcp6       0      0 :::7788                 :::*                    LISTEN      12345/./frps

注意:只看到 tcp6 是正常的,这是Linux双栈监听机制,不影响IPv4连接。

四、客户端部署(铁威马NAS)

4.1 下载FRP

通过SSH登录到铁威马NAS:

# 创建目录
mkdir -p /volume1/@appdata/frp && cd /volume1/@appdata/frp

# 下载v0.67.0(x86_64架构)
wget https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.67.0_linux_amd64.tar.gz
cd frp_0.67.0_linux_amd64

4.2 配置客户端(frpc.toml)

情况A:如果9900端口是Web服务(如NAS管理界面)

# frpc.toml
serverAddr = "60.205.163.132"
serverPort = 7788
auth.method = "token"
auth.token = "m5afVnzgLTHDBVyO"

[[proxies]]
name = "nas-web"
type = "http"                      # 使用 HTTP 类型
localIP = "192.168.3.42"
localPort = 9900
customDomains = ["公网IP"]  # 使用服务器的 IP 作为域名

情况B:如果9900端口是非Web服务(如数据库、SSH等)

bash


cat > frpc.toml << 'EOF'
serverAddr = "公网IP"
serverPort = 7788
auth.method = "token"
auth.token = "m5afVnzgLTHDBVyO"

[[proxies]]
name = "nas-service"
type = "tcp"
localIP = "192.168.3.42"
localPort = 9900
remotePort = 18808
EOF

4.3 启动客户端

bash


# 前台运行测试
./frpc -c ./frpc.toml

# 看到以下输出表示成功:
# login to server success
# start proxy success

# 按 Ctrl+C 停止,然后后台运行
nohup ./frpc -c ./frpc.toml > frpc.log 2>&1 &

五、网络连通性故障排查指南

5.1 故障现象:客户端连接超时(i/o timeout)

错误日志

text


connect to server error: dial tcp 60.205.163.132:7788: i/o timeout

排查步骤

  1. 在NAS上测试网络连通性

    bash
    telnet 公网IP 7788
  2. 解读telnet结果

    • Connected to 60.205.163.132:✅ 网络通畅

    • Connection timed out:❌ 网络被拦截,检查云平台安全组

    • Connection refused:✅ 网络通但服务端没运行

    • 卡住无反应:❌ 流量被静默丢弃,检查安全组和防火墙

  3. 检查云平台安全组(最关键!)

    • 登录云服务商控制台(阿里云/腾讯云/华为云)

    • 找到ECS实例绑定的安全组

    • 添加入方向规则:

      text
      协议: TCP
      端口: 7788
      源: 0.0.0.0/0
      策略: 允许
      在服务器执行以下命令,则策略立即生效
      iptables -I INPUT -p tcp --dport 7788 -j ACCEPT
  4. 检查服务器内部防火墙

    # 查看防火墙状态
    systemctl status firewalld
    
    # 如果开启,临时关闭测试
    systemctl stop firewalld
    
    # 或添加永久规则
    firewall-cmd --permanent --add-port=7788/tcp
    firewall-cmd --reload

5.2 故障案例:服务端只监听IPv6

现象netstat 只显示 tcp6,客户端连接超时

分析:这是正常现象!Linux双栈监听机制下,tcp6 可以同时处理IPv4和IPv6连接。

验证方法

bash


# 在服务器本地测试IPv4连接
telnet 127.0.0.1 7788

如果成功,说明监听正常,问题仍在安全组。

5.3 故障案例:telnet卡住无反应

现象:执行 telnet 后没有任何输出,一直卡住

原因:网络数据包在途中被静默丢弃,通常是云平台安全组规则未生效

解决方案

  1. 检查安全组规则是否正确配置并保存

  2. 尝试删除规则重新添加,强制刷新

  3. 检查是否绑定了多个安全组,其中一个有冲突规则

5.4 故障案例:配置文件格式错误

错误日志

text


json: unknown field "file"
json: unknown field "maxPoolCount"

原因:配置文件格式与FRP版本不匹配

解决方案

  • v0.52.0及以上:使用TOML格式,参数用小驼峰(如 log.to

  • v0.51.0及以下:使用INI格式,参数用下划线(如 log_file

v0.67.0正确TOML格式示例

toml


# 正确
log.to = "/var/log/frps.log"
transport.maxPoolCount = 50

# 错误 ❌
log.file = "/var/log/frps.log"
maxPoolCount = 50

六、验证穿透是否成功

  1. 确认客户端连接成功

    bash
    tail -f frpc.log

    应该看到:login to server success

  2. 确认服务端有客户端连接

    bash
    # 在服务器上查看
    tail -f /var/log/frps.log
  3. 公网访问测试

    • 在任意浏览器访问:http://公网IP:18808

    • 应该看到NAS 8808端口的服务

  4. 查看Web面板(如果配置了)

    • 访问:http://公网IP:17500

    • 用配置的用户名密码登录

    • 可以看到所有代理状态和流量统计

七、设置开机自启(推荐)

7.1 服务端设置systemd服务

创建 /etc/systemd/system/frps.service

ini


[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/frp/frp_0.67.0_linux_amd64/frps -c /usr/frp/frp_0.67.0_linux_amd64/frps.toml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启用服务:

bash


systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps

7.2 客户端设置systemd服务

创建 /etc/systemd/system/frpc.service

ini


[Unit]
Description=FRP Client
After=network.target

[Service]
Type=simple
User=root
ExecStart=/volume1/@appdata/frp/frp_0.67.0_linux_amd64/frpc -c /volume1/@appdata/frp/frp_0.67.0_linux_amd64/frpc.toml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启用服务:

bash


systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
systemctl status frpc

八、常见问题

Q1: 公网访问时显示无法连接

可能原因

  • 服务端 vhostHTTPPort 未在安全组放行(需放行18808)

  • 客户端配置错误(检查 localIP 和 localPort

  • 本地服务未运行(确认NAS 9900端口有服务在监听)

Q2: 客户端显示login成功但无法访问

检查

bash


# 在NAS上确认本地服务
curl http://192.168.3.42:9900
# 或
telnet 192.168.3.42 9900

Q3: 如何查看实时日志

服务端

tail -f /var/log/frps.log
# 或
journalctl -u frps -f

客户端

bash


tail -f frpc.log
# 或
journalctl -u frpc -f


最终验证:当你在任何网络环境下访问 http://公网IP:18808 都能看到NAS的服务时,恭喜你,FRP内网穿透配置成功!

 

 建站
评论
大百科. All Rights Reserved. Theme Jasmine by Kent Liao.