Deluge

出自 ArchWiki

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。 用户可以通过以下几种方式启动守护进程

  1. Systemd 系统服务(以 deluge 用户身份运行)。
  2. Systemd 用户服务(以其他用户身份运行)。
  3. 直接运行(以其他用户身份运行)。
提示: 为了获得最高的安全性,建议通过 systemd 系统服务 (deluged.service) 运行 deluged,因为 deluge 用户在主机系统上没有 shell 访问权限(受限帐户)或其他组关联。 除了以非特权 deluge 用户身份运行的安全优势外,系统服务还可以在启动时运行,而无需启动 Xorg 或客户端。

系统服务

启动/启用 deluged.service

用户服务

警告: 如果多个用户正在运行守护进程,则每个用户都需要更改默认端口 (58846)。

用户服务将允许在 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 时,共享目录需要被共享,以便系统上的其他用户能够访问数据。 一般策略是

  1. 将共享目录的所有者和组更改为 deluge:deluge。
  2. 将共享目录的文件权限和属性设置为至少 770。
  3. 将您的用户(或需要访问文件的用户)添加到 deluge 组。

使用 /mnt/torrent_data 的示例

# chown -R deluge:deluge /mnt/torrent_data
# chmod 770 /mnt/torrent_data
# usermod -a -G deluge YOURUSER
注意: 当使用 usermod 更改组关联时,需要注销/登录才能使更改生效。

防火墙

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,但这不适用于系统上的本地防火墙,因为它需要预定义的端口。

注意: 可以将此限制为单个端口; 只需确保同时启用 TCP 和 UDP。

在许多默认配置中,当使用 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。

注意: 不建议使用 libtorrent 限制传入连接,因为这将限制与同一客户端保持多个连接的能力,即使对于不同的 torrent 也是如此。

然后发出以下命令(在替换相关端口范围后)

# 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 不知道它们与之关联的任何连接),并且它们可能会被阻止。

警告: 1024:65535 的端口范围会破坏每个 DNS 查询。

插件

完整的插件列表可以在 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 客户端可以通过几种不同的方式启动

  1. Systemd 系统服务(以 deluge 用户身份运行)。
  2. Systemd 用户服务(以其他用户身份运行)。
  3. 直接运行(以其他用户身份运行)。
注意
  • Web 界面的默认密码是 deluge
  • Web 客户端提供与 GTK UI 相同的许多功能,包括插件系统。
  • 建议对 Web 客户端使用 HTTPS,以防止中间人攻击。
  • 用户可能会收到来自浏览器的警告,指出 SSL 证书不受信任。 在浏览器中为此添加例外以继续。 有关创建自己的证书的信息,请参见 OpenSSL 页面。
  • 如果多个用户正在运行守护进程,则每个用户都需要更改默认端口 (8112)。
提示: 为了获得最高的安全性,建议通过 systemd 系统服务 (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
注意: 在 Deluge 1.35 中,这些值不起作用,但多用户选项正在开发中。

允许远程

默认设置禁止远程连接。更改 $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 的模块

在运行 delugeddeluge-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-identitypython-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

参见