Launching today
TailMux
Multiple Tailscale tailnets at once, no switching + no VM
58 followers
Multiple Tailscale tailnets at once, no switching + no VM
58 followers
The official Tailscale client keeps one tailnet active at a time. TailMux makes work and personal tailnets reachable simultaneously on macOS and Linux, without switching accounts, running multiple system daemons, or using a VM. It runs an isolated embedded node per profile and routes by hostname, with strict no-fallback isolation. Use SSH, RDP/SMB, browsers, curl, git, and npm across tailnets at the same time.






Pass Quick Access
Great app, I absolutely want to try it; it would be super convenient even for me, since I live on two different tailnets. If so, are there no profile limits, meaning it can support more than two tailnets?
@bsramin Exactly - two is just the common example. TailMux doesn’t impose a two-profile limit: you can add one isolated profile per tailnet and keep them connected at the same time. Each hostname is routed only through the profile that owns it, with no cross-tailnet fallback. In practice, the limit is your machine’s resources rather than an arbitrary profile quota.
Congratulations on the launch! Managing multiple Tailscale tailnets has always been one of those small but recurring workflow frustrations, so this looks genuinely useful.
I'm curious about the networking side—how does TailMux handle overlapping IP ranges or conflicting DNS configurations when multiple tailnets are active simultaneously? Looking forward to trying it out.
@dasmat13 Thank you — great question. This is exactly why TailMux is hostname-first rather than a second system VPN.
TailMux never merges tailnets into one macOS routing table or one global DNS view. Each profile owns explicit hostname suffixes; overlapping suffixes are rejected at configuration time. Once a hostname is matched, it is resolved through that selected profile’s own Tailscale DNS view (including MagicDNS and split DNS), with no cross-profile or system-DNS fallback.
For overlapping IP ranges, TailMux does not guess. It doesn’t install global routes, and raw IPs are denied by default. Explicit IP routes must be unique across profiles, so conflicting configured ranges are rejected. If two tailnets dynamically expose the same subnet or IP, TailMux removes that ambiguous route from automatic IP routing rather than sending it through either tailnet.
The practical result: service.work.ts.net and service.home.ts.net can each resolve to overlapping private addresses and still work correctly, because the hostname selects the isolated profile before DNS and dialing happen. For a bare IP that exists in both tailnets, you explicitly pin the profile rather than relying on an unsafe guess.
In short: no merged DNS, no route-table fight, and no cross-tailnet fallback. Ambiguity fails closed.