compteur depuis le 8 mai 2002

 Notre serveur
Accueil
Nouveautés
Techniques de son succès
Caractéristiques
Bloc d'adresses IP Fr
ed2khistory

EMail

 L'ID du donkey
Comment le récupérer
Son attribution
Utilisation
Qui provoque un Low ID ?

 Partages connexion
Win 98SE / Win Me
Win 2000
infos partages connexions

 Configuration Routeur
Alcatel Pro
Asante FriendlyNet Câble/DSL FR3004
Bewan LanBooster
Cisco utilisant le NAT
Eicon Diva ISDN
NetGear RP114
Netline
Netopia Rxxx
Zyxel Prestige 310
Autres routeurs
infos routeurs

 Passerelles
Linux 2.2
Linux 2.4 et Shorewall
NetBSD 1.5.2
infos passerelles

 Liens
emule-project
ed2k.ch
Razorback2
ed2khistory
jigle.com
NetFilter
edonkey2000
Overnet
OPEN-files
Foro oficial del edonkey en español
The Donkey Network
Forum Edonkey 2000fr

Créé par Interfaces Web

Kit de construction d'un serveur edonkey sous linux

English readers, please click : English Translation
Stillman translated this page into German : German Translation
A page in traditional Chinese is available here : Chinese Translation
If you want to translate this page in another language please do it and send it to me !

Le succès de lugdunum est tel qu'on nous demande très souvent des conseils pour la mise en place d'un serveur edonkey sous linux.
Nous vous proposons ici quelques infos et liens. Cette page n'est pas aussi complète que sa version anglaise : il y a 50 fois plus de lecteurs de la version anglaise, et je manque de temps pour tout faire. J'estime passer beaucoup de temps pour la communauté du donkey, et certains se plaignent que je ne m'occupe pas assez d'eux !!! Il parait que je ne communique pas assez !!! Ceux d'entre vous qui désirent monter un serveur edonkey sous linux devront de toutes façons faire des efforts et lire des infos en langue anglaise. Si vous n'êtes pas d'accord, vous êtes libre de creer vous aussi des pages sur le web, je peux ensuite inclure des liens vers ces pages.

Le programme dserver-16.38.p71.gz
md5sum : 9fa1752e4716e3a855a238c8a57a9675

Mirroirs : Mirror1 ou Mirror2 et nbuser.gz
Que vous installerez par les commandes :
$ gzip -d dserver-16.38.p71.gz
$ chmod 755 dserver-16.38.p71
$ rm -f dserver
$ ln -s dserver-16.38.p71 dserver

Ce programme est la version 16.38 du serveur, patché par nos soins pour diminuer d'un rapport cinquante le temps CPU et d'environ 25% sa consommation mémoire. Les modifications utilisent du code assembleur hautement optimisé grace aux indications fournies par l'excellent oprofile qui nous a permis de localiser les 'points chauds' du programme. Quelques fonctions ont été re-écrites pour retirer des boucles stupides, et des verrous ont été supprimés en y substituant le prefixe lock sur certaines instructions.

Il a un filtre anti LowID activé par défaut. 20% de clients LOWID maximum.

Il détecte le BOT PRO et autres programmes edonkey modifiés qui ont un comportement néfaste pour le réseau tout entier.

Le programme edonkey original envoie à tous ses clients, toutes les minutes des trames de 'ping' indiquant le nombre de clients et de fichiers.
Notre version envoie toutes les 10 secondes, des pings à un dixième des clients. Cela lisse un peu mieux l'Upload et surtout permet de détecter les clients déconnectés de façon plus uniforme dans le temps.

Il a un filtre limitant le nombre de partages d'un client à 1000 (valeur limite configurable) pour éviter de saturer le serveur et le réseau.

Il regroupe en une seule trame les deux trames que le serveur envoie sur ses clients TCP (à partir de linux 2.4.4), rendant le patch kernel sendto inutile. La version .p35 de notre patch n'utilise plus le flag MSG_MORE et peut donc fonctionner sur des noyaux plus vieux ou sous OpenUnix8.

