优化 FNOS 下载体验:手动代理系统内置的 qB 模块

发表于:2024-10-25 12:04:37 系统攻略 1497

<br /> <br />

FNOS-qb-proxy 使用教程

FNOS 默认关闭了下载器的 WebUI,并采用动态密码,这让外部的应用程序难以接入。 在本文中,我将详细讲解如何通过 fnos-qb-proxy 代理访问 FNOS 中的 qBittorrent 下载器。 通过使用 fnos-qb-proxy,我们能够绕过这些限制,实现 qBittorrent WebUI 的访问,方便使用诸如 MoviePilot、NasTools、PeerBanHel.per 等工具,同时不影响 FNOS 自身的下载器运行。

背景

【优化 fnOS 下载体验:防范吸血客户端的策略与建议】 https://club.fnnas.com/forum.php?mod=viewthread&tid=3094

FNOS 系统提供了下载器功能,使用了 qBittorrent 和 Aria2 作为后台支持。但系统默认关闭了 qBittorrent 的 WebUI,且密码是动态生成的,这使得一些外部工具(例如 MoviePilot、NasTools、PeerBanHel.per 等)无法直接与 FNOS 下载器交互。

为什么需要 FNOS-qb-proxy?

在 FNOS 中,下载任务是通过内部的机制进行管理的,外部应用程序很难直接接入。例如:

  • MoviePilot 中下载功能需要通过 qBittorrent 接口添加任务。
  • PeerBanHel.per 中限制吸血鬼客户端需要 qBittorrent 接口。

由于 qBittorrent WebUI 被 FNOS 隐藏,不直接对端口进行暴露,外部应用无法直接管理 qB 下载器。

FNOS-qb-proxy 简介

fnos-qb-proxy 是一个用 Go 语言编写的小型代理程序,允许用户通过代理访问 FNOS 内部的 qBittorrent 下载器的 WebUI。该代理可以:

  • 通过指定的 Unix Domain Socket (UDS) 连接到 qBittorrent。
  • 提供外部的 WebUI 访问。
  • 支持设定访问密码和修改端口。

项目地址

https://github.com/xxxuuu/fnos-qb-proxy

安装与配置

手动安装

  1. 下载可执行文件

首先下载预编译的二进制文件到 FNOS 主机上:

wget https://github.com/xxxuuu/fnos-qb-proxy/releases/download/v0.1.0/fnos-qb-proxy_linux-amd64 -O fnos-qb-proxy
  1. 赋予可执行权限
chmod +x fnos-qb-proxy
  1. 运行代理 使用 --uds 参数指定 qBittorrent 监听的 Unix domain socket 路径(通常在 /home/{user}/qbt.sock),并启动代理:
./fnos-qb-proxy --uds "/home/$USER/qbt.sock" -p "fnosnb" -port 8086

启动后,可以通过访问 http://{host}:8086 来进入 qBittorrent 的 WebUI。

默认用户名为 admin,使用 -p 参数设置了密码,则只有该密码可以登录。如果不需要密码,可以去除 -p "fnosnb"

配置 Systemd 服务

为了使代理程序在后台运行并随系统启动,可以将其配置为 Systemd 服务。

  1. 移动二进制文件 将 fnos-qb-proxy 二进制文件移动到 /usr/bin 目录:
sudo mv fnos-qb-proxy /usr/bin/
  1. 创建 Systemd 服务文件 在 /etc/systemd/system/ 目录下创建 fnos-qb-proxy.service 文件,并写入以下内容, 并将$USER更改为你的用户名
[Unit]
Description=fnOS qBittorrent Proxy Service
After=dlcenter.service
Requires=dlcenter.service

[Service]
RestartSec=5
ExecStartPre=/bin/sleep 5 
ExecStart=/usr/bin/fnos-qb-proxy --uds "/home/$USER/qbt.sock" -p "fnosnb" -port 8086 -d
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now fnos-qb-proxy
  1. 检查服务状态 通过以下命令查看服务是否正常运行:
sudo systemctl status fnos-qb-proxy

正常输出示例:

● fnos-qb-proxy.service - fnOS qBittorrent Proxy Service
    Loaded: loaded (/etc/systemd/system/fnos-qb-proxy.service; enabled; preset: enabled)
    Active: active (running) since Mon 2024-10-21 23:09:34 CST; 4s ago
  Main PID: 1801543 (fnos-qb-proxy)
     Tasks: 6 (limit: 9495)
    Memory: 6.0M
       CPU: 122ms
    CGroup: /system.slice/fnos-qb-proxy.service
            **─1801543 /usr/bin/fnos-qb-proxy --uds /home/admin/qbt.sock

这表明服务正在正常运行。

目前已知问题

MoviePilot 刷流插件

当 MoviePilot 的刷流插件通过 该项目转发的 API 添加下载任务后,可能会导致 WebUI 无法刷新下载数据,影响 FNOS 的下载器的任务刷新。这时需要重启 dlcenter 服务。

sudo systemctl restart dlcenter

或者通过 sudo crontab -e,添加定时任务临时解决该问题。

0 */12 * * * /bin/systemctl restart dlcenter.service # 每12小时自动重启

目前观测到以下方法可能可以改善该问题:

  1. 在 qB WebUI 设置中的 WebUI 去除勾选 启用“点击劫持”保护启用跨站请求伪造 (CSRF) 保护启用 Host header 属性验证
  2. 在修改好之后,每次登陆WebUI界面后,下载器都可正常刷新数据。直至认证过期。

