整理qBittorrent使用笔记(docker)

github: https://github.com/qbittorrent/qBittorrent
official: https://www.qbittorrent.org/
docs: https://github.com/qbittorrent/qBittorrent/wiki/Installing-qBittorrent
Docker qbittorrent 服务一键部署:https://github.com/LawssssCat/Self-Host-qBittorrent(docker-compose)
(通过网页API定时检查并屏蔽迅雷等吸血客户端,以及定时更新tracker功能脚本)
文章目录
参考
- docker部署qBittorrent by 小白菜
- 关于Docker-qBittorrent 开启IPv6 的记录笔记 by 布丁加奶酪
- qBittorrent参数详细设置教程
- qBittorrent 设置教程
- BT下载教程 篇三:qBittorrent 全平台通用优化教程,适用于群晖 N1小钢炮
- BT下载教程 篇四:qbittorrent 设置补充说明及更换WEB UI
- qBittorrent 下载提速的正确姿势大全
正文
qBittorrent是功能最全的开源bt下载工具了 —— Why the name qBittorrent?
功能 —— Why use qBittorrent instead of another client?
- 协议:支持bt(torrent)、pt、磁力(Magnet)
- 寻址:内置tracker、DHT、Peer Exchange
- 传输:Full encryption、支持下载排程
- 其他:支持ipv6(国内重要功能)、IP过滤、RSS订阅、种子搜索(省事)、分类浏览
工作原理
理解了bittorrent网络的工作原理,对于后面设置tracker、监听端口、announce_to_all_trackers等设置就不言自明了。
qb工作流程 - 下载:
- 我们的一个下载资源请求称为一个torrent;
- torrent开启后,qb(我们)会访问tracker服务器;
- tracker告诉qb(我们)哪些peers(别的qb客户端)有这个资源;
- 于是qb(我们)直接向那些peers请求资源。
qb工作流程 - 上传:
- 相对的,当qb(我们)把资源下载下来后会向tracker公告,告诉tracker我们有这个资源
- 当peers(别的qb客户端)需要这个资源时,tracker会告诉它们我们qb有这个资源
- 那些peers(别的qb客户端)就会访问我们的qb(通过我们qb开放的”监听端口“访问)
部署
使用docker-compose部署
使用linuxserver的docker镜像: https://hub.docker.com/r/linuxserver/qbittorrent
github: https://github.com/linuxserver/docker-qbittorrent
docker-compose.yml
version: "2"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai # 你的时区
- UMASK_SET=022 # (可选)默认022
- WEBUI_PORT=8081 # WEB UI 端口
volumes:
- /tmp/yourname/qbittorrent/config:/config
- /tmp/yourname/qbittorrent/d:/downloads
ports:
- 6881:6881 # 最好更改,否者某些PT站点会屏蔽6881端口,为了避免被ISP屏蔽。⚠修改后,要在web界面同步修改
- 6881:6881/udp
- 8081:8081 # 考虑到CSRF和映射问题,内外端口必须与WEBUI_PORT一致。
restart: unless-stopped
$ ls
docker-compose.yml
$ docker-compose up # -d 后台
qbittorrent | [migrations] started
qbittorrent | [migrations] no migrations found
qbittorrent | ───────────────────────────────────────
qbittorrent |
qbittorrent | ██╗ ███████╗██╗ ██████╗
qbittorrent | ██║ ██╔════╝██║██╔═══██╗
qbittorrent | ██║ ███████╗██║██║ ██║
qbittorrent | ██║ ╚════██║██║██║ ██║
qbittorrent | ███████╗███████║██║╚██████╔╝
qbittorrent | ╚══════╝╚══════╝╚═╝ ╚═════╝
qbittorrent |
qbittorrent | Brought to you by linuxserver.io
qbittorrent | ───────────────────────────────────────
qbittorrent |
qbittorrent | To support LSIO projects visit:
qbittorrent | https://www.linuxserver.io/donate/
qbittorrent |
qbittorrent | ───────────────────────────────────────
qbittorrent | GID/UID
qbittorrent | ───────────────────────────────────────
qbittorrent |
qbittorrent | User UID: 1000
qbittorrent | User GID: 1000
qbittorrent | ───────────────────────────────────────
qbittorrent |
qbittorrent | [custom-init] No custom files found, skipping...
qbittorrent | WebUI will be started shortly after internal preparations. Please wait...
qbittorrent | [ls.io-init] done.
打开 WEB UI 管理界面: http://<域名>:8081 (打不开检查网络、防火墙)
默认用户名/密码:admin/adminadmin (登录后记得更改)

设置
设置:修改语言
save生效