Il corrige plusieurs bugs du programme original qui provoquaient un plantage brutal (core)

Nouveau dans la version .p62 :

  • Grosses optimisations mémoire et CPU. GRUK a pu atteindre 55000 clients avec cette version;
  • Tri des listes de fichiers par mots clés : Les recherches par mot clés retournent les fichiers ayant la plus grande 'Availability'
  • Les machines puissantes (CPU et ligne internet) doivent atteindre 60000 clients sans problème.

Nouveau dans la version .p60 :

  • Un bug present dans la p59 (memory leak) faisait que le dserver consommait de plus en plus de mémoire.
  • Correction faite pour autoriser l'execution du dserver sur des machines avec un split Kernel/User 3G/1G au lieu du split standard 1G/3G

Nouveau dans la version .p59 :

  • Economies de mémoire... encore...
  • Utilisation de setsockopt(TCP_QUICKACK disable) (linux 2.4) pour différer au maximum les émissions des ACK TCP, afin de diminuer encore notre Upload.
  • Nous avons demandé à Merkur, développeur d'Emule de modifier Emule pour n'envoyer qu'une trame IP au lieu de deux lors d'un dialogue avec les serveurs. La version 0.2 d'Emule le fera. Nous espérons un gain de 15% sur l'Upload des serveurs.

Nouveau dans la version .p58 :

  • Meilleure gestion des arrivées de nouveaux clients.
  • Module slimit intégré au dserver :
    • Toutes les requêtes en provenance d'une même adresse IP sont comptabilisées.
    • Si le nombre de requêtes dépasse une valeur particulière, l'adresse IP est mise en liste noire pendant une heure.
    • Les clients réalisant beaucoup de petites connexions au serveur seront mis en liste noire.
    • Les clients qui essayent de downloader plus de 60 fichiers en même temps sont mis en liste noire.
    • Protection contre certaines attaques de type Deni de Service (DOS)
  • Meilleure gestion des threads.
  • Le serveur GRUK (monopro AMD 1680MHz, 640 Mo de RAM) a atteint 32000 utilisateurs avec cette version.
  • Des machines suffisamment puissantes (bipro, 1GO RAM, Internet 2 Mb/s) pourront atteindre 40000 utilisateurs environ.

Nouveau dans la version .p57 :

  • Smart Sources V3 : Détection des clients BOT et edonkey modifiés.
    Les analyses faites sur les serveurs lugdunum, ed2k.ch, Gruk, Link92 et Fugitif, montrent qu'environ 1% des clients utilisent ces versions et qu'ils obtenaient entre 30% et 50% des sources fournies par les serveurs.
    Avec Smart Sources V3, ils obtiennent 1% des sources.
  • Nous travaillons avec l'auteur de mldonkey afin qu'il rende son programme moins nocif pour le réseau edonkey.
  • Merci beaucoup aux admins des serveurs ed2k.ch, Gruk, Link92 et Fugitif pour l'aide qu'ils ont fournie pour l'élaboration de Smart Sources V3.

Nouveau dans la version .p55 :

  • Gains en CPU très sensibles. Le serveur GRUK est passé de 12000 à 20000 clients en utilisant cette version.

Nouveau dans la version .p53 :

  • Smart Sources V2 est une amélioration de Smart Sources pour essayer de favoriser les fichiers rares.

Nouveau dans la version .p52 :

  • Les serveurs edonkey n'utilisent que les dix premiers mots présents dans un nom de fichier pour les recherches.
    Si un fichier a pour nom "Mes vacances avec Viviane dans l'ardèche. divx fr ripped by Francois.avi", une recherche sur "Francois" ne trouvait pas ce fichier.

    La version .p52 indexe tous les mots, sans limite.

  • N'indexe pas les mots de une lettre.

Nouveau dans la version .p51 :

  • Corrections diverses. N'utilisez plus la .p49 ou .p50
  • N'envoie pas des Sources LOWID vers d'autres clients LOWID.
  • La commande vc affiche une colonne supplémentaire, avec le nombre de fois où un client a été donné comme Source.

