一台 Tailscale 主机不可达:子网路由器还是出口节点?
先把缺失的目的地分类:私有 NAS 需要被通告的子网,而公开浏览需要出口节点。
一台 Tailscale 主机有响应,另一台却完全失联;或者一切正常,直到公开网站开始报告错误的国家。两种抱怨都以“Tailscale 坏了”的形式出现,而它们通常都是为错误目的地启用了错误的构件。子网路由器把私有网络暴露给 tailnet,出口节点则改变互联网流量的出口位置。先把失败的目的地分类,再选择覆盖它的角色。
从失败的目的地入手
记下没有生效的地址或名称,以及它属于哪一类对象。位于另一个站点之后的私有 LAN 设备、你自己网段上的服务,以及公开网站,是三个恰好共用一个客户端的不同路由问题。区别并不在于措辞,因为两种构件覆盖的目的地集合不同。启用其中一个对另一个毫无作用,而这正是全部困惑的来源。
也要注意地址族。只按 IPv4 通告的子网会把 IPv6 目的地留在本地路径上;在有人对比两张路由表之前,这看起来像是部分故障。记录你期望的路径是什么,以便后续测试有可反驳的对象。
触达一台从不运行 Tailscale 的设备
路由器向 tailnet 通告特定网段,然后在 tailnet 与私有网段之间转发数据包,因此该网段上的设备无需自己的客户端。从家里的笔记本电脑访问办公室的 NAS 正是这种情况。路由器是那一侧 tailnet 的唯一成员。
tailscale up --advertise-routes=10.40.0.0/24 --advertise-exit-node=false
ip route get 10.40.0.55
tailscale status
通告只是三个条件中的第一个。这条路由必须为 tailnet 所批准, 客户端必须接受被通告的路由,并且访问规则必须允许该连接。正是这条链路让症状频繁表现为路由器正常而 NAS 不通。路由器可达只能证明隧道通了;它无法证明批准、客户端接受或策略。
这三种失败在管理控制台里看起来各不相同。请按顺序检查,而不是一次改动三处,因为第二次改动会掩盖究竟是哪一个起了作用。
让公开流量从另一台机器出去
出口节点把你的常规互联网流量经由自身转发,这最接近其他 VPN 产品里的全隧道方案。它同样需要三项独立的同意:设备通告该角色,管理员批准它,客户端选择它。加入 tailnet 默认不会经由其他成员发送任何流量。
tailscale up --advertise-exit-node
tailscale up --exit-node=100.101.102.103 --exit-node-allow-lan-access=false
tailscale status --json | grep -i exitnode
选择出口节点并不会自动获得该节点自身 LAN 的访问权限。LAN 访问选项之所以存在,正是因为这是两种不同的权限,而保持关闭是更安全的默认值。通往其他 Tailscale 资源的路由即便在出口节点启用时也有各自处理。这就是为什么托管在子网上的服务可以在公网路径已改变时继续工作。
出口节点还会改变互联网如何看待你,而不只是快慢感受。可以预期地理位置、流媒体目录和速率限制会跟随出口地址,而不是你的地址。
只有一台主机失败时,读三方拆分
你自己网段上的打印机、远程子网路由器之后的 NAS,以及一个公开站点,是三条不同路径上的三个目的地。如果恰好只有其中一个失败,缺陷属于那个目的地的路径,而不是整个客户端。 在出口节点启用期间,本地打印机通常的答案是 LAN 访问设置。对于远程 NAS,按这个顺序检查被通告的网段、它的批准状态和访问规则。对于公开站点,检查选中的是哪个出口节点,以及客户端是否真的接受了它。
如果地址可用而名称不可用,就别再看路由了。私有 DNS 是单独配置的,解析到错误地址的名称,其失败方式与路由被阻断看起来一模一样。先测地址,再测名称,两个结果会告诉你该打开哪一层。
确认你以为建成的路径
验证是路由查询加上地址检查,而不是 ping。查询告诉你某个目的地会走哪个接口,地址检查告诉你目的地实际落在哪个网段。成功的 ping 只说明主机在某个地方活着,而那并不是问题所在。在改动任何配置之前,把两者都跑一遍。
ip route get 10.40.0.55
ip -6 route show default
tailscale ping 10.40.0.55
再结合 tailnet 自身的视图,它显示对端是直连还是中继。中继路径依然可用,这也解释了那些与你正在排查的路由无关的延迟抱怨。 子网路由器文档 在你还不熟悉时覆盖了批准步骤。然后把哪种构件覆盖哪个目的地写进你自己的网络,因为下一个添加站点的人也会问同样的问题。