当然可以!您提供的这个 /etc/init.d/frpc
脚本是一个典型的、设计良好的 UCI 兼容初始化脚本。基于它来创建多个 FRPC 实例副本是完全可行且非常合适的方法。
这个脚本的核心逻辑是:
- 从 UCI 配置文件
/etc/config/frpc
中读取设置 - 动态生成临时的 frpc 配置文件到
/var/etc/frpc.ini
- 使用 procd 启动 frpc 进程
我们要做的就是创建多个这样的脚本,让每个脚本去读取不同的 UCI 配置文件。
具体操作步骤
假设我们要创建两个副本:frpc1
和 frpc2
第一步:复制创建初始化脚本
- 创建第一个副本脚本:
cp /etc/init.d/frpc /etc/init.d/frpc1
- 创建第二个副本脚本:
bash cp /etc/init.d/frpc /etc/init.d/frpc2
第二步:修改每个副本脚本的关键变量
我们需要修改每个脚本中的 NAME
变量,让它指向不同的 UCI 配置文件名。
编辑 /etc/init.d/frpc1
:
vi /etc/init.d/frpc1
找到这一行:
NAME=frpc
修改为:
NAME=frpc1
保存并退出。
编辑 /etc/init.d/frpc2
:
vi /etc/init.d/frpc2
同样找到并修改:
NAME=frpc2
保存并退出。
这个修改的意义:现在 frpc1
服务会去读取 /etc/config/frpc1
配置文件,而 frpc2
服务会去读取 /etc/config/frpc2
配置文件。
第三步:创建对应的 UCI 配置文件
- 复制默认的 UCI 配置:
cp /etc/config/frpc /etc/config/frpc1 cp /etc/config/frpc /etc/config/frpc2
- 分别编辑这两个配置文件:
现在您可以用熟悉的uci
命令或者直接编辑文件的方式来为每个实例配置不同的远程 FRP 服务器。 配置/etc/config/frpc1
(连接第一个服务器):uci set frpc1.@init[0].server_addr=frps1.example.com uci set frpc1.@init[0].server_port=7000 uci commit frpc1
配置/etc/config/frpc2
(连接第二个服务器):uci set frpc2.@init[0].server_addr=frps2.example.com uci set frpc2.@init[0].server_port=7000 uci commit frpc2
您还需要在每个配置文件中设置各自的代理规则(config conf
部分)。
第四步:设置权限并启用服务
# 设置脚本可执行权限
chmod +x /etc/init.d/frpc1
chmod +x /etc/init.d/frpc2
# 启用服务(开机自启)
service frpc1 enable
service frpc2 enable
# 启动服务
service frpc1 start
service frpc2 start
第五步:检查服务状态
# 检查进程
ps | grep frpc
# 查看日志
logread -e frpc
# 检查服务状态
service frpc1 status
service frpc2 status
额外提醒和技巧
- 临时配置文件路径:
原脚本中conf_file="/var/etc/$NAME.ini"
意味着:frpc1
的临时配置文件在/var/etc/frpc1.ini
frpc2
的临时配置文件在/var/etc/frpc2.ini
这很好,避免了冲突。
- LuCI 界面显示:
如果您安装了luci-app-frpc
,它可能仍然只识别原始的frpc
服务。但您现在可以通过命令行完美管理frpc1
和frpc2
。这是最稳定可靠的方式。 - 如果需要更多实例:
只需重复上述步骤:复制脚本 → 修改NAME
变量 → 创建对应的 UCI 配置文件。
总结
您提供的这个初始化脚本是完美支持多实例的,因为它使用了 $NAME
变量来动态决定配置文件的路径。您只需要:
- 复制脚本并修改其中的
NAME
变量 - 复制 UCI 配置文件并分别配置不同的服务器地址
- 像管理独立服务一样管理
frpc1
和frpc2
这种方法结合了命令行的可靠性和UCI配置的便捷性,是在OpenWrt上实现多FRP服务器代理的最佳实践之一。
发表回复