Jouer sur votre serveur cloud de n’importe où avec Moonlight et Tailscale
Nos serveurs sont joignables en IPv6 par défaut. Beaucoup de connexions domestiques ont l’IPv6, mais
pas toutes : certains réseaux mobiles, le Wi-Fi des hôtels et les box anciennes n’ont que l’IPv4. Vous
pouvez ajouter une IPv4 dédiée à votre serveur (5 € par mois), mais il existe une autre solution, qui
garde en plus les ports de Sunshine fermés à Internet : Tailscale. Il crée un réseau privé et
chiffré (un « tailnet ») entre vos appareils, basé sur WireGuard. Votre serveur et votre téléphone
reçoivent chacun une adresse en 100.x.y.z, et Moonlight se connecte à cette adresse comme si les
deux étaient chez vous.
Les résultats en bref
- Ça fonctionne avec le client Tailscale officiel des deux côtés : connexion directe entre les deux
machines (
tailscale ping: pong via 203.0.113.10:41641 in 1ms), Moonlight sur100.x.y.1. - Tailscale ne coûte rien de mesurable dans le stream : des essais alternés avec et sans Tailscale ont donné le même 1080p 60 fps, 7,3 à 7,8 ms de traitement côté serveur sur les deux chemins, 0 image perdue.
- Sunshine est fermé à Internet : ses ports n’acceptent que les connexions arrivant par le tailnet. Seul le tunnel est utilisé ; rien à ouvrir sur votre box.
- Faible coût CPU : le service Tailscale utilisait 3 à 4 % d’un cœur sur le serveur pendant un stream 1080p à 15 Mbit/s.
Deux façons d’avoir un tailnet
| Compte Tailscale | Headscale | |
|---|---|---|
| Ce que c’est | Le service de Tailscale gère votre réseau (offre Personal gratuite) | Serveur de contrôle open source que vous hébergez vous-même |
| Logiciel client | applications Tailscale officielles | les mêmes applications Tailscale officielles |
| Mise en place | se connecter sur chaque appareil | installer Headscale, créer des clés, y rattacher chaque appareil |
| Accessibilité | toujours joignable | Headscale doit être joignable par tous vos appareils |
La voie normale est un compte Tailscale : installez Tailscale sur le serveur et sur vos appareils, connectez-vous avec le même compte, c’est fini. Pour notre test, nous avons utilisé Headscale à la place, car nous ne voulions pas créer de compte pour un test : c’est un serveur open source qui joue le même rôle que le service de coordination de Tailscale. Le réseau lui-même est le même : les deux machines utilisaient le client Tailscale officiel (version 1.104.5), qui construit les mêmes tunnels WireGuard quel que soit le serveur de contrôle auquel il parle.
Configuration du test
| Élément | Valeur |
|---|---|
| Serveur | Debian 13, Intel UHD 770 (GPU partagé), 4 vCPU, Sunshine 2026.914, RetroArch, sway sans écran |
| Client | Debian 13, Moonlight 6.2, H.264 1080p 60 fps, décodage matériel |
| Tailnet | Tailscale 1.104.5 des deux côtés, Headscale 0.29.7 sur le serveur (.deb officiel depuis GitHub) |
| Réseau | client et serveur dans le même datacenter : sur Internet, ajoutez la latence de votre connexion |
1. Installer Tailscale sur le serveur
Tailscale publie des paquets pour Debian 13 :
curl -fsSL https://pkgs.tailscale.com/stable/debian/trixie.noarmor.gpg \
-o /usr/share/keyrings/tailscale-archive-keyring.gpg
curl -fsSL https://pkgs.tailscale.com/stable/debian/trixie.tailscale-keyring.list \
-o /etc/apt/sources.list.d/tailscale.list
apt update && apt install tailscale
Avec un compte Tailscale, lancez tailscale up et ouvrez le lien qu’il affiche pour vous
connecter. Installez ensuite l’application Tailscale sur votre ordinateur, téléphone ou box TV et
connectez-vous avec le même compte.
Avec Headscale (ce que nous avons testé), installez le serveur depuis sa release GitHub officielle,
réglez server_url dans /etc/headscale/config.yaml, puis créez un utilisateur et une clé :
headscale users create gamer
headscale preauthkeys create --user 1 --reusable --expiration 2h
tailscale up --login-server https://headscale.example.com --authkey <key> --hostname retro-server
Le client rejoint le réseau avec la même commande tailscale up --login-server … --authkey …. Dans
notre test, Headscale écoutait sur l’adresse privée du serveur, car les deux machines étaient dans le
même datacenter. En usage réel, Headscale doit être joignable par tous vos appareils, en HTTPS :
hébergez-le sur une machine avec une IPv4 publique (par exemple avec l’option IPv4 dédiée), sinon un
appareil sans IPv6 ne peut pas l’atteindre. C’est la principale raison pour laquelle un compte
Tailscale est plus simple.
2. Vérifier la connexion
$ tailscale status
100.x.y.2 retro-client gamer linux -
100.x.y.1 retro-server gamer linux active; direct 203.0.113.10:41641, tx 750808 rx 128908072
$ tailscale ping 100.x.y.1
pong from retro-server (100.x.y.1) via 203.0.113.10:41641 in 1ms
direct signifie que les deux machines se parlent sans relais. Sur Internet, Tailscale essaie
aussi de connecter vos appareils directement à travers le routeur de votre domicile (le serveur a une
IPv4 sortante pour cela). Quand il n’y arrive pas, le trafic passe par un relais Tailscale (« DERP ») :
ça fonctionne toujours, mais ajoute de la latence. tailscale status vous indique lequel des deux vous
avez obtenu.
Un ping ordinaire à travers le tunnel prenait 1,7 ms en moyenne (0,8 ms au mieux) contre 0,36 ms sans Tailscale : le chiffrement WireGuard ajoute bien moins d’une milliseconde, ce qui est invisible à côté de la latence d’une connexion Internet.
3. Garder Sunshine fermé à Internet
L’intérêt du tailnet est que Sunshine n’a pas besoin d’être joignable depuis Internet. Sur le serveur,
une petite table nftables bloque les ports de Sunshine sauf sur l’interface tailscale0 :
nft -f - <<'EOF'
table inet sunshine_tailnet_only {
chain input {
type filter hook input priority 0; policy accept;
iifname "tailscale0" accept
iifname "lo" accept
tcp dport { 47984, 47989, 47990, 48010 } drop
udp dport 47998-48010 drop
}
}
EOF
Nous l’avons vérifié depuis le client : le port 47989 de Sunshine ne répondait plus sur l’adresse
normale du serveur, et répondait (HTTP 200) sur 100.x.y.1. Pour appairer Moonlight, ouvrez
l’interface web de Sunshine par un tunnel SSH (ssh -L 47990:localhost:47990 you@100.x.y.1).
4. Jouer : Moonlight sur l’adresse en 100.x
Dans Moonlight, ajoutez le serveur par son adresse dans le tailnet (ici 100.x.y.1), appairez-le et
lancez un jeu. Moonlight a reconnu le serveur qu’il connaissait déjà et s’est connecté sans aucun autre
réglage. L’interface du tailnet a une taille de paquet plus petite (MTU de 1 280 octets) ; nous n’avons
rien eu à changer dans Moonlight pour cela.
Pour voir si Tailscale change quelque chose, nous avons streamé le même jeu quatre fois, en alternant l’adresse normale du serveur et son adresse dans le tailnet :
| Moonlight, 1080p 60 fps H.264 | Sans Tailscale | Via Tailscale |
|---|---|---|
| Fréquence d’images reçue | 60,0 à 60,4 fps | 60,0 fps |
| Traitement côté serveur (capture + encodage), moyenne | 7,5 à 7,8 ms | 7,3 à 7,4 ms |
| Traitement côté serveur, max | 10,4 à 10,6 ms | 10,5 à 10,8 ms |
| Images perdues par le réseau ou la gigue | 0 % | 0 % |
| Temps de décodage sur le client | 0,23 ms | 0,24 à 0,25 ms |
Sur le serveur, pendant le stream, le service Tailscale utilisait 2,8 à 4,2 % d’un cœur, Sunshine 13 à 17 % et l’émulateur 3 à 4 %. Lors de deux essais précédents, réalisés pendant que d’autres serveurs de test utilisaient le même GPU, le traitement côté serveur est monté à 21 à 27 ms en moyenne : cela venait du partage du GPU à ce moment-là, pas de Tailscale, comme le montrent les essais alternés ci-dessus.
5. Quelle offre ?
Tailscale lui-même ne demande presque rien. Ce qui compte, c’est le jeu : iGPU Start (2 vCPU, 8 Go de RAM, 14,99 € HT par mois) suffit pour les consoles rétro ; pour les jeux PC, nous recommandons iGPU Power (4 vCPU, 14 Go de RAM, deux fois la part GPU de Start, 29,99 € HT par mois).
Envie d’un serveur prêt à jouer ? Demandez-le par e-mail à la commande (contact@linuxgpu.eu) : nous pouvons vous livrer le serveur avec Sunshine, le lanceur de vos jeux et Tailscale déjà installés (côté serveur). Vous installez Moonlight et l’application Tailscale sur vos propres appareils.
Ce que vous pouvez y faire tourner : le rétrogaming avec RetroArch, Sunshine et Moonlight, Windows 11 dans le cloud avec Sunshine et Moonlight, et les jeux Windows sous Linux avec Wine.
Des systèmes prêts pour le jeu dès l’installation. Les systèmes que nous installons par défaut sont déjà optimisés pour cela : Debian 13 avec un noyau récent (7.3), les pilotes GPU Intel et Mesa (OpenGL, Vulkan, encodage vidéo VA-API), et Windows 11 (option) avec le pilote graphique Intel et le Bureau à distance rendu sur le GPU. Aucun pilote à chercher : installez votre jeu et Sunshine, et jouez.
Essayer
Voir les offres : l’option IPv4 dédiée coûte 5 € par mois, mais avec Tailscale, vous n’en avez pas besoin pour jouer.