一、主要异常表现
安装并启动Tailscale后,你可能会遇到以下一种或多种情况:
- SSH连接闪断或卡顿:如果你是通过SSH连接到ECS的,在启动Tailscale的瞬间,当前的SSH会话可能会卡住,甚至断开连接。重新连接后可能正常,也可能偶尔还会出现延迟。
- 无法通过内网IP访问ECS上的服务:在ECS内部或用同一VPC内其他机器访问该ECS的内网IP(例如
172.16.0.10
)上的服务(如Web服务、数据库、Redis等)时,出现:- 连接超时
- 响应极慢
- 直接无法建立连接
- ECS无法访问同一VPC内其他机器的内网服务:从安装了Tailscale的这台ECS上,去访问同VPC下其他机器的内网IP,发现访问失败。
- ECS无法访问阿里云内网服务:无法访问阿里云的内网API端点(如
oss-cn-hangzhou-internal.aliyuncs.com
)或其他需要通过内网访问的云服务。
关键特征:所有这些异常都发生在内网(VPC)流量上,而通过公网IP的访问以及Tailscale虚拟组网后的IP的访问通常是正常的。
二、根本原因
问题的核心在于 路由冲突 和 策略路由。
- Tailscale的默认行为:Tailscale安装后,为了让你能通过其他Tailscale节点访问这台ECS,它会自动修改系统的路由表和防火墙规则。它会添加一条默认路由或针对对等节点路由,将所有出口流量(或目标为其他Tailscale节点的流量)通过Tailscale的虚拟网卡(如
tailscale0
)发送。 - 阿里云VPC的特殊性:阿里云的VPC内部网络依赖其自身的内部路由和DNS系统。ECS的内网IP(
172.16.0.10
)在VPC内是有特定路由规则的。 - 冲突发生:当Tailscale的路由规则(优先级较高)介入后,系统在尝试访问同一个VPC内的另一个内网IP(例如
172.16.0.11
)时,可能会错误地判断该流量不应该走物理网卡(eth0
),而应该走Tailscale的虚拟网卡(tailscale0
)。但由于目标地址172.16.0.11
并不在Tailscale的虚拟网络中,导致流量“走错了路”,最终无法到达目的地。
简单来说:系统本来去邻居家(同VPC机器)应该走“小区内部道路”(eth0
),但Tailscale给它装了个“智能导航”(路由规则),这个导航错误地引导车子先开上了“私人高架桥”(tailscale0
),结果发现高架桥不通往那个邻居家,导致无法到达。
三、解决方案:一键修复
sudo tailscale up --netfilter-mode=off --accept-dns=false