今天突然发现我的软路由上的qBittorrent的流量竟然被OpenClash代理了....这种浪费流量的行为是不可容忍的,于是我开始了折腾...
先说一下我的思路,在Linux系统中可以存在多个用户,每个用户对应一个UID,因此也是可以指定某个应用使用指定的用户UID运行的,既然有这个特性,我就去翻了翻文档,发现了一个这样的路由规则

是的,Mihomo内核路由规则支持UID匹配。。。所以可以直接给qbittorrent分配一个用户然后使用这个规则设置为直连!
正式教程
1.软件包准备
先执行以下指令
opkg update
opkg install shadow-useradd shadow-groupadd
确保你有这两个包,要用到。
2.设置用户和用户权限
执行这个命令来新增一个叫qbuser的用户组
groupadd qbuser
然后再在这个qbuser用户组里新增一个叫qbuser的用户
useradd -g qbuser -s /bin/false -d /var/run/qbittorrent qbuser
默认的 qBittorrent 是以 root 运行的,它的配置和下载目录权限都是 root,必须修改属主,否则新用户无法启动。
需要修改两个文件权限,一个是配置目录权限,一个是下载目录权限
(1)修改配置目录权限
通常Openwrt版本的qBittorrent的配置路径是/etc/qBittorrent,所以,只需要执行这个
chown -R qbuser:qbuser /etc/qBittorrent
(2)修改下载目录权限
我的下载目录是/mnt/sda1/downloads请自行替换成你的下载目录
chown -R qbuser:qbuser /mnt/sda1/downloads
3.修改启动脚本
OpenWrt 的服务是由 procd 管理的,我们需要修改 /etc/init.d/qbittorrent 文件。
(1)编辑脚本
nano /etc/init.d/qbittorrent
(2)找到 start_service() 函数,在 procd_add_reload_user_signal 附近添加一行 procd_set_param user qbuser。 修改后的样子应该类似下面这样:
start_service() {
config_load 'qbittorrent'
...
procd_open_instance
procd_set_param command "$PROG"
procd_append_param command --profile "$confdir"
# 添加下面这一行
procd_set_param user qbuser
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
(3)保存并重启服务
执行这个
/etc/init.d/qbittorrent restart
然后执行这个
ps | grep qbittorrent
观察第一列,如果已经从 root 变成了 qbuser,说明成功。
4.配置OpenClash
点开你的OpenClash的LUCI界面,到这个界面

执行这个命令查询用户UID
id qbuser
这是我的执行结果
root@Openwrt ~# id qbuser
uid=32769(qbuser) gid=32769(qbuser) groups=32769(qbuser)
可以看到UID是32769然后就可以新增下面的规则
#UID匹配
- UID,32769,DIRECT
#BT 常用 Tracker 自动直连(防止 Tracker 被代理导致黄灯)
- GEOSITE,category-public-tracker,DIRECT
然后拉到页面的最下面点应用配置,OpenClash会自动重启并应用配置,这时候就成功让qBittorrent流量直连了!