BT 种子下载原理

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

种子文件

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

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

下载种子

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

做种

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

优势与不足

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

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

搭建 BT 站

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

安装 transmission

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

add-apt-repository ppa:transmissionbt/ppa
apt update
apt install transmission

这时 transmission 就已经安装好了,此时先停止 transmissionsystemctl stop transmission-daemon.service,再去修改配置文件,配置文件存放在 /var/lib/transmission-daemon/.config/transmission-daemon/settings.json,以下贴出我的配置:

{
    "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:systemctl start transmission-daemon.service,到 http://ip:9091 并输入密码应该就可以进入 transmission 的主页面了。

修改默认下载地址

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

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

使用 Nginx 反向代理

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

安装步骤可参考 Nginx 升级到最新 Stable 版本,之后在文件夹 /etc/nginx/conf.d/ 中添加一个后缀为 .conf 的文件作为配置文件,如 example.conf,配置内容如下:

server {
    listen 80;
    server_name _;  # 这里可以把 _ 替换成自己的域名

    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;
    }
}

如此即可直接通过 ip 或者域名访问啦!


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。