如何架設一台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