Tailscale's company blog explains how its mesh VPN works, with deep technical posts on NAT traversal, plus product and pricing updates.
Commenters recommend Tailscale for homelabs, remote access, and replacing open SSH ports or VPNs, calling it an excellent experience.
Increasingly these days I'm thinking: the M1 MacBook Air holds up very well, but I also want to use Linux: why not both?
My biggest problem with Linux / BSD is the GUIs. I don't know why but whenever I use a Linux desktop, the mouse either moves too fast or too slow and there's no sweet spot.
The GUI keyboards shortcuts are all messed up: I love the "⌘" (super) key because then ⌘C is copy everywhere, and ^C is an interrupt in the terminal. I have ⌘← , ⌥← , ⌘⌫ , ⌥⌫ , ⇧⌘← , ⇧⌥← ingrained in my memory (for moving, deleting, and selecting by line or by word). I have fussed with remapping keys but there's always that one app that won't cooperate.
So why not both: shift down from a single the top of the line 16" MacBook Pro to a MacBook Air, and then pair it with a desktop running Linux that I SSH into over LAN.
- LAN internet speeds are fast enough that I don't notice any latency.
- I'll have convenient access to both Linux and macOS, for testing.
- I can spec up the Linux desktop as much as I want. It could even have a Threadripper.
- The MacBook Air will have better battery life than any Linux or BSD laptop.
- I can use Tailscale[1] to set up a no-fuss VPN, so that I can still SSH to it even when I'm not on LAN.
- All the GUIs will still be macOS, so things like mouse speed and keyboard shortcuts will all be familiar.
It might even net out to be around the same price. My 16" MacBook Pro was like $3,000. An M1 MacBook Air would be $1,500 (with some storage and memory),…
If you do your work in VSCode you can setup the following pretty easily and it works really well (I use it to connect to my workstation in my home office when I work in a coffee shop on my laptop or the rare occasions I go into the office):
1. Install Tailscale (https://tailscale.com/) on your laptop and workstation and enable the "MagicDNS" (https://tailscale.com/kb/1081/magicdns/) feature. This sets up a VPN mesh between your machines (and any other you add).
2. Setup you SSH keys so you can login via the "MagicDNS" domain name from your laptop to your workstation.
3. Install the VSCode Remote Development extension (https://code.visualstudio.com/docs/remote/remote-overview) on your laptop and then open a workspace on your workstation via its SSH feature using the "MagicDNS" domain.
It is surprisingly fast - you are just sending keystrokes/commands over the VPN and not rasterizing the host screen like you would with VNC.
Since last year I’ve been configuring and maintaining my homelab setup and it is just amazing.
I’ve learned so much about containers, virtual machines and networking. Some of the self hosted applications like paperless-ngx [1] and immich [2] are much superior in terms of features than the proprietary cloud solutions.
With the addition of VPN services like tailscale [3] now I can access my homelab from anywhere in the world.
The only thing missing is to setup a low powered machine like NUC or any mini PC so I can offload the services I need 24/7 and save electricity costs.
If you can maintain it and have enough energy on weekends to perform routine maintenance and upgrades. I would 100% recommend setting up your own homelab.
[1] https://docs.paperless-ngx.com/ [2] https://immich.app/ [3] https://tailscale.com/
I did not intuitively understand what Tailscale does, so I visited the following related page:
https://tailscale.com/blog/how-tailscale-works
Ah! OK, now I get it! :-)
But, what found particularly interesting on that page was the following:
>" Some especially cruel networks block UDP entirely
, or are otherwise so strict that they simply cannot be traversed using STUN and ICE. For those situations, Tailscale provides a network of so-called DERP (Designated Encrypted Relay for Packets) servers. These fill the same role as TURN servers in the ICE standard, except they use HTTPS streams and WireGuard keys instead of the obsolete TURN recommendations."
DERP seems like one interesting solution (there may be others!) to UDP blockages...
Headscale creator here.
> Fun fact: Tailscale have an almost-assuredly-accurate count of Headscale users due to how few people disable the Tailscale client's telemetry which by default sends them real-time events about everything you do on a Headscale network. See KB1011: https://tailscale.com/kb/1011/log-mesh-traffic
That is not true. We actually instruct all the clients to send no logs - since at least three years:
https://github.com/juanfont/headscale/blame/main/hscontrol/types/config.go#L325.
And also in the config example:
https://github.com/juanfont/headscale/blob/main/config-example.yaml#L386
That said, I would have loved to know how many nodes use Headscale... :)
If you are looking for cross-platform FOSS P2P, ProtocolLabs' (makers of IPFS) https://libp2p.io (P2P conns over TCP, UDP, QUIC, WebSockets, WebRTC) with implementations in various languages (Go, Rust, JavaScript) with varying degrees of features is great to have in the toolbox, as well. Unless of course you're sold into a solution like https://tailscale.com, who I believe are readying a userspace embeddable implementation of their P2P mesh wireguard overlay network, which then would be a compelling alternative, too, in the not so distant future, especially because of its security posture (though only the clients are FOSS).