Starcraft est specifique, car deja age, et jouer sur BattleNet a plusieurs deriere la meme ip a souvent ete considere comme imposible.
/!\ Ce qui suit est issu de mes analyses avec Wireshark (=Ethereal), donc c’est sujet a caution et c’est destine a des utilisateurs un peu chevronnes /!\
Apres avoir reussi quelques parties sur BNet, une mise a jour a pourri mes IPtables et depuis impossible de rejouer. J’en appelle a la comunnaute clubic pour reiterer ca. Ou mieux : comprendre comment marche tout ce bazar. Dans tous les cas, c’est un bon defi pour tester vos competences en telecoms XD…
Sachez aussi qu’on trouve relativement peu de doc serieuse sur le sujet…
Starcraft fonctionne en UDP, avec tous les ennuis qui vont avec. Seul le “lobby” (= la chatroom avant le debut de la game) est en TCP. Au moment du lancement (dans la connection TCP) bnet envoie a chaque jouer les ips des autres joueurs. Le TCP est ensuite ferme, et la partie se deroule en UDP.
Quand plusieurs clients sont derriere la meme IP, BNet va tous leur envoyer l’edresse du routeur charge du DNAT (typiquement l’IP internet de la freebox). Le seul moyen pour arriver a jouer est donc de router :
- non seulement les paquets des clients vers BNet
- mais aussi les paquets entre les clients
Pour cela il faut pouvoir faire du SNAT (Source Net Adr Translation) ce que peu de routeurs bas de gamme proposent, et qui n’est pas present sur les freebox (ou alors j’ai pas trouve ^^). J’ai donc pris un ordi sous linux pour faire routeur avec 1 sous-reseau entre l’ordi/routeur et la bobox, et un sous-reseau entre l’ordi/routeur et les clients
- Dans le registre on met des ports de sortie differents pour chaque client : 6112; 6113…6119
- On redirige les paquets venant de net sur le bon ordi en fonction du port en traduisant l’adresse source ET l’adresse destination. Starcraft freeze s’il y a des “incoherences” entre ce que lui a dit bnet et ce qu’il recoit. Normal pour eviter un man-in-the-middle
- Les paquets emis d’un client a destination de l’edresse web de la box doivent etre rediriges vers le bon client. Si y’en que 2 c’est facile. Si y’en a plus on peut peut-etre se debrouiller avec les ports, mais pas sur… Ici aussi faut DNAT ET SNAT
J’ai fait tourner ca quelques parties avec 2 clients… Si quelqu’un arrive a refaire/faire mieux je suis tres preneur…
Edité le 01/02/2008 à 21:04