如何架设一台eD2k服务器,Lugdunum的使用与设置

众所周知,eD2k服务器在eMule整个运行过程中有着非常重要的作用,尤其是在找源与搜索方面,eD2k服务器暂时无法被Kad网络完全取代;eD2k服务器可以鉴别虚假与恶意文件,维系eMule与其它不支持Kad协议的eD2k兼容客户端之间的联系。有了eD2k服务器,eMule才能更好的运行。

最早编写eD2k服务器软件的是创立eD2k协议的MetaMachine(eDonkey2000.com),称为dserver,版本一直发展到16,然后转交给法国的Lugdunum小组维护,现在发展到最新的17.15。 Lugdunum也称eserver。目前已知的所有知名eD2k服务器,包括 eDonkey Server,TVU,UseNext在 内全部使用Lugdunum软件搭建架设。

Lugdunum这一单词是法国城市里昂的旧称。

由于考虑到位于北美大陆的恶意与虚假服务器对eD2k网络的威胁,Lugdunum是免费但不开源软件,服务器版本是否最新是判断一个服务器好坏的重要特征。

(2006年3月16日,由于法国通过了新的法律,禁止开发任何有助于侵犯版权的服务器软件或客户端软件,Lugdunum宣布停止开发。——uralhan注)

架设环境

Lugdunum主要设计用于Linux平台运作,支持多核心与64位运行,但也有面向Win32,solaris与FreeBSD平台的版本。

警告:Lugdunum 17.15 Win32版已经被证实无法正常运作(不论客户端的情况,所有连接上的客户端均会被分配为LowID),请放弃在Windows下使用Lugdunum的想法。Windows版Lugdunum下载,不推荐)

Lugdunum的主页已经失效,这里提供针对32位Linux与x86-64Linux的17.15版本。需要2.6或以上版本内核才能支持NPTL:

下载 lugdunum 17.15 i686 linux

下载 lugdunum 17.15 x86-64 linux

配置Lugdunum

基础设置

下载与你的系统和CPU对应的Lugdunum,然后解压到任意文件夹中,再去下载ip-to-country.csv与ipfilter.dat,把他们放在Lugdunum存放的位置,这时就可以编写Lugdunum的配置文件——donkey.ini。

这是核心部分:eD2k服务器的每一个变量都被写在这个文件里。eserver开始运行时会读这个文件。
警告:服务器软件没法接受语法错误(书写时的错误),服务器不能明白某个命令它就不会工作,或者它会忽略写得不对的命令(以及后面的任何东西);大小写也是非常重要的;所有单独条目均不能有注释。

[server]
这个命令启动控制进程。它必须被写在方括号里。在最后的那个方括号后面没有空格,这一点非常重要。否则的话这将使服务器无法理解 ——也许它没法工作了。接下来的条目只是例子而已!

name=LUCK
服务器的名字,就象你在客户端看见的那个。你可以用任何你想用的的文字数字组合。

desc=社区 http://www.ied2k.com/
服务器描述信息,跟“name=”格式是一样的。可以用任何文字。

thisIP=61.152.93.254
请注意大小写!(IP“61.152.93.254 ”只是个例子而已)。这将告诉服务器你自己的,公开的公网IP。程序开始时,服务器会把它工作的IP发送到其他的服务器。请注意程序开始时所显示的IP,它是你当前真正的,公开的IP,用户会通过你提供的这个IP连接到你的服务器。

port=4242
在这里你要指定可以跟服务器建立联系的端口。一般情况下这个端口是TCP:4661,如果你想用4661,那么这个条目可以空着。如果由于某些技术原因该端口不可用的话,你可以用其他的端口。当然如果是这样的话你就得给出这个条目了——如果可能的话,尽量不使用4661,因为某些无良ISP封锁了4661与4662。端口缺省是TCP:4661