正在考虑通过便携脚本自动化执行该操作。 欢迎广大论坛网友提供PR共同解决该问题。

最后

希望 FNOS 官方在未来版本中能够开放下载器的 qBittorrent Web API,进一步提升用户的下载管理体验。


此文部分由ChatGPT编写,有时间再转义成人话

收藏
送赞 4
分享

发表回复

评论列表(15)

真厉害,太棒了
2024-10-25 16:17:46 回复
8086端口访问不了啊,提示502
2024-10-26 18:50:43 回复
看看这个文件存不存在 /home/$USER/qbt.sock  详情 回复
2024-10-26 21:58
看看这个文件存不存在
/home/$USER/qbt.sock
2024-10-26 21:58:21 回复
这个服务运行后,PeerBan那边只需要加代理8080端口号就可以直接连接并运作了吗
我就说咋上传一堆看着吸血的,又不好排查屏蔽
2024-10-29 15:04:33 回复
看具体代理出来的端口号,我帖子里的命令是8086,github里的命令是8080。代理脚本跑完,就可以用peerban来管理了  详情 回复
2024-10-29 15:08
看具体代理出来的端口号,我帖子里的命令是8086,github里的命令是8080。代理脚本跑完,就可以用peerban来管理了
2024-10-29 15:08:13 回复
你好现在还能弄吗?  详情 回复
2024-11-23 23:59
没加指定端口按默认跑的,pbh运行正常了,感谢分享教程  详情 回复
2024-10-29 16:24
没加指定端口按默认跑的,pbh运行正常了,感谢分享教程
2024-10-29 16:24:06 1 回复
顶一顶顶一顶
2024-11-2 23:12:17 回复
/home/knot/qbt.sock: connect: no such file or directory fetch qbittorrent-nox password: no qbittorrent-nox process found 这个文件 时不时消失是什么情况?  详情 回复
2024-11-9 21:59
/home/knot/qbt.sock: connect: no such file or directory
fetch qbittorrent-nox password: no qbittorrent-nox process found

这个文件 时不时消失是什么情况?
2024-11-9 21:59:34 回复
本帖最后由 rehack 于 2024-11-22 12:10 编辑

admin@fnOS:~$ sudo systemctl status fnos-qb-proxy
[sudo] password for admin:
● fnos-qb-proxy.service - fnOS qBittorrent Proxy Service
     Loaded: loaded (/etc/systemd/system/fnos-qb-proxy.service; enabled; preset: enabled)
     Active: active (running) since Fri 2024-11-22 11:51:26 CST; 8min ago
    Process: 1562 ExecStartPre=/bin/sleep 5 (code=exited, status=0/SUCCESS)
   Main PID: 1601 (fnos-qb-proxy)
      Tasks: 4 (limit: 2326)
     Memory: 8.2M
        CPU: 11.304s
     CGroup: /system.slice/fnos-qb-proxy.service
             **─1601 /usr/bin/fnos-qb-proxy --uds "/home/\$USER/qbt.sock" -p password -port 8027 -d

Nov 22 11:51:21 fnOS systemd[1]: Starting fnos-qb-proxy.service - fnOS qBittorrent Proxy Service...
Nov 22 11:51:26 fnOS systemd[1]: Started fnos-qb-proxy.service - fnOS qBittorrent Proxy Service.
Nov 22 11:51:26 fnOS fnos-qb-proxy[1601]: proxy running on port 8027
Nov 22 11:51:43 fnOS fnos-qb-proxy[1601]: request: /
Nov 22 11:51:43 fnOS fnos-qb-proxy[1601]: 2024/11/22 11:51:43 http: proxy error: dial unix /home/$USER/qbt.sock: connect: no such file or dire>

admin@fnOS:~$ ls /home/admin/
aria2  aria2.sock  fnos-qb-proxy  qbt  qbt.sock
admin@fnOS:~$ ls /home/$USER
aria2  aria2.sock  fnos-qb-proxy  qbt  qbt.sock

/home/$USER/qbt.sock文件是存在的也会报错
2024-11-22 12:05:24 回复
感谢反馈,我改一改  详情 回复
2024-11-24 23:05
我知道了 fnos-qb-proxy.service里不能识别环境变量$USER,我把环境变量直接改成用户名就好了。 应该还可以配置Environment=你的环境变量名=变量值  详情 回复
2024-11-22 12:44
我知道了
fnos-qb-proxy.service里不能识别环境变量$USER,我把环境变量直接改成用户名就好了。
应该还可以配置Environment=你的环境变量名=变量值
2024-11-22 12:44:29 回复
你好现在还能弄吗?
2024-11-23 23:59:28 回复
可以, 按帖子来就行  详情 回复
2024-11-24 23:06
感谢反馈,我改一改
2024-11-24 23:05:03 回复
可以, 按帖子来就行
2024-11-24 23:06:50 回复
最近也在改良xxxuuu的项目,我很好奇,你没有遇到sock不能持久化的问题吗?类似9楼的情况。当飞牛nas的下载界面关闭10分钟后,自动终止了qb进程导致sock失效。这个问题是怎么解决的?
2024-11-25 00:01:39 回复
我和项目作者都没有这种问题, 可能是我的下载器一直有种子在做种吧  详情 回复
2024-11-26 22:58
我和项目作者都没有这种问题, 可能是我的下载器一直有种子在做种吧
2024-11-26 22:58:27 回复