Créer un serveur PC-Dreamcast manuellement, c'est facile!
EDIT 23/10/2020 : Modification légère du tutorial pour rajouter l’intégration de certains services nécessaires pour certains jeux, tels que Planet Ring.
Depuis 2016, ma Dreamcast se connectait en ligne accompagné de mon Raspberry Pi 1, grâce à des tutos qui ne sont plus aujourd’hui d’actualité. Et bien que ça fonctionne, d’autres jeux récemment restaurés, tels que NBA2K2, Quake 3 Arena ou Alien Front Online, eux, ne fonctionnaient pas.
De plus, j’avais eu une envie de savoir comment communiquait le multijoueur en ligne de la Dreamcast et d’analyser les paquets entrants et sortants, et malgré tous mes essais, rien ne fonctionnait, Wireshark ne voyant rien sur ma machine de pentesting. C’était une déception, mais je ne veux pas abandonner aussi vite que ça (bah oui, sinon je n’aurais même pas écrit l’article…).
Alors, histoire d’en profiter aussi aux autres, et probablement aux 0.0000034% des curieux de ce monde qui s’intéressent à la restauration des serveurs d’anciens jeux et de plateformes retro, j’ai décidé de vous faire partager ma courte aventure. Par la même occasion, j’en profite pour upgrader mon serveur PC-DC en passant sur un Raspberry Pi 2 afin d’avoir un peu plus de confort, et de pouvoir mettre Wireshark graphiquement (qui lui va vraiment tout capturer).
Je suis déjà au courant que Kazade a sorti une image prête à l’emploi pour un Raspberry Pi, mais ce n’est absolument pas ce que je désire ; je préfère l’installer manuellement afin de comprendre ce qu’il a fait. Et je me rappelle lui avoir demandé de sortir les sources pour pouvoir les utiliser plus tard ; et devinez quoi : il l’avait fait. Community Done Right ™️ !
Préparatifs
AVANT TOUTE CHOSE, CE TUTORIAL A ETE FAIT AVEC RASPBIAN BUSTER. LA SOURCE DU DREAMPI A ETE FAITE AVEC PYTHON2. Si il y a eu des mises à jour, je ne pourrais pas entièrement vous aider.
Bref, je ne m’attarde pas dans les détails. De mon côté, comme j’ai dit, un Raspberry Pi 2 va faire l’affaire avec une carte microSD de 8Go. J’ai aussi mis une clé WiFi et le modem USB qui va être utilisé pour le serveur PC-Dreamcast. Enfin, j’ai temporairement branché un clavier USB et une souris uniquement pour le début de l’installation (on utilisera SSH et accessoirement VNC pour analyser le trafic entrant/sortant après).
D’ailleurs, n’oubliez pas de faire un inducteur de voltage pour votre console, si c’est la première fois que vous faites un Dreampi. Si vous n’avez pas les connaissances pour, vous pouvez en acheter un directement ici.
Première étape, l’image de Raspbian, qui va être nécessaire pour nos opérations. Vous la récupérez à cette adresse. De mon côté, comme ce Raspberry Pi n’est utilisé que pour ma Dreamcast et pour une capture de trafic locale, autant avoir un système léger. Pour l’installation sur votre carte SD, n’hésitez pas à utiliser BalenaEtcher (recommandé, car cross-platform) ou Win32DiskImager pour l’écrire sur votre MicroSD.
Une fois l’écriture faite et l’installation terminée (ce n’est pas à moi de vous l’expliquer, vous êtes grand quand même), nous allons terminer par un contrôle à distance de la machine :
sudo raspi-config
Activez le service SSH :
A partir de la, connectez-vous en SSH avec votre client (PuTTy voire directement PowerShell) : nous allons passer à l’étape la plus intéressante.
Que faire sur la Dreamcast ?
J’ai utilisé DreamKey 3.0 pour la configuration de la Dreamcast pour le online.
Dans configuration du modem, mettez Tonalité
.
Dans la config. AT, mettez ATX0
dans la commande AT, et sauvegardez.
Dans les informations d’utilisateur, mettez ce que vous voulez. De mon côté, j’ai mis « dream
» en compte, et « dreamcast
» en mot de passe.
Mettez 111-1111
dans le champ du téléphone #1. Nous mettons cette valeur, car si le numéro de téléphone n’est pas « valide », Alien Front Online refusera de se connecter…
Dans le serveur DNS, laissez en automatique. C’est le Dreampi qui va s’occuper de tout.
Pour l’adresse mail, ne mettez rien, ce n’est pas utile… Sauf si Sega Swirl vous interesse…
Enfin, sauvegardez.
Installation de Dreampi
Nous avons terminé nos préparatifs. Allons donc télécharger le projet DreamPi de Kazade. Nous allons l’installer dans notre bureau :
cd $HOME/Desktop ; git clone https://github.com/Kazade/dreampi.git && cd dreampi
Une fois notre projet git téléchargé, allons tester l’utilitaire (qu’il faudra obligatoirement lancer en root) :
sudo python dreampi.py --no-daemon
A notre grande surprise, le programme va quitter à cause de librairies manquantes. Pour y remédier, nous allons installer les paquets Python suivants :
sudo pip install miniupnpc sh python-iptables
Une fois installé, si nous relançons le programme, il s’exécutera, mais va se plaindre de plusieurs problèmes, avant de s’arrêter de nouveau. Quelle malchance, n’est-ce pas..?
Heureusement, nous pouvons vite déterminer les paquets manquants à installer :
sudo apt install ppp dnsmasq dnsutils
ppp est utilisé pour que notre Raspberry Pi fasse un pont avec notre modem USB. dnsmasq, lui, sera utilisé pour faire office de petit serveur DHCP, et redirigera le serveur DNS (utilisé plus tard).
Une nouvelle fois, rentrez notre commande python. Et la, c’est la surprise :
Ne prêtez pas attention aux erreurs du début, l’utilitaire vérifie avant si un lien avec des DNS plus récent existe sur le site DreamcastNow, au cas où leur master-server aurait migré. Excepté cette « erreur », tout s’exécute, et on aperçoit même des commandes de modem ! Ça commence à sentir bon !
Si nous testons ainsi avec notre Dreamcast (ici Quake 3 Arena US), voici ce que ça donne :
Déconnectons-nous, et décryptons le problème. On a pu s’authentifier parfaitement avec notre modem (et même envoyer du « son », nécessaire pour l’authentification sur Quake 3 Arena), mais comme on ne retrouve pas les serveurs de Sega et d’iD Software, on reste bloqué. Ça reste cependant un bon début, car on voit du trafic directement depuis le Raspberry. Pour palier ce souci, il faudrait rediriger les DNS vers d’autres serveurs. Heureusement, Kazade a pensé à nous : nous devons juste replacer le fichier de configuration dnsmasq
par le sien :
sudo cp etc/dnsmasq.conf /etc/dnsmasq.conf ; sudo systemctl restart dnsmasq
On se reconnecte, et on regarde ce qui se passe :
Ça marche, et on voit enfin les serveurs (dont les miens) ! Du coup, voici une vérification de Wireshark sur ma machine, et sur le Raspberry Pi 2 (n’oubliez pas d’être en root pour voir les interfaces à écouter) :
Aller plus loin
Tout fonctionne, mais il faudra lancer manuellement le programme à chaque fois que vous souhaitez utiliser le Dreampi. Zut… Pour automatiser tout cela, il faudra réaliser un service systemd pour s’activer au démarrage, mais je sais que vous en êtes capable (indice : /etc/systemd ).
Par ailleurs, n’oubliez pas de mettre le contenu de dreampi dans /usr/local/bin/.
sudo mv ./* /usr/local/bin
Ensuite, occupons-nous des quelques jeux spécifiques qui nécessitent un service (comme les jeux 2K2 ou encore Planet Ring). Lors de mes tests, j’ai eu un problème de dépendance de paquets, je rajoute ainsi la commande pour corriger l’erreur:
cd arm && sudo dpkg -i ./*.deb ; apt --fix-broken install
Enfin, inclus avec Dreampi, se trouve le service Dreamcast Now!, qui permet de savoir qui joue en direct à la Dreamcast, en précisant aussi leurs derniers jeux ! Un service vraiment utile.