文章的具体操作是在ISA2000下进行的,其他防火墙根据原理变动一下即可。
相信大家对BT下载都不陌生吧,但经常听到有人抱怨自己BT下载太慢,甚至无法使用BT下载,这种抱怨通常都是内网用户发出的,其实他们不知道,这不是他们的BT客户端技不如人,而是内网边界的防火墙及内网地址的私有性造成的,对大多数防火墙来说,即使它没有明确阻止BT下载,内网客户端也是不能使用BT或即使能下载速度也会很慢,这是为什么呢?又该怎样使防火墙后的内网享受高速BT下载呢?请看下文分解。
BT下载的基本过程

(图片较大 请放大查看)
1, BT客户端首先从一个WEB服务器上取得torrent文件,这个torrent文件类似RM电影的ram元文件,它里面有Tracker服务器的URL。这一过程对防火墙后的内网用户通常没有影响,因为请求torrent文件就相当于访问普通网页,只要允许上网,内网用户就能完成这一步(图1中的1与2)。
2, 由于第一步得到了Tracker服务器的URL,这一步就用这个URL去连接它,主要目的是从Tracker服务器上取得包含其他BT客户端(我们称这些BT客户端为PEER)的列表。Tracker服务器使用的端口通常是TCP的81、82、6969、8000、8001、8080,如果防火墙没有允许对这些外部端口的访问,那么内网客户端连接Tracker服务器将会失败。
3, 连接到Tracker服务器以后,服务器会反向连接BT客户端,以检验BT客户端能不能被其他BT客户端连接,检验成功的BT客户端将被加入到PEER列表中。如果BT客户端是公网用户,反向连接不会有问题,这样Tracker服务器将把它加入到PEER列表。但如果客户端是内网用户,反向连接就会出现问题,因为通常来说,Tracker服务器连接的目标是防火墙或代理服务器的公网IP及内网BT客户端提供的监听端口,很显然这对IP和端口组合实际在防火墙/代理服务器上并不存在,连接不可能成功,于是这个内网BT客户端也不会被加入到PEER列表中(当然即使被加入别人也无法连接成功)。可能有的人要说了,不加入就不加入吧,这有什么影响啊?影响当然大了,因为你没有出现在PEER列表中,那么表明你无法被其他BT客户端主动连接,由于在一个BT连接上数据传输是双向的,你不被别人连接,也就同时失去了从别人那里下载数据的机会,这样就会严重影响下载速度。这里是真正体现了“我为人人,人人为我”的思想,想不到这么一句美好的口号,居然在BT上体现得这么完美,呵呵,这是题外话了。要解决这个问题,通常的做法是:在防火墙或代理服务器上进行端口映射,比如防火墙公网IP是A,而内网BT客户端IP是B,它的 BT监听端口是6881,那么就可以在防火墙上做一个端口映射A:6881映射B:6881,这样当Tracker服务器反向连接A:6881时就会成功,于是A:6881将被加入到PEER列表中。当其他BT客户端从外部连接A:6881时数据将被防火墙传递到B:6881,于是连接也会成功,从而实现了从外部连接内网BT客户端。当然这并不是唯一的方法,各种防火墙可能还有其特定处理方法,文章后面将说到的ISA2000就有其自身的特殊处理方法,只不过基本原理都差不多。
4, BT客户端取得PEER列表后,就连接列表中的其他BT客户端,互相下载数据(图1中的5),假如是内网的BT客户端要连接PEER列表中的某个BT客户端,比如对方的监听端口是6881,很明显,要能够成功连接到对方的6881端口,需要在防火墙上开放外访6881,不然防火墙后的客户端就无法成功连接对方PEER。
从上面可以看出,要让防火墙后的内网BT客户端实现高速的BT下载,从防火墙的角度来说,需要处理好以下三方面:
1, 防火墙后的BT客户端要能主动连接到Tracker服务器。
2, 防火墙后的BT客户端要能主动连接到外部的BT用户,你可以把外部的BT用户想像成一个个BT服务器,但这些服务器监听的端口不确定,这可能是由于部分ISP封堵BT造成的无奈之举。
3, 外部的BT用户要能主动连接到内网的BT客户端,此时内网的BT客户端就相当于BT服务器了,要让内网用户高速BT的关键就在这里,这也是本文要重点处理的。