在Linux环境下构建P2P下载服务的方法教程
postnew
|
1#
postnew 发表于 2008-02-24 16:02
在Linux环境下构建P2P下载服务的方法教程
Linux下的P2P协议主要包括:BitTorrent、aMule、Gnutella等。本文在Redhat Enterprise Linux Advanced Server 4环境下,介绍构建P2P服务的方法。
随着宽带网的盛行,传统的HTTP 和FTP这种一点对多点的下载方式已经满足不了大家的需求了。它会随着下载人数增加而出现连接不上和速度骤减的现象。而P2P 技术则打破常规格式,极大地节省了网络带宽。可使你直接连接其他用户的计算机,交换和搜索文件,而不用再通过网页浏览与下载,最大限度地利用了网络带宽。它可使大家在互联网上共享到平时用普通方式难以接触到的各种各样海量的资源。使用P2P软件的每一台PC 都是客户机在下载资源,也是服务器在上传文件,在索取的同时也给予。 BitTorrent是一个多点下载的开放源码的P2P软件,使用非常方便。是一个多点下载的共享文件软件,由于在下载的同时,也可为其他用户提供上传,所以不会随着用户人数的增加而降低下载速度,因此,下载的人越多,速度便越快。现在不少大公司如RedHat,都有使用 BT 让他们的客户下载开发版本。 架设BitTorrent服务器 BitTorrent使用Python语言编写,是一个开放源代码软件,既可以在Windwos下运行,也可以在Linux环境下运行。BitTorrent的官方网址是:http://bitconjurer.org/BitTorrent/ 。最新版本是:4.0.2-1。安装BitTorrent前使用命令:“rpm -qa|grep Python”检查是否配置了Python语言。否则需要到其官方网站http://www.python.org 下载安装。 1. 下载安装软件 #wget http://www.bittorrent.com/dl/BitTorrent-4.0.2-1.noarch.rpm #rpm -ivh BitTorrent-4.0.2-1.noarch.rpm 安装完成后所有BitTorrent命令和工具都安装在/usr/bin目录下。包括:btmaketorrent.py(制作种子工具)、bttest.py(测试种子工具)、bttrack.py(制作Tracker工具)、btdownloadheadless.py(制作共享源工具)、btlaunchmany.py(后台启动共享源工具)、btshowmetainfo.py(查看下载情况工具)、btdownloadgui.py(图形化制作共享源工具)、btmaketorrent.py(图形化制作种子工具)。 2.配置、启动BitTorrent BitTorrent的核心是Tracker,BitTorrent服务不需要服务器,但是BitTorrent服务中仍然有服务器的概念,这里称作Tracker。准确地说,Tracker是指运行的服务器上的一个程序,这个程序可以跟踪多少人同时在下载同一个文件。BT客户端连接到Tracker时会产生一个下载人员名单,根据这个名单,BT客户端会自动连接网络中其他节点进行下载。所以第一步要启动一个Tracker: #./bttrack.py --port 6969 --dfile dstate > /dev/null 2>&1 & 推荐使用普通用户权限来启动这个服务,这样更加安全。这个命令会在当前目录生成一个dstate的文件,并打开6969端口 。 3.制作种子(Seed) BT服务器的track服务并不提供下载服务,提供下载的是它的种子(seed),就是一个已经下载完成或正在下载的客户端。因为一开始没有这样的种子,所以你得先自己生成一个,如果要为/home/cjh.avi制作种子,相关命令是: # ./btdownloadheadless.py --max_allow_in 30 --max_upload_rate 1000 --minport 6888 --maxport 6888 /home/cjh.avi.torrent http://www.mydomain.com:6969/annouce 参数说明: --max_allow 30:指这个种子最多可以接受30个连接。 --max_upload_rate 1000:指这个种子最大的可以接受下载的带宽 1000 KB(byte)/s,这样可以控制下载带宽。 --minport 6888 --maxport 6888:设置最大最小监听端口号码,这样写就是说种子只监听6888端口,这样方便在防火墙上开端口。 cjh.avi.torrent:是制作的种子文件名称。 4.设置Apache服务器 配置Web服务器让种子(.torrent)文件和application/x-bittorrent相关联。不久Apache配置文件:/etc/httpd.conf,加入一行: AddType application/x-bittorrent .torrent 5.重新启动Web服务器,并且打开防火墙6888端口 将制作的种子放到Web服务器的文档目录中,让用户可以访问,启动一个最原始的共享源。 #iptables -A INPUT -i eth0 -p --dport 6888 -j ACCEPT #iptables -A OUTPUT -i eth0 -p --dport 6888 -j ACCEPT #./btdownloadheadless.py http://www.mydomain.com/cjh.avi.torrent 其中http://www.mydomain.com/cjh.avi.torrent是种子的URL地址,这样用户通过浏览器访问cjh.avi.torrent即可实现Web下载。由于笔者是Linux系统管理员,所以习惯使用命令行工作,读者也可以使用图形化的前端工具,如图1所示。 图1 BitTorrent的图形化前端工具 到此为止,我们建立了一个BitTorrent服务器,如果要下载别人的BT资源,还要安装一个客户端。 客户端安装Azureus 下载软件 1.下载一个Bit Torrent客户端软件:Azureus ,官方网址为:http://azureus.sourceforge.net/。 #wget http://ftp10.enet.com.cn/pub/lin ... 2_linux.GTK.tar.bz2 2. 安装Java虚拟机 由于Azureus是使用Java语言编写的,所以运行它需要Java虚拟机。下载最新的JDK(Java Development Kit)开发包:j2sdk-1_4_2-linux-i586.bin,这是一个J2SE V1.4.2 SDK Linux自解压的二进制的文件。 3.安装Bit Torrent客户端软件Azureus 这是一个绿色软件只要解压即可运行不必编译,操作如下: #bunzip2 Azureus_2.2.0.2_linux.GTK.tar.bz2 #tar vxf Azureus_2.2.0.2_linux.GTK.tar 4.运行软件 #cd azureus #./azureus 5.配置软件 第一次运行azureus时要进行简单的配置: ● 配置接入互联网的方式 根据你的具体情况设置链接互联网方式(ADSL、Modem等),最大上传速度、最大下载文件、每个Torrent最大上传速度。然后用鼠标按“Next”按钮进行服务器端口配置。 ● 配置NAT/Server 的端口 使用NAT(Network Address Translation)的好处是:连接Internet,但不让网络内的所有计算机都拥有一个真正的Internet IP地址。通过NAT功能,可以将申请的合法的Internet IP地址统一管理,当内部的计算机需要上Internet时,动态或静态地将假的IP转换为合法的IP地址。另外,如果不想让外部网络用户知道网络的内部结构,可以通过NAT将内部网络与外部Internet隔离开。这里强烈建议把NAT/Server 的端口设为:最低6881、最高6889。如果读者对计算机网络比较熟悉的话,也可以用鼠标点击“Test”按钮测试一下,选择别的端口。注意千万不要和某些系统已经使用的端口冲突。然后用鼠标点“Next”按钮进行下载的文件存放目录的配置。 6.使用软件下载 配置结束后就可以使用它下载,点击“File”主菜单的“Creat a Torrent”然后输入要下载的Torrent文件的链接即可开始工作。 7. BT下载实例 图2是笔者下载Fedore Core 3 时的工作界面。从图2 中可以看到Azureus下载Fedore Core 3 的IOS文件的截图。图中显示出文件名和下载速度以及完成百分比。基于 Java语言 的 Azureus是一款跨平台的 BT 客户机程序,具备 27 种语言供选择,用户可在单一的 GUI 窗口同时管理多个下载、检视详细的实时下载统计、设定进阶下载管理规则、设置和建立 torrent 等。新版加入了下载速度的限制、共享联机限制及更多资料分栏等。在使用Azureus下载软件的时候如果断线了,可以重新点击下载链接,并且在选择存放位置的时候覆盖上次下载一半的文件,这时程序会自动的续传该文件。 图2 用Azureus下载Fedore Core 3 使用aMule软件 aMule是一种支持ED2K网络的P2P软件,它基于wxWindows并且类似于eMule。是在遵循E-Donkey的网络协议基础上发展而来,它相当于e-Donkey(驴子)的一个Mod,而且源代码是完全公开的。而且aMule比e-Donkey配置更为简单,界面、图标和按钮更美观,突出了其立体和半透明的感觉。现在大家几乎都转向用e-Mule。aMule软件可以算是Linux 网络环境下的e-Mule。 aMule的每个用户端都既是文件下载者又是上传者,既索取又给予。在你正在下载但还没下载完整文件时,你已经把已下载的部分共享给别人了。aMule是同时从很多文件上传者(称之为“源”,跟BT 的种子差不多)那里下载所需的文件最后再拼成整个文件的,而且aMule对没在下载队列中的文件共享很方便,不用像BT 那样要很麻烦地制作种子,再上传到服务器,只需指定一个共享目录,aMule会自动将其共享。这个共享目录在一运行aMule就开始强制共享,即使在下载栏未下载任何文件。这点比BT做得好,可以防止大家好逸恶劳,只下载不上传。而BT 在运行时只上传自己正在下载或已下载完毕的东西,不能共享目录,甚至有人把BT的下载设置为无限制,而把上传调至几KB/s 甚至0KB/S。而在使用aMule中如果你把上传速度设为一个小于10 的值,aMule也会自动限制你的下载速度。 aMule安装相当困难,是笔者使Linux以来最难对付的一个工具软件。它对一些链接库文件的依赖性特别强,另外它还需要GTK的支持。所以这里对于软件安装写得详细一些。软件下载安装详细步骤如下: #cd /usr/local #wget http://jaist.dl.sourceforge.net/ ... /wxGTK-2.6.1.tar.gz #wget http://jaist.dl.sourceforge.net/ ... wxBase-2.6.1.tar.gz #wget http://jaist.dl.sourceforge.net/ ... aMule-2.1.0.tar.bz2 注意安装顺序:先装wxBase再装 wxGTK,最后装 aMule,安装wxBase后要执行一下 ldconfig命令,wxGTK 编译参数为./configure --with-gtk。 #cd wxBase-2.6.1;./configure;make;make install; /sbin/ldconfig;cd .. #cd wxGTK-2.6.1;./configure --with-gtk;make;make install;make clean;cd .. #cd aMule-2.1.0;./configure;make;make install 现在 aMule 已经是 GTK 2 界面了,很漂亮,中文支持也很好。安装之后,设置昵称为 [CHN][VeryCD]xxxx,然后服务器设置为:名称DonkeyServer NO1,地址62.241.53.2:4242。另外还有其他的服务器,例如华语psp源动力,地址61.152.93.254:4661;还有Razorback 2,地址为195.245.244.243:4661。服务器设置界面见图3。 aMule使用方法和eMule几乎一样,很快可以上手。 图3 aMule服务器设置界面 如果aMule的下载速度太慢,比如只有2KB/s~3KB/s,那一定是没有端口映射。只需映射4662 TCP 和4672 UDP 两个端口即可。不需要像使用BT 那样映射一堆端口。如果打开了4771 TCP 端口就可远程控制,如果你不在家,朋友的机器上安装有aMule,也可以在朋友机器上远程控制你的aMule。aMule下载跟Azureus 不一样,要多添加些文件下载。如果系统装有Linux防火墙,需要在防火墙中打开以上相应的TCP、UDP端口。 Gtk-Gnutella Gtk-Gnutella是Linux类(Linux、BSD)系统下 Gnutella 的服务端/客户端实现,该软件依赖于 GTK+ (1.2版以上 ) 、 libxml,但Gnome不是必须的。目前,Gtk-Gnutella主要在Linux(Debian 3.1)下进行开发与测试,至少支持如下操作系统:Linux、 FreeBSD、 NetBSD、OpenBSD、 Darwin、 Solaris、Tru64 UNIX (OSF/1)、 SGI IRIX、BeOS等,支持的CPU构架包括:x86、AMD64、PowerPC、SPARC、MIPS等。Gnutella按照GNU通用公共许可证(GPL)进行发布。 Gtk-Gnutella尚未完工,但已经具有完整的功能,通过Gtk-Gnutella,可以分享、搜索、下载各种文件,Gtk-Gnutella的稳定性也很好,可以自觉地一天接一天地工作下去。 Gtk-Gnutella的开发者认为他们的技术是优于ED2K的。因为它开源,而且因为它没有一个中心服务器,是完全用户之间互联的一个网络,从而保证用户不会被中心服务器监视。可以说,只要有人还在用这个软件,这个网络就不可能消失。虽然最近由于BT等的兴起,其用户数下降比较厉害,但是仍旧可以搜索到大量的资源,速度也很好,搜索网络资源对带宽的需求也比ED2k小。简单地说,Gtk-Gnutella的用户们互相连成一个网络,你的搜索将发给其他Gtk-Gnutella用户,他们再传出去,形成巨大的搜索网络。看起来这样非常消耗网络资源,但是Gtk-Gnutella引入了Ultrapeer和Leaf的概念。如果带宽比较小,搜索请求就会主要传给带宽富裕的Ultrapeer,他们会帮你继续和其他节点联系搜索事宜,搜索到再告诉你。Gtk-Gnutella是一个兼容性不错的客户端,只需要gtk+或者gtk2,而不需要gnome桌面环境。下载安装方法如下: #cd /usr/local #wget http://jaist.dl.sourceforge.net/ ... tella-0.96b.tar.bz2 #bunzip2 gtk-gnutella-0.96b.tar.bz2 #tar vxf gtk-gnutella-0.96b.tar;cd gtk-gnutella-0.96b;./Configure;make;make install 执行上述操作后系统会给出一个安装向导,安装指示即可完成安装。Gtk-Gnutella安全性能也比较好,它不能工作在root权限下,必须在普通用户的工作环境下使用。笔者非常欣赏这种方式,工作界面见图4。 图4 Gtk-Gnutella工作界面 Gnutella还有一些客户端可以用,比如LimeWire(http://www.limewire.com/ )。它界面漂亮,人性化,可以换皮肤。但是免费的basic版本速度太慢。 |