I fixed a weird Moonlight / Sunshine issue where Moonlight on iPad/iOS over cellular with Tailscale failed with “RTSP handshake failed error 60” and showed ports like TCP 48010, UDP 48000, and UDP 48010. Tailscale ping worked, Sunshine Web UI worked, the host was paired, and Moonlight worked perfectly on the same LAN, but over T-Mobile/eSIM cellular it always failed at RTSP.
Symptoms:
- Moonlight RTSP handshake failed error 60
- TCP 48010 / UDP 48000 / UDP 48010 mentioned in the error
- Sunshine Web UI works over Tailscale
- Tailscale ping works / direct connection works
- Same LAN works perfectly
- Windows Moonlight client works
- Only iPad/iOS on cellular fails
- T-Mobile/eSIM cellular path seems to trigger it
I fixed a weird Moonlight / Sunshine issue where Moonlight on iPad/iOS over cellular with Tailscale failed with “RTSP handshake failed error 60” and mentioned TCP 48010, UDP 48000, and UDP 48010.
Tailscale ping worked, Sunshine Web UI worked, the host was paired, and Moonlight worked perfectly on the same LAN. Windows Moonlight also worked. Only iPad/iOS over T-Mobile/eSIM cellular failed at RTSP.
Symptoms:
- Moonlight RTSP handshake failed error 60
- TCP 48010 / UDP 48000 / UDP 48010 mentioned in the error
- Sunshine Web UI works over Tailscale
- Tailscale ping works / direct connection works
- Same LAN works perfectly
- Windows Moonlight client works
- Only iPad/iOS on cellular fails
- T-Mobile/eSIM cellular path seems to trigger it
What did NOT fix it:
- Windows firewall was already allowing Sunshine
- Sunshine ports were listening
- Re-pairing alone did not fix it
- Direct Tailscale to the host via 100.x / MagicDNS still failed
- Adding the Sunshine PC’s own LAN IP as a /32 route from the same Windows host was not useful
What fixed it:
- Set up another always-on Linux machine on the home LAN as a Tailscale exit node
- Advertised only the Sunshine host route: 192.168.5.128/32
- Approved the route and exit node in Tailscale admin
- On iPad, manually selected that Linux machine as the Tailscale exit node
- In Moonlight, deleted the old host and added the Sunshine host by LAN IP: 192.168.5.128
After that, RTSP worked immediately.
My guess:
The cellular carrier path allowed Tailscale ping/Web UI, but broke Moonlight’s RTSP/UDP stream when connecting directly to the Sunshine host over Tailscale. Routing through a home LAN Tailscale exit node changed the path and made Moonlight see the host like a LAN machine.
Hopefully this helps anyone searching for:
Moonlight RTSP handshake failed error 60, Sunshine RTSP failed, Tailscale Moonlight iPad, iOS cellular Moonlight error 60, TCP 48010, UDP 48000, UDP 48010.