Nouveau dans la version .p49 :

  • Concept 'Smart Sources' :
    Dans une réponse à une requête de demande de sources pour un FILEID particulier, choisir intelligemment les sources au lieu des 'N' premières présentes sur le serveur.
  • Au lieu d'envoyer une source à longueur de temps, être astucieux et implémenter une régulation. Il y a beaucoup de chance pour que le client soit déjà très occupé à faire de l'upload et que sa file d'attente soit déjà saturée. Avec cette évolution, nous pourrons peut être de nouveau accepter les LOWID sur nos serveurs, car l'impact des LOWID sur le réseau est réduit sensiblement.
  • les fichiers rares seront enfin servis, car la présence d'un fichier trés demandé sur un PC n'occultera pas la présence des autres fichiers comme c'etait le cas auparavant.
  • Réduction de la bande passante Upload des serveurs
    Corollaire : réduction de l'influence des LOWID sur les serveurs.
  • Réduction des files d'attente chez les clients
  • Réduction du trafic inter-clients : quand un client recoit des dizaines de connexions d'autres clients (par seconde !), il en jete 99% à la poubelle : Inutile de dire que cela génère du trafic inutile qui réduit la bande passante utilisable pour les transferts effectifs.

    Pour plus d'informations sur 'Smart Sources' allez voir cette page.

Nouveau dans la version .p44 :

  • Filtrage des utilisateurs mldonkey (MLD). Utilisez "nbuser -Z 1" pour autoriser les connexions mldonkey.

Nouveau dans la version .p43 :

  • La version .p43 est compatible avec le patch 'linux-mpss'. Ce patch nous permet d'utiliser une taille de page mémoire de 4Mo au lieu de 4Ko.
    Ces pages de 4Mo sont utilisables avec des CPU Pentium+, qui fournissent PSE. (PSE : Page Size Extensions)
    Nous divisons l'utilisation des TLB par un facteur 1024 ! Cela bénéficie aux programmes qui utilisent plus de 16Mo de mémoire.
    Le dserver sous linux est un SUPERBE candidat à l'utilisation des pages de 4Mo.
    Le dserver .p43 alloue de la mémoire en utilisant des appels mmap() avec des blocs de 4Mo, suivis d'un appel à madvise() comme décrit dans la doc mpss.
    Bien entendu, les version .p43 et supérieures fonctionnent aussi sur un linux standard sans SuperPages.

    Depuis le 14 Aôut, le serveur ed2K lugdunum utilise linux 2.4.19 + Super Page patche de Naohiko Shimizu.
    'Super Page patch' est une méthode concurrente à mpss et semble bien fonctionner. Sa disponibilité en linux 2.4.19 lui donne un avantage décisif sur mpss.

