Tailscale on a server
Tailscale for a stable address on any network, with MagicDNS on, key expiry off, and Tailscale SSH left out on purpose.
Names and addresses are placeholders. The list says what each one stands for.
What it does here
Tailscale is how every other device finds the box, from home or anywhere else. It handles discovery and the private network. SSH and mosh run over it.
Canonical setup
Install with Tailscale's script, bring the node up, and sign in with an identity provider. Sign in with the same identity on every device: that's what puts them in one tailnet.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upFollow the printed URL to sign in. Tailscale signs you in through Google, Microsoft, GitHub or Apple; there's no plain email signup.
Upstream: Install Tailscale on Linux, MagicDNS, Key expiry.
In this build
- No --ssh flagPlain
tailscale up. The box keeps its own hardened OpenSSH, which mosh needs. - MagicDNS onIn the admin console under DNS. The box then answers as
devboxanddevbox.example.ts.net. - Key expiry disabled for this machineIn the admin console, on the machine's menu. A server shouldn't drop off the tailnet on a schedule.
- Every other device joined with the same identityLaptop, phone, desktop: the same install on Linux, the app elsewhere.
On a personal tailnet, the ts.net suffix is generated by Tailscale, not taken from your domain. Copy the real one from the DNS page; later cards use it.
If your mail domain isn't a Google Workspace or Microsoft 365 login, signing in with Apple (an Apple ID on that address) works. Share your real email when Apple asks rather than a private relay address, which is harder to recover. That gives a personal tailnet, which is right for a single-admin box.
Optional: to reach devices on the home network that can't run Tailscale, advertise the subnet from this box with sudo tailscale up --advertise-routes=192.168.x.0/24 and approve the route in the admin console.
Seams
Where this meets the rest of the build. Each one leads with what you will actually see.
Symptommosh fails during its startup handshake
Tailscale SSH takes over port 22 in a way mosh's startup can't get through. Leave it off and use OpenSSH over the tailnet; key auth there is just as private.
Symptomthe box drops off the tailnet months after setup
Node keys expire by default, and an unattended server can't sign itself back in. Disable key expiry for this machine in the admin console.
Symptomthe MagicDNS name isn't under your domain
That's expected. The ts.net name is Tailscale's; your own domain is used separately for service names on the Caddy card.
Verify
tailscale status # this box and your other devices
tailscale ip -4 # the box's 100.x.y.z address
ssh youruser@devbox # from another device on the tailnet- 17 Oct 2026First written.