Metadata
- Title: Tailscale 显示 relay 不直连?90%是这个原因|附修复方法
- Author: 是万能的三叔
- URL: https://www.bilibili.com/video/BV1cUdnBiEQ3/
- Source: Bilibili video transcript (AI subtitle)
Cleaned Reading Version
Tailscale 显示 relay 不直连?90% 是这个原因|阅读版本
Metadata
- Title: Tailscale 显示 relay 不直连?90%是这个原因|附修复方法
- Author: 是万能的三叔
- URL: https://www.bilibili.com/video/BV1cUdnBiEQ3/
Overview
Tailscale 远程访问延迟高,很多时候不是软件本身慢,而是连接没有打成设备到设备的直连(direct),而是走了官方中继(relay)。一旦 tailscale status 里看到目标设备显示 relay,就意味着数据要绕一层中继服务器,延迟自然会明显上升;如果中继节点距离较远,甚至会出现数据“绕到海外再回来”的体感。这个问题在软路由、多网口、多设备同时运行 Tailscale 的环境里更常见。一个典型原因是多台设备抢占同一个 UDP 监听端口 41641,导致 UPnP 映射冲突;解决思路是先排除路由器侧多线多拨等复杂因素,再把非直连设备的 Tailscale 监听端口改成 41642,让 NAT 打洞恢复正常。修复完成后,延迟可能从几百毫秒甚至更高,下降到个位数或很低的直连水平。
按主题/章节梳理
1. 先判断问题是不是“走了 relay”,不要只看“能不能连上”
Tailscale 的连接质量不能只用“是否能访问远程设备”来判断。能连上只说明链路存在,不代表链路是最优路径。真正影响远程桌面、SSH、文件访问体验的是它到底是 direct 还是 relay。
在直连状态下,两台设备之间通过 NAT 打洞建立直接路径,延迟通常较低。如果本机到远端设备可以个位数毫秒响应,说明链路比较理想。相反,如果 tailscale status 的结果里出现 relay,就表示这台设备并没有和另一端直接通信,而是在通过 Tailscale 的中继服务器转发流量。视频中的案例里,一台远程设备可以直连,另一台设备却走 relay;走 relay 的设备被转到了较远的中继区域,数据相当于绕了一大圈,延迟自然升高。
排障时第一步不是立刻改配置,而是先确认症状:
- 用
tailscale status看目标设备后面是direct还是relay。 - 用
tailscale ping或持续 ping 观察延迟差异。 - 如果一台设备 direct、另一台设备 relay,说明问题更可能出在设备侧端口、路由器映射或复杂网络设置,而不一定是公网、运营商或 Tailscale 服务整体不可用。
这个判断很关键:如果所有设备都不能直连,问题可能在路由器、NAT 类型、运营商网络或防火墙;但如果同一路由器下有的设备能 direct、有的设备 relay,就说明基础网络能力并没有完全失效,重点应该放到“为什么某台设备没有拿到可用 UDP 映射”上。
2. 同一网络下“一台 direct、一台 relay”,优先怀疑端口抢占和 UPnP 映射冲突
视频中的核心案例是:本机访问远程软路由环境里的两台设备,A 设备可以 direct,B 设备却 relay。既然 Windows 设备能够直连,就说明光猫或路由器的 UPnP 至少对其中一台设备是正常工作的;此时再把问题简单归因到“UPnP 没开”或“网络不能打洞”,就不够准确。
更具体的原因是:多台 Tailscale 设备可能都在使用默认 UDP 监听端口 41641。当它们处在同一个路由器后面,并且都希望通过 UPnP 建立端口映射时,就可能出现映射冲突。路由器只能把同一个外部端口稳定映射给某一台内网设备,另一台设备就可能拿不到理想映射,最终退回 relay。
这个判断链条可以这样理解:
- A 设备能 direct:说明 Tailscale 本身、账号、基础网络、UPnP 能力并非全部异常。
- B 设备 relay:说明 B 设备没有成功建立直连路径。
- 两台设备位于同一个复杂内网:默认端口冲突、路由器策略、代理规则、多线多拨等因素都可能影响 UDP 打洞。
- 如果两台设备都用默认 41641,修改其中一台设备的监听端口就是一个低成本、可验证的修复方向。
视频还特别提到“多线多拨”。如果路由器并没有多个宽带接入需求,却开启了多线多拨,它可能给网络路径和 NAT 行为增加复杂性。没有明确需求时,可以先关闭多线多拨,重启路由器,再重新运行 tailscale status,看设备是否从 relay 变成 direct。如果关闭后问题解决,说明复杂路由策略本身就是干扰因素;如果还没解决,再进入端口修改。
3. 修复思路:关闭不必要的复杂路由,再修改非直连设备监听端口
修复顺序应该从“路由器侧的复杂性”到“设备侧的监听端口”逐步推进。这样做的好处是每一步都可验证,避免一次改太多配置后不知道到底哪一步生效。
第一步,检查并关闭不必要的多线多拨。如果确实有多宽带、多 WAN 负载均衡等需求,可以保留;但如果只是普通家庭或办公网络,没有多线接入需求,关闭它可以减少被运营商识别、路由漂移、UDP 打洞失败等不稳定因素。关闭后重启路由器,再用 tailscale status 检查目标设备是否已经从 relay 变成 direct。
第二步,如果 relay 仍然存在,就在“非直连的那台设备”上修改 Tailscale 监听端口。视频里的目标是把默认端口从 41641 改为 41642,从而避免两台设备抢同一个端口。字幕没有完整识别出屏幕上的编辑命令,但视频元数据列出的相关命令包括:
tailscale status
tailscale ping
tailscale netcheck
ss -ulnp操作完成后,需要重启 Tailscale 服务,让新监听端口生效。随后用端口检查命令确认当前监听端口已经变为 41642(字幕里有“验证端口确实变成了 41642”的意思,但个别数字被 ASR 识别错成了 41462)。
第三步,保持另一台电脑上的 ping 或 tailscale ping 观察。修改监听端口后,链路可能会短暂中断;等待一到两分钟后,如果 NAT 打洞成功,延迟会从原来的两位数、三位数甚至四位数,突然降到很低的状态。这个延迟变化就是最直接的验证信号。
4. 代理和软路由环境下,Tailscale 的 UDP 流量要避免被代理转发
视频案例里,远端环境使用了软路由,并且在 passwall 一类代理环境里开启了代理主开关。这个场景下,Tailscale 不直连不一定只和监听端口有关,也可能和代理规则有关。
Tailscale 依赖 UDP 打洞。如果两台设备之间的 UDP 流量被代理、转发或改写,直连建立就可能失败,最后退回 relay。因此,在软路由或透明代理环境里,需要确保相关设备的 TCP 和 UDP 流量不要走代理,尤其是 UDP。视频中的处理方式是在访问控制里,把两台电脑设置成 TCP 和 UDP 不走代理,让两台设备之间尽量保持真实网络路径,从而形成直连。
这部分可以抽象成一个原则:排查 Tailscale 直连问题时,不能只盯着 Tailscale 客户端,也要看它所处的网络路径有没有被“智能处理”。软路由、透明代理、分流规则、多 WAN、多线多拨都会改变实际出站路径。对网页访问来说,这些能力可能是增强;但对点对点打洞来说,它们经常会制造额外变量。
最终目标不是“所有流量都直连”,而是让 Tailscale 建连所需的 UDP 路径尽量简单、稳定、可预测。只要两端能稳定暴露不同的 UDP 映射,并且中间没有被代理规则干扰,direct 成功率就会高很多。
框架 & 心智模型
1. Tailscale 延迟排障框架:先判链路类型,再判网络变量
排查 Tailscale 慢的问题,最容易犯的错误是从体感出发:远程桌面卡,就怀疑电脑性能、带宽、软件服务器或运营商。但更有效的框架是先看链路类型:direct 和 relay 是两个完全不同的问题空间。
可以按四层推进:
- 链路状态层:先用
tailscale status确认目标设备是direct还是relay。如果已经 direct,再讨论带宽、RDP 编码、远端负载;如果是 relay,优先解决打洞和路由问题。 - 对照实验层:比较同一网络下不同设备的表现。如果 A direct、B relay,说明网络不是全局不可用,问题更可能落在 B 的端口、服务、代理或映射上。
- 端口映射层:多台设备共用默认 41641 时,考虑把非直连设备改到 41642,避免 UPnP 映射冲突。
- 路径干扰层:检查多线多拨、软路由代理、访问控制、UDP 是否走代理。只要这些变量存在,就要把 Tailscale 的 UDP 通路从复杂策略中“摘出来”。
这个框架的价值在于把“网络玄学”变成可观测步骤。每一步都有明确证据:status 看 direct/relay,ping 看延迟,端口检查看监听是否生效,代理规则看 UDP 是否绕路。只要每一步都验证,就不会陷入反复重启、反复改设置但不知道为什么有效的状态。
2. 直连问题的核心心智模型:NAT 打洞需要“稳定、唯一、未被代理污染”的 UDP 路径
Tailscale 的 direct 不是魔法,它依赖两端在复杂 NAT 后面尽量建立可用的点对点路径。这个过程需要几个条件同时满足:设备要能监听 UDP,路由器要能给它形成稳定映射,中间路径不能被代理规则破坏,多台设备之间也不能抢同一个关键端口。
因此,遇到 relay 时,应该把问题想象成“这台设备没有拿到一条别人能打进来的 UDP 路”。常见原因包括:
- 默认端口被同网段其他设备占用或映射走了。
- 路由器 UPnP 行为不稳定,或者多线多拨让出站入口不一致。
- 软路由代理把 UDP 流量转发到了不适合打洞的路径。
- 防火墙、NAT 类型或运营商网络让入站映射不可预测。
视频中的修复之所以有效,是因为它同时降低了两个变量:一是把非直连设备从默认 41641 改到 41642,避免端口映射冲突;二是在代理访问控制里让相关设备的 TCP/UDP 不走代理,保证 Tailscale 建连路径更接近真实网络。修复后延迟从高延迟 relay 变成低延迟 direct,本质上就是 NAT 打洞恢复成功。
这个心智模型也能指导后续排障:不要看到 relay 就盲目换软件,也不要把 Tailscale 当作“开箱即一定直连”的黑盒。它能自动处理很多网络场景,但自动化的前提仍然是底层 UDP 路径不能被端口冲突、复杂路由和代理策略破坏。排障的目标就是把这些干扰项一个个拿掉,直到 tailscale status 重新显示 direct。
Raw Transcript
哈喽大家好
我是万能的三叔
那在上一期视频呢
三叔给大家推荐了一个完全免费
没有限制的
高清的
安全的超低延迟的跨平台的远程控制软件
Til scale
三叔在上一期视频是去讲
仔细讲解了他是怎么使用的
并且他的并且它的亮点呃特性是什么
以及整个的安装过程
那这一期视频呢三叔去讲一下
在一些复杂的网络环境中
比如说你配备了软软路由
配备了多个半口呃
呃这种这种比较复杂的网络环境之下
如果出现了这个一个设备直连
一个设备不直连
或者说两台设备都没有直连的这种情况
就是如果你在运行这个命令的时候
发现它的这个命令的结果是relay这种情况
那这个就说明你用用的是它的官方的这种
中继的方式
而不是去两台设备之间去直接连接
这种情况该如何处理
那三叔自己就是遇到了这个问题了
因为我远程的给大家可以看一下我远程的呃
先先先说一下我的环境啊
先说一下我的网络环境是呃
首先是我本机
然后呃远程远程软路由A设备直连
然后B设备不直连
是吧
这个环境就很复杂了
那症状呢
就是我在我ping两个两个不同设备的时候
他的他的延迟是不一样的
看我ping这台A设备直连的
它的延迟是个位数
是直接直连
而B设备的延迟呢是呃使用了官方中继的方式
真这个是给我连到美国去了
是我的数据相当于在美国走了一圈
所以他坚持很高
那首先我们第一步先去使用这个命令
studies先去检查确定
咱们如果说出现了RELA
那就说明你的设备经过了中转
这个BLR就是你的这个所在的这个地区
中转的地区
这个这个在上一期视频说过啊
建议大家可以先看一下上期视频
就是这个命令呢
可以看出来你的这个具体他他他是去给你中转
到哪去了
只了解一下就OK了
然后我们继续回来看我们的问题
意味着你的这台设备在使用中继模式
这就是缓慢的原因
那既然windows能直连
说明光猫的UPNP是正常工作的
问题是两台设备的tail scale抢了同一个端口
这是第一种情况
那如何解决
首先关闭路由器的多线多播
如果不想关
你确实有多线多播的这个需求
就是你的路由器上插了多个宽带
什么情况
那你可以不用
但如果你的设备是没有多个宽带的话
那其实多线多播是容易被供应商发现
是是是是是反而是会有问题的
所以大家如果没有特殊需求
建议大家是去关掉啊
那关掉了之后去重启一下路由
然后再去运行这个studies命令
看看两个你的多个设备之间
是不是从ray变成了direct
变成第一行
这样如果变成了direct
那就问题解决了
如果没有解决
那我们接着往下看
第二个方法
去你的那台非直连的设备上去修改
你的这个软件的监听端口
在乌班图上的修改方法呢是
是如果是LINUX的话
是去使用这个命令
然后到这里来去
把你的它原始的是141641
改成41642
然后这样就可以避免端口抢占
然后CTRL回车
CTRLX退出
然后使用这个命令去重启
那就可以解决
你的应该就可以解决了
这个时候你可以啊先先验证一下啊
用这个命令去验证一下
你的端口确实变成了41462
然后这个时候你你的另一台电脑
可以去开着你的ping去检查你的延迟
保持观察
稍等一到2分钟之后
这个延迟就从以前的两位数三位数啊
三位数
四位数就直接就会突然在经历过中断之后
就变成了延迟很低的状态
那就说明你修改成功了
然后我们看一下
可以看一下我本机的啊
我远程的那两台
我的方式呢是因为我使用了一个呃软路由
然后在password里面是去开启了这个代理的
主开关的
那我的方式呢是去在这个访问控制这边
把我的两台电脑去设置成了TCP和UDP
步走代理的方式
那这样的话就可以保证他们的呃
UDP是不经过转发的
就是两台设备之间是直接形成直连的情况
这这个应该可以
这这些方法应该可以解决
大家99%的复杂网络环境下的
tail scale不直连的故障
好吧
如果如果你的网络环境比三叔的这个还复杂
欢迎在评论区留言
来让三叔看一看到底是什么情况好
那这就是上一期视频的一个补遗
OK那就到这里
如果对你有用
请三连点赞收藏关注
支持一下
你的支持就是对三叔分享这些奇奇怪怪的
但是非常有用的
有用的软件的支持好
那这期视频就到这里
我们下期再见来源
暂无来源