Jogue no seu servidor na nuvem a partir de qualquer lugar com Moonlight e Tailscale
Os nossos servidores são acessíveis por IPv6 por omissão. Muitas ligações domésticas têm IPv6, mas nem
todas: algumas redes móveis, o Wi-Fi dos hotéis e routers mais antigos só têm IPv4. Pode acrescentar um
IPv4 dedicado ao seu servidor (5 € por mês), mas há outra forma, que além disso mantém as portas do
Sunshine fechadas à Internet: o Tailscale. Cria uma rede privada e cifrada (uma “tailnet”) entre os
seus dispositivos, baseada em WireGuard. O seu servidor e o seu telemóvel recebem cada um um endereço
100.x.y.z, e o Moonlight liga-se a esse endereço como se ambos estivessem em casa.
Resultados em resumo
- Funciona com o cliente oficial do Tailscale dos dois lados: ligação direta entre as duas máquinas
(
tailscale ping: pong via 203.0.113.10:41641 in 1ms), Moonlight em100.x.y.1. - O Tailscale não custa nada mensurável no stream: testes alternados com e sem Tailscale deram os mesmos 1080p 60 fps, 7,3 a 7,8 ms de processamento no servidor pelos dois caminhos, 0 imagens perdidas.
- O Sunshine fica fechado à Internet: as suas portas só aceitam ligações que chegam pela tailnet. Só o túnel é usado; não é preciso abrir nada no seu router.
- Pouco custo de CPU: o serviço Tailscale usava 3 a 4% de um núcleo no servidor durante um stream 1080p a 15 Mbit/s.
Duas formas de ter uma tailnet
| Conta Tailscale | Headscale | |
|---|---|---|
| O que é | O próprio serviço do Tailscale gere a sua rede (plano Personal gratuito) | Servidor de controlo open source que aloja você mesmo |
| Software cliente | apps oficiais do Tailscale | as mesmas apps oficiais do Tailscale |
| Configuração | iniciar sessão em cada dispositivo | instalar o Headscale, criar chaves, apontar cada dispositivo para ele |
| Acessibilidade | sempre acessível | o Headscale tem de ser acessível a todos os seus dispositivos |
O caminho normal é uma conta Tailscale: instale o Tailscale no servidor e nos seus dispositivos, inicie sessão com a mesma conta e está feito. No nosso teste usámos o Headscale em vez disso, porque não queríamos criar uma conta para um teste: é um servidor open source que desempenha o mesmo papel que o serviço de coordenação do Tailscale. A rede em si é a mesma: as duas máquinas corriam o cliente oficial do Tailscale (versão 1.104.5), que constrói os mesmos túneis WireGuard seja qual for o servidor de controlo com que comunica.
Configuração do teste
| Elemento | Valor |
|---|---|
| Servidor | Debian 13, Intel UHD 770 (GPU partilhada), 4 vCPU, Sunshine 2026.914, RetroArch, sway sem ecrã |
| Cliente | Debian 13, Moonlight 6.2, H.264 1080p 60 fps, descodificação por hardware |
| Tailnet | Tailscale 1.104.5 nos dois, Headscale 0.29.7 no servidor (.deb oficial do GitHub) |
| Rede | cliente e servidor no mesmo centro de dados: pela Internet, some a latência da sua ligação |
1. Instalar o Tailscale no servidor
O Tailscale publica pacotes para 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
Com uma conta Tailscale, execute tailscale up e abra a ligação que ele mostra para iniciar
sessão. Depois instale a app Tailscale no seu computador, telemóvel ou box de TV e inicie sessão com a
mesma conta.
Com o Headscale (o que testámos), instale o servidor a partir da sua release oficial no GitHub,
defina server_url em /etc/headscale/config.yaml e depois crie um utilizador e uma chave:
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
O cliente junta-se com o mesmo comando tailscale up --login-server … --authkey …. No nosso teste, o
Headscale escutava no endereço privado do servidor, porque as duas máquinas estavam no mesmo centro de
dados. Para uso real, o Headscale tem de ser acessível a todos os seus dispositivos, por HTTPS:
aloje-o numa máquina com IPv4 público (por exemplo com a opção de IPv4 dedicado), caso contrário um
dispositivo sem IPv6 não o consegue alcançar. É a principal razão pela qual uma conta Tailscale é mais
simples.
2. Verificar a ligação
$ 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 significa que as duas máquinas comunicam sem relé. Pela Internet, o Tailscale também tenta
ligar os seus dispositivos diretamente através do router de sua casa (o servidor tem IPv4 de saída para
isso). Quando não consegue, o tráfego passa por um relé do Tailscale (“DERP”): continua a funcionar, mas
acrescenta latência. O tailscale status indica-lhe qual dos dois obteve.
Um ping normal através do túnel demorava 1,7 ms em média (0,8 ms no melhor caso) contra 0,36 ms sem Tailscale: a cifra do WireGuard acrescenta bem menos de um milissegundo, o que é invisível ao lado da latência de uma ligação à Internet.
3. Manter o Sunshine fechado à Internet
A vantagem da tailnet é que o Sunshine não precisa de ser acessível a partir da Internet. No servidor,
uma pequena tabela nftables descarta as portas do Sunshine exceto na 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
Verificámo-lo a partir do cliente: a porta 47989 do Sunshine deixou de responder no endereço normal do
servidor e respondia (HTTP 200) em 100.x.y.1. Para emparelhar o Moonlight, abra a interface web do
Sunshine através de um túnel SSH (ssh -L 47990:localhost:47990 you@100.x.y.1).
4. Jogar: Moonlight no endereço 100.x
No Moonlight, adicione o servidor pelo seu endereço na tailnet (aqui 100.x.y.1), emparelhe-o e
inicie um jogo. O Moonlight reconheceu o servidor que já conhecia e ligou-se sem qualquer outra
definição. A interface da tailnet tem um tamanho de pacote menor (MTU de 1280 bytes); não tivemos de
alterar nada no Moonlight por causa disso.
Para ver se o Tailscale muda alguma coisa, transmitimos o mesmo jogo quatro vezes, alternando o endereço normal do servidor e o seu endereço na tailnet:
| Moonlight, 1080p 60 fps H.264 | Sem Tailscale | Através do Tailscale |
|---|---|---|
| Taxa de fotogramas recebida | 60,0 a 60,4 fps | 60,0 fps |
| Processamento no servidor (captura + codificação), média | 7,5 a 7,8 ms | 7,3 a 7,4 ms |
| Processamento no servidor, máx | 10,4 a 10,6 ms | 10,5 a 10,8 ms |
| Imagens perdidas pela rede ou por jitter | 0% | 0% |
| Tempo de descodificação no cliente | 0,23 ms | 0,24 a 0,25 ms |
No servidor, durante o stream, o serviço Tailscale usava 2,8 a 4,2% de um núcleo, o Sunshine 13 a 17% e o emulador 3 a 4%. Em dois testes anteriores, feitos enquanto outros servidores de teste usavam intensamente a mesma GPU, o processamento no servidor subiu para 21 a 27 ms em média: isso deveu-se à GPU estar partilhada nesse momento, não ao Tailscale, como mostram os testes alternados acima.
5. Que plano?
O Tailscale em si quase não precisa de nada. O que conta é o jogo: o iGPU Start (2 vCPU, 8 GB de RAM, 14,99 € s/ IVA por mês) chega para consolas retro; para jogos de PC recomendamos o iGPU Power (4 vCPU, 14 GB de RAM, o dobro da quota de GPU do Start, 29,99 € s/ IVA por mês).
Quer o servidor pronto a jogar? Peça-o por e-mail ao encomendar (contact@linuxgpu.eu): podemos entregar-lhe o servidor com o Sunshine, o launcher dos seus jogos e o Tailscale já instalados (do lado do servidor). Você instala o Moonlight e a app Tailscale nos seus próprios dispositivos.
O que pode correr nele: jogos retro com RetroArch, Sunshine e Moonlight, Windows 11 na nuvem com Sunshine e Moonlight e jogos Windows no Linux com o Wine.
Sistemas prontos para jogar logo à partida. Os sistemas que instalamos por predefinição já estão otimizados para isso: Debian 13 com um kernel recente (7.3), os drivers de GPU da Intel e o Mesa (OpenGL, Vulkan, codificação de vídeo VA-API), e o Windows 11 (opção) com o driver gráfico da Intel e o Ambiente de Trabalho Remoto renderizado na GPU. Nada de procurar drivers: instale o seu jogo e o Sunshine, e jogue.
Experimentar
Ver os planos: a opção de IPv4 dedicado custa 5 € por mês, mas com o Tailscale não precisa dela para jogar.