设置:添加trackers优化下载速度(重要!)
不设置这一步是没有下载速度的,就好比上网不插网线不连wifi一样。
下面分享一些好用的trackers:
- GitHub - ngosang/trackerslist: An updated list of public BitTorrent trackers
- XIU2/TrackersListCollection
- Stable Trackers List - newTrackon
- ACG领域的开放式Tracker
- animeTrackerList: 动漫磁性链接加速方案
💡 注意:
由于UDP协议的Tracker服务器容易被ISP干扰,效果并不好。建议优先选择HTTPS的Tracker服务器,HTTP的次之。
设置:开启announce_to_all_trackers(总是向同级的所有Tracker汇报)
在qBittorrent 的选项->高级,确认“总是向同级的所有Tracker汇报”、“总是向所有等级的Tracker汇报”选中。
之所以在添加Tracker服务器列表后,很多Tracker服务器都处于未联系状态,很多原因与此选项有关。缺省情况下qBittorrent只会使用第一个Tracker服务器。
关于
announce_to_all_trackers(总是向同级的所有Tracker汇报)的技术解释,可以参考 这篇文章 ,说得比较清楚。
设置:修改监听端口

💡 注意:
如果使用docker部署,该端口一般不需要修改。
- ipv4:如果要修改端口,只需要修改暴露出去的端口即可
- ipv6:要同步修改映射端口
设置:可访问的监听端口
一般qb不设置在路由器上,通过路由器nat后,qb开放的监听端口很可能无法被外部访问。
这会导致你的资源无法上传给别人;换个角度,别人会以为你在吸血,骂你畜生,把你的地址屏蔽了,以后你要资源时候不给你。
所以开放一个可访问的监听端口很重要。
检查服务端口是否可被外网访问: https://portchecker.co/checking
# 方案一:端口转发(docker)
网络拓扑
outter peers
|
ISP
|
| [port filter]
|
my router (33.33.33.33 9999)
|
| [port forward]
| [nat]
|
my pc (192.168.1.22 8888)
|
| [port forward by docker -p]
| [nat]
|
my qbittorrent (10.0.2.100 6880)
两点要关注
- 公网ip,确保路由器拨号获得的ip是公网的(通过搜索“当前ip”,对比是否与路由器上一致,一致即公网ip),否则没办法
- 防护墙,把监听端口打开(iptable设置filter;firewalld设置add-port)
- 端口转发,把路由器上的端口请求转发到qb服务器上(iptable设置forward;socat)
# 方案二:启用ipv6(docker)
没有公网ip的用户的唯一选择
⚡注意:
docker版本要求大于20.01
网络拓扑
outter peers
|
ISP
|
| [port filter]
|
my router (pppoe 2000:xxxx:xxxx:xxxx::1/64 9999)
|
my pc (pppoe 2000:xxxx:xxxx:xxxx::100/64 9999)
|
| [port forward by docker -p]
|
my qbittorrent (dhcp ipv6 2000:xxxx:xxxx:xxxx:xx00::33/66 6880)
## 方案一:host方案
---
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
...
network_mode: "host"
## 方案二:映射方案
一般,docker默认不开启ipv6
/etc/docker/daemon.json
{
"experimental": true,
"ipv6": true,
"ip6tables": true,
"fixed-cidr-v6": "2607:f0d0:1002:51::/66"
}
其中:
ip6tables—— 由 Docker 自动配置 IPv6 的防火墙规则。默认falsefixed-cidr-v6—— 指定子网前缀,划分子网段。根据实际情况更改。
$ systemctl restart docker
## 方案二:映射方案 for docker compose
一般docker启用ipv6后,docker compose也会启用
如果另外配置网络的话,必须选择与默认daemon.json不同的 IPv6 子网段
networks:
example:
enable_ipv6: true
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
config:
- subnet: 172.23.0.0/16
- subnet: "2607:f0d0:1002:51:4000::/66"
gateway:2607:f0d0:1002:51:4000::1
## 检查是否开启ipv6
# 检查docker是否开启ipv6
$ docker network inspect bridge
# 测试连接连接状态
$ docker run --rm -it busybox ping -6 -c4 www.google.com
$ docker run --rm -it busybox ip addr

# 验证端口是否被映射出去的方法
在web ui的底部有图标显示端口开启情况。
如果端口被请求了,会变成🌏图标表示开启成功,否者是🔥图标表示不成功or未被请求

如何请求端口?
- 直接找个资源下一下即可
- 通过这个网站测试(不需要webui提示,也能直接找到是否联通)
https://portchecker.co/canyouseeme
设置:反吸血、自动更新tracker
对于这两个功能,qbittorrent没有提供。因此,网上有很多围绕这两个功能的扩展。
经常被提到的是这两个项目:
- github - c0re100/qBittorrent-Enhanced-Edition
- github - SuperNG6/Docker-qBittorrent-Enhanced-Edition (c0re100/qBittorrent-Enhanced-Edition的docker版本)
这两个都是在qbittorrent的源码基础上扩展,然后重新编译的。
虽然现在对比改动很很方便,但个人不太喜欢。

