Repository navigation
v1.0.0
Highlights
Exit nodes: pick any exit node in any of your tailnets, Mullvad's included, and traffic outside your tailnets leaves through it, like the official app's Exit Node menu. Tailnet traffic still goes to its tailnet and your local network stays direct. If the exit node can't be used, that traffic is blocked rather than leaking out directly.
- TUN mode covers every app; proxy mode covers apps that use the proxy.
tailmux exit-nodelists them,tailmux exit-node use se(orTokyo, ornas.home) picks one,tailmux exit-node offgoes direct again.- The menu bar app and the desktop app have a picker with Mullvad grouped by country and city, and a "Best available" choice.
- Docs: exit nodes.
Linux, beyond Debian
tailmux-clipackages (CLI and daemon, no tray app) as.deb,.rpm,.apk(Alpine) and.pkg.tar.zst(Arch), for x86-64 and arm64.- The desktop app now also ships as an
.rpm. - Build from source on any distro with
make && sudo make install(make desktopfor the tray app), ormakepkg -siwithpackaging/arch/PKGBUILD. Source builds never replace themselves with a release binary. - Install docs cover every distro family and OpenRC/runit instead of systemd.
- Removing the desktop app or a
tailmux-clipackage also removes the service it installed.
Also
- tailscale.com 1.104.
- macOS DNS search domains in TUN mode (
ssh dbwithout a suffix). - More robust TUN teardown and device recreation.
Changelog
- 4acb0fe: Adapt the TUN engine to wireguard-go's new Read API (@GrowlyX)
- 38912a1: Desktop app: exit node picker (@GrowlyX)
- 9200a82: Exit nodes in TUN mode, the CLI and the docs (@GrowlyX)
- 4ea19f5: Exit nodes: route non-tailnet traffic through a chosen exit node (@GrowlyX)
- a64d1e7: Fix lint on Linux and a host-dependent DNS assertion (@GrowlyX)
- 4764b41: Linux: CLI packages for every distro, .rpm, and building from source (@GrowlyX)
- 2a497d6: Menu bar app: exit node picker (@GrowlyX)
- cc3bc4c: Merge main into exit-nodes (@GrowlyX)
- 8a2aefd: Merge main into linux-packaging (@GrowlyX)
- e6746d1: Merge main into readme-banner (@GrowlyX)
- 5def86b: Merge pull request #10 from GrowlyX/fix-uninstall-service (@GrowlyX)
- 2bdbc57: Merge pull request #11 from GrowlyX/readme-banner (@GrowlyX)
- cd56849: Merge pull request #3 from GrowlyX/tun-recreate-device (@GrowlyX)
- 255da7a: Merge pull request #4 from aaronflorey/fix/tunnel-ownership-and-startup-cleanup (@GrowlyX)
- 2954d5d: Merge pull request #5 from GrowlyX/dependabot/go_modules/tailscale-2df9ca97c8 (@GrowlyX)
- 82e5b26: Merge pull request #6 from GrowlyX/dependabot/go_modules/go-deps-8860a66e7c (@GrowlyX)
- a8fbbe3: Merge pull request #8 from GrowlyX/exit-nodes (@GrowlyX)
- 9a9dd72: Merge pull request #9 from GrowlyX/linux-packaging (@GrowlyX)
- 241ef84: PKGBUILD: no empty debug package (@GrowlyX)
- 7b9e652: README banner: the current panel, with an exit node (@GrowlyX)
- 30b48f5: Remove the service when the desktop app is uninstalled (@GrowlyX)
- ac4f71e: TUN exit node: re-apply Linux rules in place; kernel-level test (@GrowlyX)
- 24a90ef: feat(tun): manage macOS DNS search domains (@aaronflorey)
- 8345090: fix(mux): preserve errors when tailnet startup fails (@aaronflorey)
- e60be0e: fix(tun): serialize device teardown with OS configuration (@aaronflorey)
- a379d63: tun: survive ENOBUFS and recreate a lost device (@GrowlyX)