
or:

RustDesk in combination with Tailscale/Headscale offers a near-perfect and completely free Remote Access solution for homelab enthusiasts.
This is so far the best tool I’ve found to remotely connect to ARM-based Linux desktops (e.g. Oracle Free Tier Ampère Instances with up to 4vCores and 24GB RAM or any of Apple’s M1/M2/M3/M4/… systems). For Intel-/AMD-based Linux desktops, however, I still prefer Cendio’s ThinLinc (on high resolution displays with the following workaround). For a matrix of client/server matches that worked best for me, see: overview of my favourite RDP client<->server combinations.
In combination with Tailscale (and if self-hosting is preferred/important Headscale) it offers secure and easy GUI access to computer and virtualised desktops in a homelab (plus cloud) setup:

No server is needed for direct peer-to-peer connections (e.g. with tailscale full domain names or with internal IPs in homelab):

NB: Don’t forget to enable 2-Factor-Authentication.

Related external posts/reviews/tutorials:
The following combinations have worked best for me:
[last update: 14/05/2025]
| Remote Desktops | Windows Desktop | Mac Desktop | Linux Desktop Intel-/AMD-based | Linux Desktop ARM64 / aarch64 |
| Clients | ||||
| Windows Client | Windows RDP (builtin) | RustDesk | ThinLinc* | RustDesk |
| Mac Client | Windows App | RustDesk | ThinLinc* | RustDesk |
| Linux Client | RustDesk | RustDesk | ThinLinc* | RustDesk |
| iOS/iPad Client | Windows App | RustDesk | RustDesk | RustDesk |
| Android Client (untested) | Remote Desktop App | RustDesk | RustDesk | RustDesk |
* on high-resolution/Retina displays: use this workaround
If you’d like to enable external access to resources in your homelab or in your cloud environment, please don’t forget to choose a reasonably secure setup: