解决Tailscale打洞: Derp/UPnP/全锥NAT

7 15~19 min

解决Tailscale打洞: Derp/UPnP/全锥NAT

最近换了新的宽带之后, tailscale的打洞非常稳定的失败, 这直接影响到了远程办公的体验.

打洞成功之后的延迟一般只有10ms, 但是现在只能通过tailscale的中转服务器, 然后延迟爆炸提升到了200ms.

但是问题是: 同样的宽带, 为什么之前几乎可以稳定的打洞成功, 现在不能够打洞呢?

Derp

tailscale的中转服务器, 主要解决的问题就是当遇到难以进行打洞时, 通过中转服务器进行数据转发.

但是tailscale没有在中国大陆的节点, 最近的是在香港和日本.

我们可以自建derp中转服务器: 可以参考链接

自建之后的效果:

❯ tailscale netcheck

Report:
        * Time: 2025-07-13T05:59:04.4913481Z
        * UDP: true
        * IPv4: yes, xxx
        * IPv6: no, but OS has support
        * MappingVariesByDestIP: false
        * PortMapping:
        * CaptivePortal: false
        * Nearest DERP: Beijing
        * DERP latency:
                -  gz: 38.1ms  (Beijing)
                - iad: 251.4ms (Ashburn)
                - nue: 291.1ms (Nuremberg)
                - hel: 291.1ms (Helsinki)

其中的北京节点就是自建的节点, 可以看到延迟大大降低了, 此时使用RDP的延迟降低到了60ms

但是这个方案只能应急, 真正的想要解决延迟和带宽问题还是要打洞.

UPnP

UPnP

最值得我们关注的是UPnP IGD 协议.

介绍

  • UPnP: 通用即插即用,这是一个大的协议框架,目标是让网络里的各种设备能自动发现和通信。它下面包含了很多针对不同设备类型的具体规范。
  • IGD: 这是 Internet Gateway Device 的缩句,中文意思就是“互联网网关设备”。在绝大多数家庭和办公网络中,这个设备就是你的路由器

尽管STUN和基本的“打洞”技术在许多情况下有效,但它们面对更严格的NAT类型(如对称NAT)时,成功率会下降。在对称NAT环境下,路由器为每个不同的目标地址和端口都会分配一个新的、随机的外部端口,这使得对等方很难预测应该向哪个端口发送数据。

这时,UPnP IGD就派上了大用场。如果设备所在的路由器支持并开启了UPnP IGD,Tailscale客户端会检测到这一点,并利用它来提升“打洞”的成功率:

  • 创建可预测的外部端口: Tailscale客户端可以利用UPnP IGD向路由器请求一个固定的端口映射。例如,笔记本B可以请求路由器将公网的23456​端口映射到自己的某个内部端口。
  • 简化对等方的工作: 笔记本B随后可以通过Tailscale的协调服务器告知电脑A:“请直接向我的公网IP地址的23456​端口发送数据。”由于这个端口映射是预先通过UPnP IGD建立的,电脑A的连接请求更有可能成功到达笔记本B,从而建立直接连接。

根据Tailscale的官方文档,当其客户端通过tailscale netcheck​命令检测网络环境时,会明确报告端口映射(Port Mapping)的支持情况,其中就包括UPnP。如果检测到支持UPnP,通常意味着该设备处于一个“简单NAT(Easy NAT)”环境中,建立直接连接的可能性大大增加。反之,如果不支持任何端口映射协议,可能会被归类为“困难NAT(Hard NAT)”

开启方式

可以直接参考 链接

效果

尽管听起来很美好, 但是仅开启了UPnP并没有解决问题. 想要根本的解决问题还是要从网络提供商的服务选项上来解决.

全锥NAT

NAT是什么?

网络地址转换(Network Address Translation, NAT) 是一种网络技术,它通过修改IP数据包的头部信息(IP地址和端口号),将一个IP地址空间(例如,私有网络)映射到另一个IP地址空间(例如,公共互联网)。这项技术通常部署在路由器、防火墙或专用的NAT设备上。

  1. 解决IPv4地址枯竭问题: 这是NAT最主要、最原始的动机。IPv4地址(如 203.0.113.10​)的总量约43亿个,已远不能满足全球联网设备的需求。NAT允许一个组织或家庭内的多台设备(电脑、手机、智能家居等)使用私有IP地址(如 192.168.1.101​, 10.0.0.5​),并通过共享单个或少数几个公共IP地址来访问互联网。这种“多对一”的转换极大地延缓了公网IP地址的消耗速度。这种模式在技术上更准确的叫法是 NAPT(网络地址端口转换) ,但现在通常也泛称为NAT。
  2. 提供基础网络安全: NAT天然地起到了防火墙的作用。由于内部设备的私有IP地址在互联网上是不可路由(无法直接访问)的,外部网络中的主机无法主动发起连接到您内网的任意一台设备。只有当内部设备首先向外部服务器发起连接后,NAT设备才会建立一个临时的、允许返回流量通过的会话。这有效地隐藏了内部网络的结构,增加了攻击者直接攻击内部设备的难度。
  3. 简化网络管理: 当更换互联网服务提供商(ISP)或重新规划公网IP地址时,网络管理员只需在NAT设备上更改配置即可,而无需重新配置内部网络中的每一台设备。

NAT的等级

1. 全锥形NAT (Full Cone NAT) - 即NAT类型1

全锥形NAT 是最“开放”或限制最少的一种NAT类型。一旦内部设备(例如 192.168.1.100:51000​)通过NAT向外发送过一次数据包,NAT就会为其建立一个公网IP和端口的映射(例如 203.0.113.10:34000​)。

  • 核心特征:

    • 固定映射: 从同一个内部IP和端口发出的所有请求,都会被映射到同一个外部IP和端口。
    • 无限制传入: 建立映射后,任何(Any) 外部主机都可以通过向这个映射的公网地址(203.0.113.10:34000​)发送数据包,来与该内部设备通信。
  • 通俗比喻: 就像您在公司的前台登记后,前台给了您一张可以自由出入大楼所有楼层的通用访客卡。任何知道您访客卡编号的人,都可以直接来找您。

  • 应用影响: 对P2P应用最为友好。设备很容易建立直接连接,因为只要一方将自己的公网地址和端口告诉另一方,另一方就可以直接连接过来。这就是为什么在游戏主机的网络测试中,NAT类型1(NAT Type 1) 通常表示最佳的网络连接状态。

2. 地址限制锥形NAT (Address-Restricted Cone NAT) - NAT类型2

这种类型在全锥形的基础上增加了一层限制。

  • 核心特征:

    • 固定映射: 与全锥形NAT相同,内部地址到外部地址的映射是固定的。
    • 地址限制: 只有当内部设备之前向某个外部主机的IP地址(例如 X)发送过数据时,该外部主机 X​ 才能向这个映射的公网地址发送数据。来自任何其他未知IP地址的数据包都将被丢弃。
  • 通俗比喻: 前台仍然给您一张访客卡,但这张卡只能让您拜访您提前预约过的公司。只有您联系过的公司(IP地址),才能回访您。

  • 应用影响: 对P2P应用也比较友好,NAT“打洞”成功率较高。

3. 端口限制锥形NAT (Port-Restricted Cone NAT) - NAT类型3

这是锥形NAT中限制最严格的一种。

  • 核心特征:

    • 固定映射: 映射关系依然是固定的。
    • 端口和地址双重限制: 只有当内部设备之前向某个外部主机的IP地址和端口号(例如 X:P)发送过数据时,该外部主机 X​ 才能使用其端口 P​ 向这个映射的公网地址发送数据。来自主机 X​ 但从不同端口发来的数据,或来自不同主机的数据,都将被拒绝。
  • 通俗比喻: 访客卡现在不仅限制了您能拜访的公司,还限制了您必须找该公司的特定联系人(端口号)。只有您联系过的那个特定的人,才能回电话给您。

  • 应用影响: 建立P2P连接的难度有所增加,但通过STUN等技术仍然有很高的成功率。

4. 对称NAT (Symmetric NAT) - 最严格的NAT类型

对称NAT 是限制最严格、对P2P应用最不友好的一种。

  • 核心特征:

    • 动态映射: 从同一个内部IP和端口发送到不同目标地址和端口的请求,会被映射到不同的外部端口。也就是说,映射关系取决于通信的目标方。
    • 严格限制: 只有收到数据的那个特定的外部主机,才能从它收到数据的那个端口,向回发送数据。
  • 通俗比喻: 您每次要拜访一个新客户,前台都会给您一张新的一次性访客卡。这张卡只对您当前要拜访的客户有效,并且在您拜访完后可能就失效了。其他任何人、甚至您拜访过的客户想用其他方式联系您,都无法通过这张卡找到您。

  • 应用影响: 极大地增加了NAT“打洞”的难度。因为通信双方很难预测对方下一次通信会使用哪个公网端口。在这种情况下,P2P应用通常需要一个公网中继服务器(如TURN服务器)来转发所有数据,这会显著增加延迟和成本。

开启全锥NAT

image

然后万事大吉