其实基于qBittorrent web api提供的功能基础上加些脚本就可以实现这两个功能了。
这是我的脚本: https://github.com/LawssssCat/Self-Host-qBittorrent
(结合docker compose可以实现一键部署)
# 功能介绍:反吸血功能介绍
- 关于吸血的文章参考: Is there any way to block a specific client (Thunder)? #10258 (都臭到国外了)
- 关于反吸血工具的整理:https://github.com/LawssssCat/Self-Host-qBittorrent/issues/2
下面介绍反吸血功能的探究过程:
其实官方ui也自带了“反吸血”功能: 选项》高级》上传连接策略》反吸血

它的具体策略是这样的: https://github.com/arvidn/libtorrent/blob/master/src/choker.cpp
// the anti-leech seeding algorithm is based on the paper "Improving
// BitTorrent: A Simple Approach" from Chow et. al. and ranks peers based
// on how many pieces they have, preferring to unchoke peers that just
// started and peers that are close to completing. Like this:
// ^
// | \ / |
// | \ / |
// | \ / |
// s | \ / |
// c | \ / |
// o | \ / |
// r | \ / |
// e | \ / |
// | \ / |
// | \ / |
// | \ / |
// | \ / |
// | V |
// +---------------------------+
// 0% num have pieces 100%
这只是从特征上防吸血(anti-leech),但实际上会上传更多的比重给那些吸血者(还是我理解错了?光看文字,没看代码)。 https://github.com/qbittorrent/qBittorrent/issues/10258#issuecomment-460659498
【因此,不建议开上述默认反吸血算法的】
下面是github关于这个问题的讨论
- 19年5月 关于上述的问题,在这次pr中,有NAVrasZ提交了优化策略: https://github.com/arvidn/libtorrent/pull/3833
- 19年11月 优化版本(
qbittorrent 4.2.0RC with libtorrent 1.2.2 released)使用一段时间,效果不理想 https://github.com/qbittorrent/qBittorrent/issues/10258#issuecomment-557840143 - 20年1月 整理了三篇文献,关于算法改进的 https://github.com/arvidn/libtorrent/issues/4217#issuecomment-570173969
由于无法明确识别迅雷这dogB的特征,官方并没给出解决方案。于是有很多基于client名称屏蔽peers的脚本出现
(均是调用这个web api: banPeers)
- https://github.com/Jorman/Scripts/blob/master/qBittorrentHardlinksChecker.sh
- https://github.com/fenglyu/qBittorrentBanner/blob/main/main.go
- https://github.com/empty-233/qbittorrent-ban/
- https://github.com/catsout/qb-helper
- https://github.com/xxxsen/qbapi
- https://github.com/wetor/AnimeGo/tree/master/third_party/qbapi
# 功能介绍:自动更新tracker
https://github.com/Jorman/Scripts/blob/master/AddqBittorrentTrackers.sh

/script/qbittorrent_webapi_tracker_cli.sh -m add -H "%I"
会在添加torrent时,从订阅中获取trackers,然后添加到那个torrent中

设置:查询功能
https://github.com/qbittorrent/search-plugins
todo
设置:匿名模式
todo

设置:魔法过滤
BT的流量不要使用魔法。如果使用魔法要想办法过滤。
原因:
- 没必要,而且自己的蓝条(魔法流量)会跑的很快
- 如果魔法过于异常,被世人察觉,魔法总部可能会因此消失
设置:文件名过滤 ❗❗❗
这个非常重要。
原因: 纯属自己猜的!
从bt的机制上,存在这种恶意做种的情况:
首先,在一个大文件(用户正真需要的文件)旁放很多小文件(宣传内容),把这些文件打包成一个种子分享出去,起一个吸引人的名字,诱导用户下载,并且在上传的时候故意把大文件传一半不传(如删掉)。
那么,接收文件的用户就会因为迟迟收不到完整的文件而长时间开着这个torrent。同时,如果该用户愿意上传,那么该torrent的文件可以以指数级的速度传播。
最后,回顾这个过程那些文件被完整的传播了?那些小文件(宣传的内容)!!!
相信用惯torrent的朋友已经能想象到画面了,这是我们使用一些偏老的torrent时经常遇到的情况。真实情况有没有人这样恶意做种?我不敢想象。
如何科学的解决?我还不知道,只知道用屏蔽文件名的粗暴方式将不要的文件排除。
如有更好的解决方案,望告知!
其他
nginx
https://github.com/qbittorrent/qBittorrent/wiki/NGINX-Reverse-Proxy-for-Web-UI
更多详细设置教程
参考qBittorrent参数详细设置教程、qBittorrent 设置教程
- 👉 http://www.ptyqm.com/26966.html —— 非常详细
web ui
client —— 非gui访问工具
alternate web ui —— web api 访问前端
- https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs
- https://github.com/CzBiX/qb-web
change web ui —— 更改 web 前端
https://github.com/qbittorrent/qBittorrent/wiki/Alternate-WebUI-usage
web api
小结
- cli 有用,可以编写脚本
- web ui 没用,花里胡哨,版本升级可能还有适配问题。建议使用原版ui
结合Radarr/Sonarr
todo
更多推荐
所有评论(0)