一、主要异常表现
安装并启动 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
