Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Configurer les ports eMule ou mlDonkey pour un routeur Linux

Première rédaction de cet article le 2 août 2007
Dernière mise à jour le 8 août 2007


Le logiciel de partage de fichiers eMule, s'il n'est pas contactable par d'autres utilisateurs depuis l'extérieur, rend un service dégradé. Comment le rendre contactable si le routeur est une machine Linux ?

On sait que le NAT est une source d'ennuis sans fin, notamment pour les applications pair à pair. Sa présence nécessite beaucoup de bricolages comme ici, où nous allons faire du port fowarding, c'est-à-dire relayer les paquets IP depuis un pair vers notre client eMule ou mlDonkey, via un routeur Linux.

Le cas d'un routeur Linux n'est pas actuellement documenté en http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_entries&cat_id=251 mais, par contre, il y a un exemple dans l'excellente documentation de mlDonkey. Mais c'est de toute façon assez simple. Il faut commencer par connaître les ports utilisés. eMule en change désormais, pour passer les filtrages. Allez dans Préférences puis Connexion et regardez "Port client". Notez la valeur pour le port TCP et le port UDP.

Pour mlDonkey, on peut utiliser la commande portinfo de la console :

> portinfo

        --Portinfo--
Network   |  Port|Type
----------+------+-------------------
BitTorrent|  6882|client_port TCP
BitTorrent|  6881|tracker_port TCP
Core      |  4080|http_port
Core      |  4000|telnet_port
Core      |  4001|gui_port
Donkey    |  4550|client_port TCP
Donkey    |  4554|client_port UDP
Donkey    | 18703|overnet_port TCP+UDP
Donkey    | 10349|kademlia_port UDP
G2        |  6347|client_port TCP+UDP
Gnutella  |  6346|client_port TCP+UDP

ou bien un très bon script bash.

Mettons que le port TCP soit 4550 et le port UDP 4554. On configure le routeur ainsi avec iptables dans un petit script shell :

#!/bin/sh

# Valeurs specifiques a mon site
# Ports utilises par eMule / ml Donkey
tcp=4550
udp=4554
# Interface d'entree
in_interface=ppp0
# La machine qui a eMule
emule=10.19.1.25

# TCP
iptables --table nat --append PREROUTING --protocol tcp \
    --in-interface ${in_interface} --dport ${tcp} \
    --jump DNAT --to ${emule}:${tcp}
iptables --insert FORWARD --protocol tcp --in-interface ${in_interface} \
   --dport ${tcp} \
   --jump ACCEPT

# UDP
iptables --table nat --append PREROUTING  --protocol udp \
     --in-interface ${in_interface} --dport ${udp} --jump DNAT \
     --to ${emule}:${udp}
iptables --insert FORWARD --protocol udp --in-interface ${in_interface} \
    --dport ${udp}  \
    --jump ACCEPT

Vous pouvez vérifier que les règles ont bien été insérées avec iptables --table nat --list PREROUTING et iptables --list FORWARD. L'option -e est également très pratique car elle affiche le nombre de paquets qui ont été acceptés par chaque règle. tcpdump ou wireshark sont également des moyens très pratiques de voir ce qui se passe sur le réseau, en cas de problèmes, ou tout simplement pour apprendre.

Pour être exécutées automatiquement au démarrage de la machine, ces instructions doivent être mises dans un fichier exécutable, placé dans le répertoire des scripts exécutés au démarrage. Par exemple, sur Debian, on les met dans un fichier nommé, mettons, port-forwarding, placé dans /etc/init.d, et on place les liens symboliques nécessaires avec une commande comme sudo update-rc.d port-forwarding start 2 3 4 .. Si l'interface vers l'Internet est une interface dynamique, par exemple avec PPP, on peut plutôt mettre le script dans le répertoire des commandes exécutées lorsque l'interface devient active, /etc/ppp/ip-up.d.

Une fois ce réglage fait, cliquez sur "Test des ports" dans la même fenêtre Préférences -> Connexion -> "Port client". Votre navigateur va se connecter à un service Web qui doit tester TCP et UDP, vous afficher qu'ils marchent, puis un message sympa du genre « Amusez-vous bien avec eMule » qui vous informe que vous n'êtes plus un membre de seconde classe, un méprisable Low ID. Pour mlDonkey, vous pouvez regarder votre ID avec la commande console id :


> id
For 89.54.92.142:3333 () --->   waiting
For 80.239.200.101:3000 (BiG BanG 2) --->   8212756 (LowID)
For 62.241.53.2:4242 (DonkeyServer No1) --->   13844656 (LowID)
For 80.239.200.99:3000 (BiG BanG 1) --->   10864435 (LowID)

Si on a bien activé la correspondance des ports, on doit avoir plutôt quelque chose comme :

For 67.159.44.187:4232 (www.wmule.com ) --->   192.0.2.9 (HighID)
For 212.179.18.142:4232 (best hash ) --->   192.0.2.9 (HighID)
For 67.159.44.107:4232 (www.wmule.com ) --->   192.0.2.9 (HighID)
For 212.179.18.134:4232 (www.wmule.com ) --->   192.0.2.9 (HighID)

Si on veut connaitre tous les détails techniques, ils sont bien exposés en http://www.emule-project.net/home/perl/help.cgi?l=1&topic_id=122&rm=show_topic.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)