Un relais StreetPass avec un Raspberry Pi

Connaissez-vous StreetPass ? Cette fonction apparue avec la Nintendo 3DS permet de rencontrer des gens avec la console, via Wi-Fi, et de remplir des petits jeux ou d’obtenir des objets dans certains jeux, notamment les derniers Pokemon. Et il est possible de trouver des amis… sans sortir de la maison.

Par défaut, l’échange StreetPass se fait via Wi-Fi entre deux consoles en veille, une méthode assez efficace en ville et dans les zones peuplées, mais inaccessibles pour certaines personnes. Nintendo a donc mis en place des relais sur des réseaux Wi-Fi ouverts, notamment aux Etats-Unis et en Allemagne : quand une console arrive à proximité d’une relais, elle dépose ses données et reçoit les données d’une autre personne. Le fonctionnement se base sur l’adresse MAC du point d’accès et son SSID, il est donc assez facile d’installer un relais.

Il existe différentes manières de monter une relais, mais le plus pratique reste un Raspberry Pi. Il faut un modèle B(+) avec de l’Ethernet, ainsi qu’une carte Wi-Fi compatible.

Une fois le système de base installé, on a besoin de quelques outils.

sudo apt-get install hostapd bridge-utils

On va maintenant régler les paramètres réseaux.

sudo nano /etc/network/interfaces

Le contenu doit ressembler à ça, à modifier en fonction de votre réseau (ici, je considère que vous avez des adresses en 192.168.1.x).

auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.151
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
broadcast 192.168.1.255
bridge-ports eth0 wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
pre-up ifconfig wlan0 192.168.0.1

Maintenant, on va installer de quoi créer le réseau Wi-Fi. Attention, le réseau ne sera pas protégé, la seule « protection » sera un filtre sur l’adresse MAC des consoles.

sudo nano /etc/hostapd/hostapd.conf

Coller le contenu suivant.

interface=wlan0
bridge=br0
driver=nl80211
ssid=NZ@McD1
bssid=4E:53:50:4F:4F:49
hw_mode=g
channel=6
auth_algs=1
wpa=0
macaddr_acl=1
accept_mac_file=/etc/hostapd/mac_accept
wmm_enabled=0
ignore_broadcast_ssid=0

Maintenant, ajoutez un fichier avec la liste du filtre.

sudo nano /etc/hostapd/mac_accept

Il faut ajouter l’adresse MAC de votre (vos ?) console(s) sous la forme 11:22:33:44:55:66.

Il faut maintenant modifier un fichier de configuration.

sudo nano /etc/default/hostapd

Ajoutez la ligne suivante.

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Maintenant, lancez le programme.

sudo service hostapd start

C’est le moment de tester si ça fonctionne avec la Nintendo 3DS. Normalement, l’icône Nintendo Zone devrait apparaître si vous vous connectez au réseau en question. La connexion à Internet (via le navigateur) ne semble pas fonctionner, mais je ne sais pas si ça vient de ma configuration elle-même ou du fonctionnement de la Nintendo Zone.

Normalement, si vous mettez la console en veille, vous devriez recevoir des Mii assez rapidement. Le tuto est celui qui est là, simplifié sur certains points. Vous trouverez aussi pas mal d’informations sur cette page, avec des listes de serveurs, par exemple, et la possibilité d’effectuer des cycles.

Maintenant que ça fonctionne, on va tricher un peu : on va rendre le relais plus efficace. Par défaut, une console va recevoir des Mii puis va se mettre en « pause » pendant 8 heures. Mais en modifiant l’adresse MAC du relais, on peut relancer le système.

Première chose, créer une liste de serveurs. J’ai utilisé le lien précédent pour en choisir.

sudo nano /etc/hostapd/mac_nintendozone

Je vous laisse choisir, j’en ai mis une dizaine, avec à chaque ligne une adresse MAC suivie d’un SSID, sous la forme suivante. Ne dépassez pas 48 serveurs, le script va tourner toutes les 10 minutes.

00:22:6b:6e:34:3a NZ@McD1
4E:53:50:4F:4F:40 NZ@McD1

Maintenant, le script.

sudo nano /etc/hostapd/nintendozone.sh

Je vous mets la version sans les commentaires, la complète est disponible là.

#!/bin/sh
trap exit SIGINT SIGTERM
SLEEP_TIME=600
MAC_FILE=/etc/hostapd/mac_nintendozone
STREETPASS_REFRESH=28800
CONFIG_FILE=/dev/shm/nintendozone.conf
while true ; do
sort -R $MAC_FILE | while read MAC SSID; do
cat > $CONFIG_FILE <<_EOF_
interface=wlan0
bridge=br0
driver=nl80211
ssid=$SSID
bssid=$MAC
hw_mode=g
channel=6
auth_algs=1
wpa=0
macaddr_acl=1
accept_mac_file=/etc/hostapd/mac_accept
wmm_enabled=0
ignore_broadcast_ssid=0
_EOF_
timeout $SLEEP_TIME hostapd $CONFIG_FILE
done
done

Maintenant, on le rend exécutable.

sudo chmod +x /etc/hostapd/nintendozone.sh

On lance le tout au démarrage.

sudo nano /etc/rc.local

On ajoute à la fin (avant le exit 0) la ligne suivante.

/bin/bash /etc/hostapd/nintendozone.sh &

Ensuite, il suffit de redémarrer et ça devrait fonctionner. Toutes les 10 minutes, le relais devrait changer d’adresse MAC.