seedIP=212.63.206.35
注意大小写!(IP地址“212.63.206.35”只是个例子而已)
这一项,就象名字示意的那样,是指服务器从哪里连接到网络其他部分,它代表一个正在运行的ED2K服务器,这样你的服务器才能够找到它 ——它是你的服务器首先建立连上的那个服务器。 首先,你的服务器发送自身的IP地址和端口号——然后他就会获得种子服务器所知道的所有的IP地址。

seedPort=4242
注意大小写!(端口“4242”只是个例子而已)
如果“种子服务器(Seed-Server)”的端口号不同于缺省的TCP:4661,就必须有这个条目。许多服务器使用4661端口“seedPort”的缺省设置是4661。

logFile=true/false
注意大小写!
你可以把日志写到硬盘里,而不是把它们显示出来——这也就是说把显示输出关闭掉——这样的话服务器不会在屏幕上显示任何输出! “true”表示“激活该功能”,“false”表示“关闭该功能”。如果你不想显示输出而想用日志文件的话的话——写true,否则写false——请不要写both(两者都要),否则你的服务器会发癫的,或者将引起你的电脑爆炸!! “logFile”的缺省设置是“false”——关闭……

verbose=true/false
如果你想看所有的系统显示的注意信息,你应该把“verbose”激活(把它设成“true”)——一般来讲如果所有的东西你都看看的话是很烦人的,因为“普通的”信息显示得太快了。不要感到惊讶:即使是“verbose=false”,服务器仍然会打出“ERROR: unknown type MetaTag::MakeTag() 72”或者类似的信息 ——别管它,服务器会工作的。为什么会显示这个信息呢?我不知道!总之别理它就行了…… “Verbose”缺省是设成false——关闭……

public=true/false
这个条目决定了你的服务器是否把自己的IP发送到其他服务器去。把这个条目设置为“true”对网络来讲是非常重要的,因为一般你要运行的都是公开服务器,只有设置为“public=true”你的服务器才能够登陆到网络上去!
注意:“public”缺省是设成“false”的,把它更改为true.

threads=10 (integer)
这个条目定义能够同时处理的任务的数目,目前Lugdunum中此值为10且不可更改。

tableSize=3089 (integer)
注意大小写!
这里的table就是包含了文件名和客户的数据库。这一定是一个素数。其技术背景(快速搜索次序)就不深入探讨了。这个值的大小看起来并没有什么太大区别。在默认的ini文件里这个值是“3089”——这实际就是一个素数。设为其他素数也没有任何影响。如果不去设定,服务器会自动生成一个素数取代。

maxClients=100000
注意大小写!
这里是多少客户可以同时连接到服务器的数目。如果“maxClient(最大客户数目)”——达到了峰值时,客户端在尝试连接到该服务器的的时候会出现“Can´t connect to…(无法连接到……)”这样的信息。
你必须试试才能知道你的服务器的最佳值,Lugdunum支持运行中更改可容纳客户端数目,更改后也无需重新启动程序。

type=key/substring (key 或者 substring)
注意大小写!
“type”缺省被设置成“key”,也就是快速模式;“substring”是老式方法,速度慢。

console=true/false
这个值决定服务器是否工作在控制台(命令行提示符)状态下。当服务器自动开始运行并且你不想使用“屏幕”命令的时候,这样做还是有用的。
如果“console=true”的话,你就必须在控制台下运行服务器,如果“console=false”则不必非要如此,但这时就不能用键盘给出任何命令了,并且不能显示任何东西。嗯,其实这两样都不是必需的,但是我喜欢时不时察看一下它在干什么并加以控制,以及看看它知道多少可用的服务器(敲“vs”)。 “console”缺省是设置成“true”

minVersion=57
注意大小写!
这定义低于v.57的版本不能连接到服务器。当有客户端软件的更新版本出现时,改改这个值是有用的,但请注意当时的形势,比如说,由于一个安全方面的bug,新版本v.61没法支持ed2k-links,因此没有很多用户升级到它,还有linux的版本可能比windows版本老很多……
如果没有设置“minVersion”值的话,所有版本的客户端都会被服务器接受。

