在网上寻找资源的时候时不时可能遇到一些种子链接,必须通过 BitTorrent 等工具才能下载,但由于国内的 ip 地址较少,而且一般使用种子分享的资源体积都比较巨大,直接使用本地下载耗费很多无用的时间。我们如果自己搭建一个能长时间运行的服务器来代替我们下载,不仅不占用自己电脑的空间,还能 24h 不间断下载,节约了大量时间空间成本。

1 BT 种子下载原理

许多资源,尤其是蓝光源盘等大型资源,一般都是通过 BT 种子的方式来下载传输,具体而言大致分为以下几点:

1.1 种子文件

在这里我们假设等待分享的资源是 A 文件,将这个资源存放在服务器中并做成种子,所谓的种子,一般即指的是 torrent 文件,其中包含了

  • 全部文件及文件夹的名称。
  • 全部文件分块的索引信息和 Hash 校验码。假设 A 的大小为 1GB,分块大小为 1MB,那么就会分成 1024 块;每一块都有对应的一个 Hash 校验码,以确保从服务器中下载的块与源文件 100% 相同,增强安全性。
  • Tracker 地址。Tracker 地址是实际上是一个问询服务器,当有服务器向其发出请求时,它会返回当前有哪些服务器上有所需要的文件,这样这个服务器就可以直接转而向那些服务器请求文件了。
  • 其他辅助信息。比如制作种子的软件等。

1.2 下载种子

所谓的 BT 下载,实际上就是下载 torrent 文件,然后解析其中的文件内容和 Tracker 地址等,然后经由 Tracker 地址找到拥有一部分或者全部文件的服务器,再向这些服务器发起请求。这时候文件分块的好处就体现出来了。由于分块很小,我们可以从不同的服务器中下载不同的块,最后只要把他们“拼装”成一个完整的文件就可以了。因此只要能找到拥有资源的服务器,就算他们并没有一个完整的资源,只要他们缺省的块“互补”的话,我们一样能下载的了整个资源。

1.3 做种

所谓的做种,即是他人通过自己的服务器下载资源。在下载的过程中实际上我们就已经开始给别人做种了,因为这时候我们已经下载下来的块可以供别人下载。而在下载完成后,如果设置了做种时间等,则可能还会继续提供给别人下载一段时间。这个过程实际上是非常重要的,倘若没人做种,这个种子就失效了。一般建议做种率在 1.0 以上,不过前提还是拥有足够的带宽。

1.4 优势与不足

BT 种子的优势很明显,就是分享方便,而且如果一个资源有很多服务器都有,那么下载的速度就会非常快,因为可以从各个不同的服务器上获取。而由于文件经过严格的校验,其安全性也很高。

与此同时也有它的不足,最致命的便是找不到有资源的服务器,那么此时网速再好也拯救不了了。这就牵扯出另外一个弱点,时效性。时间过于久远的资源,或者体积过大的资源,由于下载的人较少,做种的人更少,很容易出现下不下来的情况。

2 搭建 BT 站

说完原理,现在就直奔主题,着手搭建一个 BT 站。这里选择使用 transmission 来搭建,比较方便快捷。

2.1 安装 transmission

在 Ubuntu 系统下,可以直接通过 apt 安装的 transmission,但安装的可能不是最新版,以下通过 transmission 官方源来安装:

1
2
3
$ add-apt-repository ppa:transmissionbt/ppa
$ apt update
$ apt install transmission-daemon

这时 transmission 就已经安装好了,此时先停止 transmission

1
$ systemctl stop transmission-daemon.service

再去修改配置文件,配置文件存放在 /var/lib/transmission-daemon/.config/transmission-daemon/settings.json,以下贴出我的配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "http://www.example.com/blocklist",
    "cache-size-mb": 4,
    "dht-enabled": false,
    "download-dir": "/var/lib/transmission-daemon/Downloads",  // 此处为默认下载地址,如需修改见下方说明
    "download-limit": 100,
    "download-limit-enabled": 0,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/var/lib/transmission-daemon/Downloads",
    "incomplete-dir-enabled": false,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 1,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,  // 强烈建议开启,不然任何人都可以访问
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": false,  // 关闭白名单才能随意访问
    "rpc-password": "password",  // 这里修改成自己的密码,保存后会自动进行加密处理
    "rpc-port": 9091,  // 端口号
    "rpc-url": "/transmission/",
    "rpc-username": "username",  // 填写用户名
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,  // 关闭白名单才能随意访问
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": false,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true
}

重新开启 transmission:

1
$ systemctl start transmission-daemon.service

然后在浏览器中进入 http://{ip_address}:9091 并输入密码就可以进入 transmission 的主页面了。

2.2 修改默认下载地址

由于 transmission 并不是以 root 权限运行,而是以用户 debian-transmission 的身份运行的,因此在配置中修改默认下载地址之前,需要提前建立一个文件夹,并将其权限赋予 debian-transmission,以下举例说明,在 root 权限下执行:

1
2
3
4
$ cd /home  # 创建新文件夹,作为下载地址
$ mkdir transmission/
$ chown -R debian-transmission:debian-transmission transmission/  # 修改拥有者
$ chmod -R 755 transmission/  # 修改权限

2.3 使用 Nginx 反向代理

每次输入 http://ip_address:9091 确实比较麻烦,这里通过 Nginx 反向代理实现直接通过 ip 地址或域名即可访问。倘若有域名,还可以进一步使用 HTTPS 来加强安全性。

安装好 Nginx 后,在文件夹 /etc/nginx/conf.d/ 中添加一个后缀为 .conf 的文件作为配置文件,如 example.conf,配置内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
    server_name             _;  # 这里可以把 _ 替换成自己的域名
    listen                  80;
 
    location / {
        proxy_read_timeout 300;
        proxy_pass_header  X-Transmission-Session-Id;
        proxy_set_header   X-Forwarded-Host $host;
        proxy_set_header   X-Forwarded-Server $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 
        proxy_pass         http://127.0.0.1:9091/transmission/web/;  # 此处的端口号应与 transmission 配置中的端口号相符
    }
 
    location /rpc {
        proxy_pass         http://127.0.0.1:9091/transmission/rpc;
    }
 
    location /upload {
        proxy_pass         http://127.0.0.1:9091/transmission/upload;
    }
}