Tailscale is a beautiful service, but after connecting three locations I’m starting to get frustrated.
Here’s where I’m using my Tailscale connectors:
- Uptime Kuma — Location A
- Home Assistant #1 — Location A
- Synology NAS — Location A
- Home Assistant #2 — Location B
- Windows PC — Location A
- Windows Server — Location B
- Mobile phone — Location C
The main issue I’m facing is on Linux machines: access to hosts on the local network keeps getting routed through the default gateway, which in this case is the Tailnet host.
To work around it, I have to manually add routing rules that override the default behavior. Every time the NAS starts backing up data from my machines (on the same LAN), the Tailscale daemon on one of the hosts spikes to 100% CPU because it ends up handling traffic at around 100 MB/s.
The frustrating part is that Tailscale shouldn’t be involved in these cases at all. This is purely local traffic and has nothing to do with the Tailnet.
It seems like this is simply how Tailscale manages the routing table on Linux (HomeAssistant and Synology), but honestly, I think the behavior is fundamentally incorrect or at least poorly optimized for setups like mine.
The same happens on uptimekuma host which monitors all hosts on remote networks. If tailnet is down from some reason, it just marks the hosts on the local network down as well, because simply he tries to contact them through tailnet default gw, which is wrong - I also fix this by adding a rule like:
/sbin/ip rule add to 192.168.1.0/24 lookup main priority 48
So that it knows - to not even think about going through default gw.
How do you solve this? I am thinking about going to pure wireguard setup so the routing happens on wireguard endpoints, this setup is not stable for me at all.