斐讯N1盒子安装Openwrt系统,部署Frp服务教程
问题:N1安装Openwrt系统后,需要安装Frpc指定版本的客户端,但系统自带的软件包无法通过图形界面安装frpc_0.51.3-r1版本,目前只能通过命令行安装frpc0.51.3版本。安装Frpc后,遇到几个致命问题。
1.luci-app-frpc界面保存并应用时,生成的配置信息完全正确,配置文件路径: /etc/config/frpc


注意事项:/etc/config/frpc 这个文件通常是由 LuCI 的图形界面程序(luci-app-frpc)在您保存配置时自动生成的。严格来说,/etc/config/frpc 这个路径是专门为 LuCI 界面服务的 UCI 配置文件。它和 frp 客户端默认读取的 frpc.ini 有所不同。luci-app-frpc 插件会读取这个 UCI 文件,并将其转换为 frp 客户端能识别的 frpc.ini 格式,再启动服务
2.点击保存和应用时,图形界面专用的/etc/config/frpc配置信息文件,配置无法自动同步到/var/etc/frpc.ini文件中,导致Frpc客户端无法读取frpc.ini正确配置,运行失败。
3.由于不是通过软件包安装的Frpc应用,界面上保存和应用后,进入到终端,只有手动启动脚本/etc/init.d/frpc restart/reload时,/etc/init.d/frpc启动器中的执行逻辑代码,才能读取/etc/config/frpc文件,写入配置信息到/var/etc/frpc.ini中。
4.在新的 LuCI 系统中,页面点击“保存并应用”时,后台是通过 RPCD 去调用 /etc/init.d/frpc reload。要让系统在修改网页时自动刷新配置文件,必须满足两个条件:
启动脚本必须向系统的 service 管理层注册 reload 响应能力
启动脚本中包含 service_triggers()(监听 /etc/config/frpc 变化)
Frpc安装教程:
# 1. 进入临时目录
cd /tmp
# 2. 下载 frp 0.51.3 的 Linux ARM64 原版程序
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_arm64.tar.gz
# 3. 解压
tar -zxvf frp_0.51.3_linux_arm64.tar.gz
# 4. 停止 frpc 服务
/etc/init.d/frpc stop 2>/dev/null
# 5. 替换系统现有的 frpc 主程序
cp -f /tmp/frp_0.51.3_linux_arm64/frpc /usr/bin/frpc
chmod +x /usr/bin/frpc
# 6. 验证版本
frpc -v
注意点:wget在线下载时,速度非常慢,可以用Window先下载安装包,再上传到N1的tmp目录下进行安装
Windows 10/11 系统终端已内置 scp 命令,无需安装任何软件即可直接上传。
语法格式
PowerShell
scp "Windows本地文件路径" 用户名@Linux_IP:Linux指定绝对路径
常用实例
1. 上传单个文件
打开 Windows 的 PowerShell(或 CMD),执行:
PowerShell
# 将本地 D 盘下的 test.txt 上传到 Linux 的 /www/wwwroot 目录下
scp D:\test.txt root@192.168.1.100:/www/wwwroot/
2. 上传整个文件夹(加 -r 参数)
PowerShell
# 将本地 D 盘的 my_project 文件夹整体上传到 Linux 的 /tmp 目录下
scp -r D:\my_project root@192.168.1.100:/tmp/
3. 如果 Linux 的 SSH 端口不是 22(注意大写 -P)
PowerShell
scp -P 2222 D:\test.txt root@192.168.1.100:/www/
提示:按回车后,终端会提示输入 Linux 服务器的密码,输入时屏幕不会显示字符,输完直接按回车即可。
针对以上4个坑的具体解决方案:
第一步:覆盖写入最新的 /etc/init.d/frpc 启动脚本
这段脚本包含了针对现代 OpenWrt 的 service_triggers 以及标准 reload_service:,复现下面的代码,在终端中执行,自动生成/etc/init.d/frpc启动脚本文件。
cat << 'EOF' > /etc/init.d/frpc
#!/bin/sh /etc/rc.common
START=90
STOP=10
USE_PROCD=1
CONF_FILE="/var/etc/frpc.ini"
generate_config() {
mkdir -p /var/etc
# 1. 解析 common 节点
local server_addr=$(uci -q get frpc.common.server_addr || echo "127.0.0.1")
local server_port=$(uci -q get frpc.common.server_port || echo "7000")
local token=$(uci -q get frpc.common.token)
local admin_port=$(uci -q get frpc.common.admin_port)
local admin_user=$(uci -q get frpc.common.admin_user)
local admin_pwd=$(uci -q get frpc.common.admin_pwd)
cat <<INICONTENT > $CONF_FILE
[common]
server_addr = $server_addr
server_port = $server_port
INICONTENT
[ -n "$token" ] && echo "token = $token" >> $CONF_FILE
[ -n "$admin_port" ] && echo "admin_port = $admin_port" >> $CONF_FILE
[ -n "$admin_user" ] && echo "admin_user = $admin_user" >> $CONF_FILE
[ -n "$admin_pwd" ] && echo "admin_pwd = $admin_pwd" >> $CONF_FILE
# 2. 遍历解析所有的 conf 规则节点
config_load frpc
config_foreach parse_conf conf
}
parse_conf() {
local section="$1"
# 跳过 common 节点
[ "$section" = "common" ] && return 0
# 使用 OpenWrt 标准 config_get 取值
local name type local_ip local_port remote_port enabled
config_get name "$section" name "$section"
config_get type "$section" type
config_get local_ip "$section" local_ip
config_get local_port "$section" local_port
config_get remote_port "$section" remote_port "0"
config_get enabled "$section" enabled "1"
# 如果节点未启用,或者关键参数为空,则跳过
[ "$enabled" = "0" ] && return 0
if [ -z "$type" ] || [ -z "$local_ip" ] || [ -z "$local_port" ]; then
return 0
fi
cat <<INICONTENT >> $CONF_FILE
[$name]
type = $type
local_ip = $local_ip
local_port = $local_port
remote_port = $remote_port
INICONTENT
}
start_service() {
generate_config
procd_open_instance
procd_set_param command /usr/bin/frpc -c $CONF_FILE
procd_set_param respawn
procd_close_instance
}
reload_service() {
generate_config
procd_send_signal frpc
start_service
}
# procd 监控配置变化,保存应用时自动重新生成 ini
service_triggers() {
procd_add_reload_trigger "frpc"
}
stop_service() {
ps | grep /usr/bin/frpc | grep -v grep | awk '{print $1}' | xargs kill -9 2>/dev/null
}
EOF
chmod +x /etc/init.d/frpc
第二步:更新 RPCD 服务缓存并开启服务注册
在终端运行以下命令,强制系统的 RPCD 服务重新扫描并认领 /etc/init.d/frpc 脚本:
# 1. 确保 frpc 已设为开机自启并注册到系统中
/etc/init.d/frpc enable
# 2. 重启 RPCD 服务(核心步骤:让 LuCI 网页端重新读取 init.d 脚本里的 triggers)
/etc/init.d/rpcd restart
# 3. 重启 frpc
/etc/init.d/frpc restart
验证
完成上述操作后,直接去 LuCI 界面新增或修改一个穿透规则,点击 保存并应用。
然后直接在终端执行:
cat /var/etc/frpc.ini
你就会发现无需手动 restart,/var/etc/frpc.ini 已经实时更新了!
=======================执行环境系统版本号===================
Kwrt 06.27.2026 by Kiddin’
OpenWrt Kernel: 6.18.36-ophub
Powered by LuCI main branch (27.161.22447~40792d9)
Kwrt 25.12-SNAPSHOT-06.27.2026
注意点:Nano PC-T4安装FriendlyWrt系统,配置Frpc时不存在上面兼容性问题,安装Frpc成功后,所有配置都已经正常。直接使用即可。