Deluge
Deluge 是一款功能齐全的 BitTorrent 应用程序,使用 Python 3 编写。它具有多种功能,包括但不限于:客户端/服务器模型、DHT 支持、磁力链接、插件系统、UPnP 支持、全流加密、代理支持和三个不同的客户端应用程序。当服务器守护进程运行时,用户可以通过控制台客户端、基于 GTK 的 GUI 或基于 Web 的 UI 连接到它。 完整的特性列表可以在此处查看。
安装
安装 deluge,并可选择安装 deluge-gtk。请务必阅读并安装 gtk 客户端 deluge-gtk 的可选依赖项,以启用桌面通知和 appindicator 通知。
守护进程
Deluge 采用客户端/服务器模型。服务器被称为守护进程,在后台运行,等待客户端(控制台、gtk 或基于 web 的)连接。 客户端可以断开连接,但守护进程会继续运行,传输队列中的 torrent 文件。
安装后,pacman 将创建一个非特权的 deluge 用户。此用户旨在运行提供的守护进程 /usr/bin/deluged
。 用户可以通过以下几种方式启动守护进程
- Systemd 系统服务(以 deluge 用户身份运行)。
- Systemd 用户服务(以其他用户身份运行)。
- 直接运行(以其他用户身份运行)。
deluged.service
) 运行 deluged
,因为 deluge 用户在主机系统上没有 shell 访问权限(受限帐户)或其他组关联。 除了以非特权 deluge 用户身份运行的安全优势外,系统服务还可以在启动时运行,而无需启动 Xorg 或客户端。系统服务
用户服务
用户服务将允许在 systemd --user
启动时运行 deluged
。 这可以通过创建一个用户服务文件来完成
/etc/systemd/user/deluged.service
[Unit] Description=Deluge Daemon After=network.target [Service] ExecStart=/usr/bin/deluged -d -P %h/.config/deluge/deluge.pid [Install] WantedBy=default.target
现在用户可以启动和启用 deluge 用户服务。
deluged
用户服务也可以放置在 $HOME/.config/systemd/user/
中。 有关用户服务的更多信息,请参见 systemd/User。
配置
可以通过任何客户端配置 Deluge,也可以通过简单地编辑位于 $HOME/.config/deluge/
中的 JSON 格式的配置文件来配置 Deluge。 $HOME 指的是运行 deluged
的用户的 home 目录。 这意味着如果守护进程以 deluge 用户身份运行,则默认的 home 目录是 /srv/deluge/
。
当使用 systemd deluged.service 时,共享目录需要被共享,以便系统上的其他用户能够访问数据。 一般策略是
- 将共享目录的所有者和组更改为 deluge:deluge。
- 将共享目录的文件权限和属性设置为至少 770。
- 将您的用户(或需要访问文件的用户)添加到 deluge 组。
使用 /mnt/torrent_data
的示例
# chown -R deluge:deluge /mnt/torrent_data # chmod 770 /mnt/torrent_data # usermod -a -G deluge YOURUSER
防火墙
Deluge 至少需要打开一个 TCP 和 UDP 端口,以允许传入连接进行做种。 如果 deluge 抱怨无法打开端口以进行传入连接,则用户必须打开要使用的端口。 在此示例中,端口 56881 到 56889 为 TCP 和 UDP 打开
# iptables -A INPUT -p tcp --dport 56881:56889 -j ACCEPT # iptables -A INPUT -p udp --dport 56881:56889 -j ACCEPT
位于 NAT 路由器/防火墙后面的用户必须设置相应的端口以进行转发。 也可以使用 UPnP,但这不适用于系统上的本地防火墙,因为它需要预定义的端口。
在许多默认配置中,当使用 iptables 并将连接跟踪 (conntrack) 设置为丢弃 “INVALID” 数据包时,有时大量合法的 torrent 流量(尤其是 DHT 流量)会被丢弃为 “invalid”。 这通常是由于 conntrack 的内存限制,或者对等方之间的数据包之间的时间间隔过长造成的(请参阅 [1] 和 [2])。 此问题的症状包括 torrent 无法做种,尤其是在 torrent 客户端已连续活动超过一两天的情况下,以及启用 DHT 时持续的低开销流量(在一次经验中,传入或传出都小于 3KiB/s),即使 deluge/libtorrent 已连续运行超过四十八小时并且许多 torrent 处于活动状态。 因此,即使将侦听端口设置为 ACCEPT,为了获得最佳性能,也可能有必要禁用所有 torrent 流量的连接跟踪(因为丢弃 INVALID 数据包的原因,例如 conntrack 的内存问题,可能会取代任何接受往返于这些端口的流量的规则)。
要完全关闭 torrent 的连接跟踪,请在 Deluge 中为传入和传出流量指定端口,例如,传入连接为 56881-56889,传出连接为 56890-57200。
然后发出以下命令(在替换相关端口范围后)
# iptables -t raw -I PREROUTING -p udp --dport 56881:57200 -j NOTRACK # iptables -t raw -I OUTPUT -p udp --sport 56881:57200 -j NOTRACK # iptables -t raw -I PREROUTING -p tcp --dport 56881:57200 -j NOTRACK # iptables -t raw -I OUTPUT -p tcp --sport 56881:57200 -j NOTRACK # iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT # iptables -I INPUT -p icmp --icmp-type 4 -j ACCEPT # iptables -I INPUT -p icmp --icmp-type 11 -j ACCEPT # iptables -I INPUT -p icmp --icmp-type 12 -j ACCEPT
ICMP 允许是可取的,因为一旦在这些端口上禁用连接跟踪,这些重要的 ICMP 消息(类型 3(目标不可达)、4(源抑制)、11(超时)和 12(参数问题))否则将被声明为 INVALID 本身(因为 netfilter 不知道它们与之关联的任何连接),并且它们可能会被阻止。
插件
完整的插件列表可以在 Deluge Wiki 上找到
ltConfig 是一个有用的插件,允许直接修改 libtorrent 设置并具有预设支持。
它提供了额外的设置,例如 announce_ip
(向 trackers 公告的 IP)、half_open_limit
(删除最大半开连接限制)以及更多可能的隐私和(做种)加速功能。
客户端
控制台
可以使用以下命令运行控制台客户端
$ deluge-console
输入 help
命令以获取可用命令的列表。
GTK
可以使用以下命令运行 GTK 客户端
$ deluge-gtk
或者
$ deluge
GTK 客户端有许多有用的插件
- AutoAdd - 监视目录中的 .torrent 文件
- Blocklist - 下载并导入 IP 黑名单
- Execute - 基于事件的命令执行
- Extractor - 完成后提取存档文件(注意随机高磁盘 I/O 使用率)
- Label - 允许将标签分配给 torrent,以及状态、tracker 和关键字过滤器
- Notifications - 为事件以及其他插件提供通知(电子邮件、弹出窗口、闪烁、声音)
- Scheduler - 基于每小时、每天限制活动 torrent 及其速度
- WebUi - 允许通过 GTK 客户端启动 Web UI
Web
正如上面提到的 deluge 守护进程一样,Web 客户端可以通过几种不同的方式启动
- Systemd 系统服务(以 deluge 用户身份运行)。
- Systemd 用户服务(以其他用户身份运行)。
- 直接运行(以其他用户身份运行)。
- Web 界面的默认密码是 deluge。
- Web 客户端提供与 GTK UI 相同的许多功能,包括插件系统。
- 建议对 Web 客户端使用 HTTPS,以防止中间人攻击。
- 用户可能会收到来自浏览器的警告,指出 SSL 证书不受信任。 在浏览器中为此添加例外以继续。 有关创建自己的证书的信息,请参见 OpenSSL 页面。
- 如果多个用户正在运行守护进程,则每个用户都需要更改默认端口 (8112)。
deluge-web.service
) 运行 deluge-web
,因为 deluge 用户在主机系统上没有 shell 访问权限(受限帐户)或其他组关联。 除了以非特权 deluge 用户身份运行的安全优势外,系统服务还可以在启动时运行,而无需启动 Xorg 或客户端。运行后,用户可以通过浏览 http://127.0.0.1:8112 连接到 Web 客户端,如果使用加密,则浏览 https://127.0.0.1:8112 和/或主机 IP 地址。
系统服务
Deluge 附带 deluge-web.service
,这是一个 systemd 系统单元,用于启动 Deluge Web UI。 Deluge Web UI 使用连接管理器,允许管理在同一主机或完全不同的主机下运行的多个 Deluge 客户端。 请记住启动并选择性地启用 deluged
服务,以允许 Web UI 连接到主机 Deluge 客户端。
用户服务
用户服务将允许在 systemd --user
启动时运行 deluge-web
。 这可以通过创建一个用户服务文件来完成
/etc/systemd/user/deluge-web.service
[Unit] Description=Deluge Web UI After=deluged.service [Service] ExecStart=/usr/bin/deluge-web -d --ssl [Install] WantedBy=default.target
现在用户可以启动和启用 deluge 用户服务。
deluge-web
用户服务也可以放置在 $HOME/.config/systemd/user/
中。 有关用户服务的更多信息,请参见 systemd/User。
无头设置
Deluge 在无头系统(通常称为种子盒)上非常有用,因为它采用客户端/服务器模型。 要在无头系统上设置 deluge,请按照上面所示设置守护进程。
创建用户
要允许远程与服务器交互,请在 $HOME/.config/deluge/auth
中创建一个用户。 例如
$ echo "delugeuser:p422WoRd:10" >> $HOME/.config/deluge/auth
- 创建的用户/密码不必与任何系统用户匹配,并且为了保持良好的安全实践,应该不要匹配!
- 此文件中的用户/密码不像 Web 客户端配置中那样进行哈希或加盐处理。
- 用户/密码必须与 /srv/deluge/.config/deluge/auth 中找到的用户/密码匹配,否则身份验证将失败。
数字 10 对应于 管理员 级别。有关其他值,请参阅下表
级别名称 | 级别值 |
---|---|
无 | 0 |
只读 | 1 |
普通 | 5 |
管理员 | 10 |
允许远程
默认设置禁止远程连接。更改 $HOME/.config/deluge/core.conf
中的 "allow_remote" 设置
"allow_remote": true
1. 如果 $HOME/.config/deluge/core.conf
不存在,则会在首次配置更改时自动创建,如果不存在,请通过 deluge-console
设置该值
config --set allow_remote true
2. 在服务运行时所做的更改不会被读取到守护进程中,因此,在对此文件进行更改之前停止服务。
防火墙
打开端口以进行远程访问。以下示例使用默认守护进程端口 (58846)
# iptables -A INPUT -p tcp --dport 58846 -j ACCEPT
有关防火墙规则的更多信息,请参阅 iptables。
如果需要从网络外部访问守护进程,则 NAT 路由器/防火墙后的用户必须转发端口。
连接
在控制台客户端中
connect <host>[:<port>] <user> <password>
在 GTK 客户端中,编辑 > 连接管理器 > 添加。
在 Web 客户端中,连接管理器 > 添加。
SSH 隧道
可以创建 SSH 隧道以在任何客户端上使用加密连接。这需要添加额外的环回地址,但这可以在启动时自动化。如果没有此步骤,连接将被视为本地连接。建立 SSH 隧道的实际命令无法自动化,因为它需要用户输入。有几种可能的方法可以做到这一点。
/etc/systemd/system/extra_lo_addr.service
[Unit] Description=extra loopback address Wants=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ip addr add 127.0.0.2/8 dev lo ExecStop=/sbin/ip addr del 127.0.0.2/8 dev lo [Install] WantedBy=multi-user.target
$ ssh -fNL 127.0.0.2:58846:localhost:58846 <ssh host>
端口 58846 应替换为 deluge 服务器正在运行的端口,<ssh host> 应替换为托管 deluge 和 SSH 服务器的服务器。
故障排除
没有名为 service_identity 的模块
在运行 deluged
或 deluge-console
时,可能会收到如下消息
:0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from <https://pypi.python.org/pypi/service_identity> and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected.
python-service-identity,python-twisted 的可选依赖项,可能缺失。请参阅 FS#43806。
Web ui .torrent 上传不起作用
在反向代理后运行 web ui 的用户需要允许嵌入才能使 .torrent 上传工作 (X-Frame-Options ALLOW)
找不到或不可执行的执行脚本
当使用 Execute 插件时,当 deluge 尝试执行脚本时,会记录以下错误消息
[ERROR ][deluge_execute.core :145 ] Execute script not found or not executable
如果 deluged
作为系统服务运行,请注意它可能无法访问其他用户的 home 目录。考虑将自定义脚本放在 /usr/local/bin/
中。
脚本权限问题可以作为 deluge
用户进行调试
[deluge]$ /path/to/script
意外关闭后,种子列表完全消失
这通常意味着状态文件已损坏。自上个十年以来,这 一直是一个间歇性问题。 应该有一个备份状态文件以及 deluge 配置文件文件夹中所有先前运行的种子的副本(对于 systemd 用户,这通常是 /srv/deluge/.config/deluge/state
),可以恢复以解决此问题。但是,它可能会很快被覆盖,特别是如果您在多次重启后才注意到您的种子列表。防止再次发生的建议措施是自动化每日备份状态文件和种子。
控制台不可用
如果您使用 deluge
用户运行 Deluge,则应通过 deluge
用户访问 deluge-console
,否则您可能会遇到各种 Python 异常和错误。
[deluge]$ deluge-console
或者
# deluge-console -c /srv/deluge/.config/deluge