是否可以将 http torrent tracker 放在 CDN 下以防止 DDOS?

是否可以将 http torrent tracker 放在 CDN 下以防止 DDOS?

我正在考虑在与 torrent 相关网站所在的同一台专用服务器上设置 torrent 跟踪器。我想这样做是因为我的网站和跟踪器将相互交互,我希望这些交互顺畅,并且不想干扰复制。

我将使用 cloudflare 或其他 CDN 来防止我的网站遭受 DDOS 攻击。但我还想保护在不同端口上运行的 http torrent tracker (XBT tracker)。因此,我还希望 torrent 像通过代理一样通过 CDN,但不使用缓存和验证码,因为 torrent 软件无法解决验证码。是否可以通过像 cloudflare 这样的 CDN 代理 http torrent-tracker,或者我必须为 torrent-tracker 订购额外的 DDOSable 服务器?

答案1

我不认为你会得到任何事物通过使用 CloudFlare 或任何其他 CDN 作为 Torrent Tracker。

CDN 的全部意义在于通过以下方式卸载工作:缓存对请求的答复。

使用 torrent 跟踪器时,每个请求对于每个客户端来说几乎都是唯一的。
因此它们无法被缓存(或者即使它们被缓存也不会有任何区别),这使得 CDN 对于该特定类型的工作负载基本上毫无用处。

以 TL 为例。这是一个巨大的私人种子追踪器。它的网站在 CloudFlare 上,但它的追踪器在卢森堡的服务器上。似乎没有涉及 CDN。该 IP 后面可能有一个集群能够处理所有请求,但我猜不是 CDN。

客户每次提出的每个请求都是唯一的。

此 GET 消息的示例可能是:

http://some.tracker.com:999/announce
?info_hash=12345678901234567890
&peer_id=ABCDEFGHIJKLMNOPQRST
&ip=255.255.255.255
&port=6881
&downloaded=1234
&left=98765
&event=stopped

https://wiki.theory.org/BitTorrent_Tracker_Protocol

更多细节:http://www.bittorrent.org/beps/bep_0003.html

即使所有客户端的每个参数都相同(但事实并非如此 - 根据 BEP0003,每个客户端、每个 torrent 的 peerid 都是唯一的),您仍然会在其中拥有独特的内容每个客户每个请求.例如:

&downloaded=1234
&left=98765

上述参数会随着 torrent 客户端的每次后续请求而变化,具体取决于自上次请求以来的流量。

CDN 通常会根据请求 URI 缓存内容。因此,如果每次请求都是唯一的,它将无法提供任何缓存内容,从而违背了其目的。

现在我想起来,如果你的追踪器是匿名的,你可以,或许,在 Varnish 上使用非常自定义的配置,以便能够缓存每个 info_hash 的回复,忽略请求的唯一性。但这样您的跟踪器将无法测量任何实际统计数据(总启动/关闭/对等/等等),因为只有一小部分请求会到达跟踪器。

这样,您就无法真正受到 DDoS 攻击的保护(尽管 Varnish 是一款很棒的软件,可以处理大量请求!)

更新:

有少数提供商拥有 DDoS 保护硬件(例如:Arbor Peakflow)。这些硬件可让您在没有任何 CDN 或缓存的情况下运行跟踪器,并能够阻止 DDoS 攻击到达您的服务器。但当然,这样的解决方案也有自己的成本 :)

答案2

我迟了将近 5 年,但这更多是针对谷歌搜索的人。我的跟踪器实际上位于 Cloudflare 后面,因为它有助于为使用 IPv6 的用户路由流量。它有助于确保他们被路由为使用 IPv4 作为跟踪器。它允许更多人使用跟踪器。如果我愿意,我也可以添加 DDOS 保护,但我使用页面规则来绕过缓存和许多其他选项。

您的页面规则应如下所示:

http://tracker.example.com:8080/*
Cache Level: Bypass

http://tracker.example.com:2052/*
Cache Level: Bypass

首先,您必须查找 Cloudflares 支持的端口,使用适合您的端口。这里有一个列表:

默认情况下,Cloudflare 代理发往下面列出的 HTTP/HTTPS 端口的流量。

Cloudflare 支持的 HTTP 端口:

80
8080
8880
2052
2082
2086
2095

Cloudflare 支持的 HTTPS 端口:

443
2053
2083
2087
2096
8443

然后你需要将 Nginx 放在你的 torrent tracker 前面。例如,如果你使用 Xbt Tracker,你需要像这样使用 Nginx 重写,在 conf.d 文件夹中的“default.conf”或你想命名为 .conf 的任何文件中:

server {

listen       8080;

server_name  localhost;
  location / {
  rewrite ^(.*)$ $1?ip=$remote_addr break; 
    proxy_pass http://127.0.0.1:2052/;
    proxy_redirect     off;
    proxy_set_header   Host                  $http_host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $remote_addr;
access_log off;
log_not_found off;
  }
}

基本上,您将从端口 2052 运行您的跟踪器,然后从端口 8080 运行代理的 Nginx。然后您将端口 8080 插入到您的种子中。

我认为就是这样,你可以了解如何向 Nginx 添加更多选项,例如工作者数量和保持活动时间。

如果您没有将 Nginx 放在跟踪器前面,那么跟踪器将获取所有 Cloudflare IP 地址,并且无法正确通信和跟踪。

另外,在 Nginx conf.d 文件夹中创建另一个名为 cloudflare.conf 的文件,并将以下内容放入其中,这将允许您获取真实的 IP:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;

set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

real_ip_header CF-Connecting-IP;

尽情享受吧。并监控数据库的正确 Ips,以确保其正常运行。

相关内容