Tailscale的路由广播功能(--advertise-routes)可以将客户端所在内网开放给同用户其他客户端使用。
但如果同一个内网下还有其他设备也在使用Tailscale,且接受了路由广播(--accept-routes),那么在连接上Tailscale之后就会无法与内网通信,甚至连路由器都ping不通。
目前这个问题官方还没有解决,但是有一些临时的解决方法。

Windows

在广播了路由的客户端上,将原本广播的子网范围扩大即可。比如原本广播的是192.168.1.0/24,则修改为192.168.0.0/23,这样就会优先走物理网卡访问内网了。

Linux

Linux系统上,Tailscale会使用52号路由表,优先级高于主路由表,这就导致上面的方法不适用于Linux客户端,因为不管怎么改,都是先从Tailscale的路由表里走。
不过Linux可以通过对路由表做修改来解决。以广播192.168.1.0/24为例,有以下两种修改方法:

1. 从Tailscale的路由表中删除该子网路由:

ip route delete table 52 192.168.1.0/24

使用这种方法,如果Tailscale断开重连,这条路由会被重新添加到路由表中,因此需要每次重连后执行一遍。

2. 为子网添加一条更高优先级的路由规则:

ip rule add to 192.168.1.0/24 priority 5000 table main

这种方法更好用一些,Tailscale重连也依然生效,目前没发现什么副作用。