maxVersion=9999
注意大小写!
这定义了服务器可接受的最大版本号。测试版的客户端程序往往有一个很高的值(比如1060)——因此这个值应该留为空白,否则的话你得常常更新这个值并且很容易忘记——正在测试新客户端的用户就被请出去了……:-( 设为9999就保险了。
如果“maxVersion”没有被设置的话,任何高于“minVersion”的版本均会被接受。

welcome[0]=Welcome to TheDonkeyNetwork
welcome[1]=share your Files and your upload Bandwith

这是欢迎信息,在登陆到服务器时被显示出来。设定时你要注意,[]里面的数字是变化的,每行的不一样。欢迎信息不应该太长,否则的话它们将需要许多带宽——每个字母1字节!当出现1000客户时,平均每分钟会有5-50个连接……

一个完整的可以使用的donkey.ini文件看起来像这样:

[server]
name=LUCK
desc=http://www.ied2k.com/
thisIP=61.152.93.254
port=4242
seedIP=212.63.206.35
seedPort=4242
verbose=false
public=true
threads=10
type=key
tableSize=3089
maxClients=100000
minVersion=57
maxVersion=9999
logFile=false
welcome[0]=欢迎登录LUCK
welcome[1]=***************************
welcome[2]=建立华语世界最大的P2P资料库

其它扩展选项设置

LOWIDenable (integer)
如果为 1, LOWID 用户可以登录。缺省值为 1

LOWIDpercent (integer)
最大的 LOWID 用户比率。建议不要超过33%,缺省值为20

autoservlist (pathname)
如果设置了,服务器会每225秒将已知的其他服务器列表写入server。缺省值为none

auxportslist (list of ports values)
辅助监听端口列表,16.45版的新特性
例子:auxportslist=80,443,25,21

blacktime (integer)
黑名单时限。即将客户端ip列入黑名单保留的时限.缺省值为3600

bverbose (boolean)
如果为真,eserver会记录下黑名单ip。缺省值为false

connIP (IP address)
当服务器有多ip时,指定辅助监听的ip。和ftpd的virtual host不同,这里还有防止Hash Stealers的功能

filter[ ] (filter expression)
滤镜,防止共享某些不合法或不完整文件,有需要的话我会另外一个帖子介绍一下详细用法
例子:

filter[0]=(.part.met)
filter[1]=(.part.stats)
filter[2]=(#FORMAT met)
filter[3]=(#FORMAT part)
filter[4]=(#FORMAT dll)|(#FORMAT sys)

hardLimit (integer)
共享文件数目硬性限制,为避免某些用户共享过度的文件数浪费带宽而设置,拥有超过此数目共享文件的用户将被踢出服务器,默认值为4000

login_timeout (integer)
登陆时限,在时限内检验客户端获取 HighID 或 LowID。默认值为20

max_clients_per_ip (integer)
限制同一IP连出的客户端数量,默认值为12。
可以防止某些蠕虫/病毒/机器人发起太多连接以填满服务器的资源,但是容易使国内一些宽带的用户进入黑名单。

maxSearchCount (integer)
从以连接客户中搜索返回结果最大数,默认值为200

maxUDPSearchCount (integer)
从非连接客户中搜索返回结果最大数,默认值为20

maxservers (integer)
服务器被加入服务器list的最大值,避免拒绝服务攻击。缺省值为4096

maxstrangers (integer)
最大陌生用户的数目,缺省为1000000

minEVersion (integer)
可登入服务器的Emule的最小版本,缺省值为0x26
注:EMULE的版本数字为16进制,范围从00到FF

minkeylength (integer)
搜索时关键字的最小长度,缺省为3

nbuserIP (IP address)
如果使用了nbuser来监听,在这里设置监听机器的ip,缺省为127.0.0.1

nbuserport (integer)
nbuser监听的端口,默认为5656

ncpus (integer)
设定主机可用的CPU的数目。

nickcommunity (string)
非陌生客户认证的标志,也就是登录服务器需要的TAG,比如POPGO服务器需要的EDTOON,缺省值为空

noudpslowsearches (boolean)
拒绝复杂搜索,即拒绝关键字搜索,缺省值为false

ping_delay (integer)
ping延迟时间,服务器会在一定的间隔获取用户总数和每一个用户共享的文件,这个过程叫做ping。缺省值为400

softLimit (integer)
共享文件数目软性限制,为避免某些用户共享过度的文件数浪费带宽而设置,用户超过此数目的共享文件将被服务器忽略,默认值为1000

tcpthreads (integer)
用于接受客户端请求的TCP请求的线程数目,默认值为当前主机的可用CPU数目

trackbademule (integer)
拒绝虚假版本EMULE的登入,要与minEVersion配合使用,默认值为30

trackemule (integer)
此项如果被激活(设为1),服务器程序将跟踪EMULE的版本,默认值为1

udpsearchers (integer)
为UDP搜索动作准备的线程数目,在单CPU机器上请设为1,多CPU机器上请设为2

warnfakes (integer)
恶意文件提示,当用户持有或正在下载fakes.txt中已知的虚假或恶意文件时,服务器发给该用户的警告信息的数目,默认值为0(不发送)
附:fakes.txt的格式
纯文本格式,每行只写入一个虚假或恶意文件,以该文件的32位MD4 HASH值开头,后面是对于该文件情况的描述。

服务器命令

vc
查看当前服务器中用户登录情况

vs
查看种子服务器的运行情况

vo
查看当前服务器的一些选项的值,比如IP,端口,软硬限制等

name=valve
更改选项的值,比如键入 maxClients=30000 就是将最大客户端数目设为30000

print name
显示该选项的当前值,比如建入 print maxClients,服务器就会显示 maxClients=30000

g | stats
显示服务器当前的用户情况,搜索状况,端口信息,连接情况。

wel
显示服务器的欢迎信息

filters
设置服务器中的文件名过滤

slab
显示当前的内存使用情况

debug
显示服务器的调试信息

reload
重新载入配置文件

m message
向客户端广播信息,message指代广播内容。

在Linux下的一些特别提醒

对于大型服务器,修改/etc/sysctl.conf中的fs.file-max将其值改为 16384
官网推荐使用脚本启动服务器,脚本内容如下:

# script.sh file
ulimit -n 100000
while :
do
./eserver
sleep 1
done

28条评论隐藏

  1. 2009年5月29日 周五 11:23 | 回复

    ied或者谁搭建一个服务器吧~ 😀

  2. 2009年5月30日 周六 21:10 | 回复

    呵呵,索菲的想法……

  3. #3 aaa
    2009年6月8日 周一 18:45 | 回复

    Lugdunum服务器对硬件有何要求?
    内存?
    cpu占用?
    多核?

  4. #4 chengr28
    2009年6月9日 周二 01:44 | 回复

    CPU双核是可以的,不过关于Lugdunum的硬件要求好像网络上都没有什么资料……不过,一般只要服务器的网络好,对硬件的要求是不高的,一般的HTTP服务器应该都可以胜任

  5. #5 xvid
    2009年6月11日 周四 13:06 | 回复

    对网络带宽有什么要求?

  6. 2009年6月22日 周一 13:12 | 回复

    @chengr28
    lugdunum的最新版是2007年的,当年的服务器主流配置和现在的基本应该是一样的

  7. #7 chengr28
    2009年6月23日 周二 00:50 | 回复

    @yegle
    貌似现在已经没有继续开发了

  8. #8 5566
    2009年9月3日 周四 13:47 | 回复

    法国佬不知道在eserver里放了什么后门,但是开源的服务器又太容易被任何人利用放后门,真是矛盾呀。

  9. 2009年12月17日 周四 15:57 | 回复

    Lugdunum的老版本主页好象这有了:http://lugdunum.shortypower.org/

  10. #10 robinzhen
    2010年4月20日 周二 17:52 | 回复

    Lugdunum 17.13 Win32的没问题,官方网站已经更新了,WIN32平台最高就是 17.13版本

  11. #11 chengr28
    2010年4月20日 周二 17:56 | 回复

    @robinzhen
    17.13 貌似不支持模糊协议 😳

  12. #12 犟骡子
    2010年6月28日 周一 12:37 | 回复

    能不能用cygwin跑?

  13. #13 追风筝的人
    2011年8月10日 周三 19:53 | 回复

    请问一下win7系统可以用吗? 我想自己搭建一个eb2k的服务器

  14. #14 犟骡子
    2011年8月10日 周三 20:21 | 回复

    @追风筝的人
    你自己下个Lugdunum 17.13试试不就知道了?不过“17.13 貌似不支持模糊协议“,所以还是用GNU/linux跑吧。

  15. #15 追风筝的人
    2011年8月13日 周六 17:24 | 回复

    @犟骡子

    额 谢谢

  16. #16 追风筝的人
    2011年8月13日 周六 20:19 | 回复

    请问下 只要是linux 就可以是不是 像ubuntu之类的 还是对红帽什么的支持的好?

  17. #17 dastin
    2011年8月13日 周六 23:12 | 回复

    @追风筝的人 linux都是一样的

  18. #18 ied2k.cc
    2012年2月27日 周一 10:07 | 回复

    虚拟主机能能搭建么?

  19. #19 opi
    2012年2月27日 周一 10:31 | 回复

    @ied2k.cc 肯定不能吧,对硬件要求太高了

  20. 2012年4月13日 周五 20:05 | 回复

    vpn可以搭建么?如果购买vpn搭建电裸服务器,vpn需要达到什么样的标准,流量是否有限制,要多少合理些, emule有什么限制.比如连接数等等. 搭建这样的服务器在国外的vpn 会不会受到国外的什么法律影响.比如版权什么的.在国内呢?有什么限制和其他的法律问题.

  21. 2012年4月13日 周五 20:07 | 回复

    难道必须是独立主机,?这样成本太高了.不知道自己在家,能不能搭建,但没有固定ip啊!

  22. #22 犟骡子
    2012年4月14日 周六 10:37 | 回复

    @ied2k.cc
    模仿verycd用域名声明自己也是可以的,你的话可以使用动态域名。

  23. #23 slash
    2012年7月18日 周三 16:43 | 回复

    @ied2k.cc VPN可以搭建,如果不公开,就几个人内部用用的话。
    但VPN在国外有版权问题。国内版权问题倒不大。

  24. #24 雲塵客
    2013年3月25日 周一 20:38 | 回复

    这个怎么设置才能支持乱序加密?

  25. #25 小李
    2013年7月29日 周一 22:31 | 回复

    我私下架设了一个 lugdunum服务器,是用ssh远程连接的,我执行脚本后 服务器开始正常工作了,令我兴奋不已,用电骡软件也可以查得到,可是我进入了命令行状态,我按下ctrl+c 退出命令后,或者把远程连接断开后 lugdunum服务器就停止工作了,请问我如何让我的lugdunum服务器一直在线工作呢? 麻烦您回复我的QQ邮箱,万分感谢

  26. 2014年2月10日 周一 13:08 | 回复

    @小李 使用crontab一直监测服务器程序,如果发现程序没有启,则把它启起来即可。

  27. 2014年4月26日 周六 05:44 | 回复

    搭建一个eMule服务器试试,暂时使用eserver.eMoogle.info:8080

  28. #28 小张
    2014年10月18日 周六 21:44 | 回复

    @小李
    用screen

2条Trackback/Pingback显示

发表评论

您的Email将不会显示出来。头像请至Gravatar.com注册上传。*号标注项为必填。

*
*
*
标签用法
字数:0