Tailscale's client joins one tailnet at a time. tailmux joins them all and sends each connection to the tailnet that owns it.
brew install growlyx/tap/tailmux
tailmux setup # add tailnets, log in
sudo brew services start tailmux # every app can now reach every tailnetssh db.home, curl http://grafana.work, psql -h db.corp.internal: names
and subnets from every tailnet work side by side, even when two tailnets use the same IPs.
- Install: macOS (Homebrew), Windows, Linux (
.deb,.rpm, AppImage, Alpine, Arch, or from source), service modes - Setup and config: the
tailmux setupTUI and every config key - Routing: how tailmux picks a tailnet, and what happens on conflicts
- TUN mode: proxy-free, for every app
- Proxy mode: SOCKS5, HTTP, PAC, ssh, kubectl
- Exit nodes: your own or Mullvad's, for everything else
- The tailscale CLI:
tailmux cli -profile work configure kubeconfig ..., or-profile '*'for every tailnet - Menu bar app: macOS panel and window, local API
- Desktop app: the same for Windows and Linux
- Updates: automatic, and how to turn that off
- Development: the in-process test lab, CI, releases