Nouveau dans la version .p41 :

  • nbuser -F affiche les compteurs associés aux filter[] que JED a documenté ici.
    Nous proposons d'utiliser dans votre donkey.ini :
    filter[0]=(#FILENAME .part)
    filter[1]=(#FILENAME .met)!(#FILENAME maurice)

Nouveau dans la version .p40 :

  • Les trames welcome[] sont groupées en un seul message réseau. Cela économise de la bande passante.

Nouveau dans la version .p38 :

  • La commande vc (voir clients) a été modifiée pour afficher les compteurs des octets émis/reçus pour chaque client. D'autres statistiques seront disponibles dans les versions suivantes pour nous permettre d'étudier les impacts de nos ajustements.
  • Encore un paquet d'optimisations destinées aux gros serveurs et préparant l'évolution "Smart Sources"

Nouveau dans la version .p36 :

  • Un bug incroyable du dserver original a enfin été trouvé et corrigé. Le serveur ne traitait pas correctement le EOF (End Of File), que les appels recv() indiquent avec une valeur de retour nulle. Le serveur, au lieu de fermer la socket, continuait indéfiniment à tenter des recv() sur les fichiers : Sur-consommation de CPU, et surtout non prise en compte de certaines déconnexions de clients. Quand ceux-ci voulaient se reconnecter, le serveur leur attribuait une ID basse ou leur refusait l'entrée si sa configuration lui interdit les LOWID. Le serveur se rendait compte de la deconnexion uniquement quand il tentait d'envoyer son ping (toutes les 70 à 100 secondes selon les versions)
  • Encore un paquet d'optimisations destinées aux gros serveurs.

Nouveau dans la version .p35 :

  • Un seul appel système send() au lieu de deux. Au lieu d'utiliser le flag MSG_MORE lors du premier send(), nous avons modifié plus profondément le dserver pour qu'il ne fasse qu'un seul send(). Ceci permet à dserver de s'exécuter sur des versions linux plus vieilles ainsi que sur des machines sous OpenUnix8 de Caldera.

Nouveau dans la version .p31 :

  • Possibilité d'accepter des LOWID en fonction de leur pseudo. Mettez dans un fichier "edonkey.access" des lignes avec "pseudo:1", et utilisez la commande "nbuser -A edonkey.access" qui construit une table de hash et la charge dans le dserver. Vous pouvez maintenant accepter des connexions LOWID de personnes qui vous ont prouvé qu'elles ne pouvaient pas obtenir un HighID.
  • Possibilité de modifier le drapeau 'public' avec la commande nbuser.
  • Possibilité de modifier le nombre maximal de sources inclues dans une réponse à une requête "FileID searchs" UDP & TCP. (defaut 230)

Evolutions futures

  • Heu... avez vous des suggestions ?

Nous vous proposons aussi son compagnon nbuser qui va vous permettre depuis une autre console d'obtenir des infos sur le serveur et de modifier dynamiquement certains paramètres.
$ gzip -d nbuser.gz
$ chmod 755 nbuser
$ cp nbuser /usr/bin # (seulement si vous êtes root)
$ nbuser
Patch en version p51
4650 users 239676 files (127111) moyenne=51.5432
Start Time : Thu Aug 22 07:26:44 2002
Nombre max de users : 5700
37583 connexions refusées à cause de MaxClients
minVersion: 57 maxVersion: 2000
 74 connexions refusees a cause de minVersion
tableSize=65029 public=1 threads=20 thisIP=62.161.204.20:4661
  maxSearchCount=200 maxUDPSearchCount=50
Toutes les 2*10 secondes, le timer provoque l'envoi de pings a 1/10 des clients (idx 3)
delai entre les 'Finding other servers' : 3600 secondes
malloc8() stats : 5 blocs de 4Mo alloues, reste 1305864 octets dans le tas
Limite de shares : 1000/client. Second seuil : 4000/client
222 clients ont voulu depasser la limite:
 total shares = 2213683, moyenne = 9971.55 Nombre max : 50682
56 clients ont ete deconnectes pour avoir depasse le second seuil
Filtre AntiLowID actif. 65431 connexions LowID rejetees. 3 connexions LowID sont parties
Filtre AntiBOT desactive. 56 connexions de BOT refusees
Filtre AntiMLD desactive
TCP stats :
  97733 connects, 31156 ServerList, 128804 Publish, 30637 Search,
  2476372 SourceSearch, 131 UserSearch, 2683 AskCall, 264 Unk9,
  1060 cursorsearch,
  122126 (7.89674 %) publications refusees par les filtres filter[]
  3404708 reponses TCP envoyees
UDP stats :
  743743 Ping req 51598 Search req 15087519 FileID search 297 Ask LowID
  154 Search User 2232 ListServ req 609 ListServ reply 1613 ServDesc req
  212 ListServ ask
  743743:10412402 PingReply 752870:104584455 SearchResult 6089777:217669679 FileIDResult
  58:348 UnknwnID 212:90732 ListServReply 1613:87102 ServDescReply

  7588273 reponses UDP envoyees. 332844718 octets (sans les headers UDP)
  545316362 octets (y compris les headers) debit : 9031.71 octets/s
SmartSources: TCP : max=20 nb=12S/60sec 14574192 hits 2218224 misses 1956211 scan 340689 reorg
SmartSources: UDP : max=6 nb=8S/60sec 16993986 hits 92998529 misses 9449142 scan 1163377 reorg

Pour modifier le nombre maximal de clients/users à une valeur 1200 :
$ nbuser -m 1200
Pour autoriser les connexions de LowID :
$ nbuser -l 1
Pour interdire les connexions de LowID :
$ nbuser -l 0
Pour autoriser les connexions de BOT-lite :
$ nbuser -B 1
Pour interdire les connexions de BOT-lite :
$ nbuser -B 0
Pour modifier la valeur limite du nombre de partages (shares) à 90 (valeur par défaut : 120) :
$ nbuser -s 90
Pour modifier la valeur du second seuil des partages (shares) à 2000 (valeur par défaut : 5000) :
$ nbuser -D 2000

Pour le filtrage des IP francophones,
nous vous proposons d'installer ces fichiers dans /etc/rc.d
french french_0 french_192 french_208
et d'ajouter la ligne suivante à la fin de /etc/rc.d/rc.local pour que le filtrage soit automatiquement activé lors d'un reboot
/etc/rc.d/french

Pour le 'traffic shaping',
ou contrôle de la bande passante, installer shaped dans /etc/rc.d et ajouter cette ligne à la fin de /etc/rc.d/rc.local
/etc/rc.d/shaped
Avant de l'utiliser, il vous faudra probablement modifier les 3 variables définies au début de ce fichier : UPLINK LOWUP et DEV
Si vous avez un réseau local et que vous avez configuré votre machine linux comme passerelle (MASQUERADE), vous pouvez demander à ce que le trafic en provenance du réseau local soit considéré comme prioritaire. Ainsi, même si votre serveur eDonkey est à pleine capacité, vous pourrez surfer sur Internet comme si de rien n'était :
iptables -A PREROUTING -i eth1 -t mangle -j MARK --set-mark 2
D'autre part, si vous utilises PPPOE qui a un MTU de 1492, nous vous conseillons cette règle pour que votre MASQUERADE fonctionne correctement :
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Nous vous conseillons d'installer /etc/rc.d/adjust et de l'activer par l'ajout de la ligne suivante dans /etc/rc.d/rc.local :
/etc/rc.d/adjust
Ce fichier change certains paramètres système linux pour un fonctionnement optimal du serveur edonkey.

Enfin, nous conseillons de lancer le programme en utilisant un script script.sh et la commande screen :
# screen -d -m ./script.sh

Nous vous proposons une version modifiée de tcpdump (analyseur réseau) qui décode le protocole edonkey UDP 4665.
Usage :
# tcpdump -p -n -s 1600 port 4665
17:48:53.199825 80.15.37.251.1095 > 62.161.204.20.4665: ed2k FileID search hash=4938BC08FC797F0ED9007AD3286E3998
17:48:53.217966 62.212.110.223.2297 > 62.161.204.20.4665: ed2k FileID search hash=8C6E353331519603C2217A6C9070B98B
17:48:53.218973 24.202.51.101.1041 > 62.161.204.20.4665: ed2k FileID search hash=43D12BBDE83FC8BDF112330F463931E9
17:48:53.220204 62.161.204.20.4665 > 80.15.94.151.2390: ed2k Ping reply challenge 119422780 nbuser=4492 nbfile=440958 (DF)
17:48:53.223180 62.161.204.20.4665 > 81.65.55.10.3037: ed2k FileID result hash=1F9E0F75A78EB744BEFC3A71B204493C 108 sources (DF)
17:48:53.225722 80.14.220.19.4628 > 62.161.204.20.4665: ed2k Ping req challenge 3469
17:48:53.225935 202.175.91.40.1025 > 62.161.204.20.4665: ed2k Ping req challenge 5400597
17:48:53.226148 80.11.127.71.3314 > 62.161.204.20.4665: ed2k FileID search hash=FB997EF2ECE60053C665816D245DBB73
17:48:53.247157 62.161.204.20.4665 > 213.44.161.69.1085: ed2k FileID result hash=B99128E049F681E607265BD078EB1E32 48 sources (DF)

EMail