Propagast 1.0 ! Propagast 1.1 UPDATE 11/12/2009 : Propagast est passé en version 1.1 ! (http://www.nrealiz.com/propagast/1.1/README) Propagast 1.0 Avis aux organisateurs de LAN possédant quelques serveurs musclés sous GNU/Linux ! Vous avez sûrement déjà rencontré le problème suivant : vous voulez héberger sur un serveur plus de parties que le nombre de ports que cherche le browser du jeu. Par exemple, Counter-Strike ne cherche que sur les ports 27015 à 27020 ce qui ne permet de n'héberger que 6 parties (visibles par le browser) sur une machine. Pour surmonter ce problème on peut ajouter de nouvelles interfaces reseau. Cet ajout peut se faire matériellement, ou bien en recourrant aux alias. Avec plusieurs IP, on peut alors lancer les serveurs en leur précisant quelle IP binder (avec "+set net_ip" pour Quake et "+ip" pour CS. Cela permet alors d'hoster, dans le cas de CS toujours, 6 serveurs par IP. Mais un problème surgit désormais : les parties ne sont plus visibles dans le browser du jeu ! En effet, lorsqu'on ne précise pas l'IP à binder, le serveur utilise l'IP 0.0.0.0 pour l'écoute, ce qui lui permet de recevoir les paquets ayant pour IP de destination une IP de broadcast. Dans le cas des jeux, cette IP de broadcast est en général 255.255.255.255. Par contre, lorsqu'on spécifie l'IP à binder, le serveur crée un socket écoutant sur ladite IP, et le noyau Linux ne fournit plus à ce socket que des paquets unicast destinés à cette IP précisément. C'est pourquoi les broadcasts ne sont plus reçus. Le programme Propagast permet de continuer à lancer les serveurs en spécifiant l'IP, et de les voir dans le browser du jeu, "All Seeing Eye" et consorts, sans avoir à modifier quoi que ce soit au niveau du jeu ou de son serveur. Cela fonctionne pour Counter-Strike, Quake III, Enemy Territory, et tous les autres jeux reposant sur des broadcasts UDP pour découvrir les parties créées dans le réseau local. Le principe général du fonctionnement de Propagast est de récupérer au passage les broadcasts UDP, et de les rediriger vers tous les sockets adéquats (écoutant sur une IP appartenant au réseau associé à l'IP de broadcast, et écoutant sur le bon port). La particularité de Propagast est qu'il fonctionne en mode utilisateur, par opposition au mode noyau. C'est-à-dire que même s'il modifie le comportement (relatif au routage) du noyau, il n'y a pas besoin de patcher ce dernier. Plus concrètement, Propagast a besoin : - d'un système GNU/Linux ! - de modules iptables : ip_tables, iptable_filter et ip_queue - du package de développement de la libc Pour le faire marcher pour CS et Q3, la marche à suivre rapide est la suivante : - décompresser l'archive avec "tar xzvf propagast-1.0.tar.gz" - entrer dans le repertoire créé, avec "cd propagast-1.0" - taper "make" (il y a aussi "make debug" mais les messages sont très... disons brut) - passer en utilisateur root avec la commande "su -" - taper "./propagast_fe.sh start", il tourne maintenant ! - taper "./propagast_fe.sh stop" pour l'arrêter En cas de problème, lisez en entier le README.fr fourni dans le package, et respectez le à la lettre. En cas de bug, vous pouvez m'envoyer un mail (stephane.ardouin@gmail.com) en expliquant avec le plus de détails possible la situation. Voilà, si vous êtes intéressés, vous pouvez essayer le programme (http://www.nrealiz.com/propagast/1.0/propagast-1.0.tar.gz). S'il vous a rendu service durant une LAN, je serais ravi de recevoir un petit mail pour me raconter ! Merci à BonG (NrealiZ) et olrik (Futurolan) pour leur aide ! Propagast 1.0 Copyright (C) 2004 Stephane Ardouin *** Introduction ------------ Propagast has been written t- solve problems like the following one : You run some Counter-Strike servers on a LAN and want t- host more than the 6 visible servers viewable by browsing in the game browser withing the game (ports 27015 t- 27020 in this case). With more than one network interface card (reals cards or aliases), you figured out that you could host 6 servers from 192.168.0.1:27015 t- 192.168.0.1:27020 and 6 more from 192.168.0.2:27015 t- 192.168.2:27020, thanks t- the "+ip" option of the HLDS CS server. But these servers n- longer appear in the CS game browser ! Actually, without running the servers with the "+ip" option, they listen on the 0.0.0.0 IP s- that they can receive broadcast (and unicast) packets. By binding an IP with the "+ip" option, the server will only receive unicast packets destined t- this very IP. S- broadcast packets don't g- here anymore. Propagast allows you t- run all these CS servers with the "+ip" option, and t- still view them in the game browser, or the "All Seeing Eye", or whatever, without any modification on the client side. Propagast has t- run on the server. But Propagast isn't stuck on Counter-Strike servers, you can use it for Quake III servers, or other games using UDP broadcasts as a discovery way. Generally speaking, Propagast grabs specific UDP broadcast packets, and redirects them t- all the sockets listening on an IP belonging t- the network corresponding t- the broadcast IP of the packet (and listening on the same port of course). The particularity of Propagast is that it runs in userland, s- you'll avoid patching the kernel t- alter the behavior of routing. Requirements ------------ - GNU/Linux - ip_tables, iptable_filter and ip_queue loadable kernel modules - libc development package Compiling and using it ---------------------- - extract the archive with "tar xzvf propagast-1.0.tar.gz" - enter in the propagast-1.0 directory ("cd propagast-1.0") - you may edit src/include/propagast.h t- alter SOCK_LIST_REFRESH_RATE (but default behavior is fine) - "make" (or "make debug" if you want t- figure out what happens while propagast runs) - edit propagast_fe.sh t- make it fit your needs (if you plan t- host CS and Q3 you shouldn't have t- change anything) - become root with su - "./propagast_fe.sh start" - "./propagast_fe.sh stop" (will als- clean the mess propagast did t- your iptables rules) Author ------ Stephane Ardouin from NrealiZ (http://www.nrealiz.com) If you used propagast during a LAN, I'd be happy t- receive a mail telling me about it. :) Credits ------- - libipq manual page - netstat source code - gen_ip.c from netfilter source code - BonG from NrealiZ for discovering problems with the package - olrik from Futurolan for testing in real conditions Bug reports ----------- mail : stephane.ardouin@gmail.com Download ----------- Propagast v1.0 - http://www.nrealiz.com/propagast/1.0/propagast-1.0.tar.gz