
对大多数远程桌面用户而言,端口转发已过时。本篇介绍取而代之的机制:UDP 打洞、STUN/TURN,以及 Tenvo 如何在双重 NAT、CGNAT 和公司防火墙后面工作而无需改路由器。
五年前,设置 无需端口转发的远程桌面 还是一个研究性的问题。你需要登录路由器,打开 TCP 3389(或你所用工具的端口),祈祷你的 ISP 不会屏蔽它,然后将 RDP 服务器暴露到公共互联网;这也是 Sophos 指出 2023 年近一半勒索软件事件通过面向互联网的 RDP 进入的原因。如今,几乎所有消费级远程桌面工具已完全抛弃端口转发。本文解释实现方式、涉及的权衡,以及 Tenvo 如何处理你可能遇到的各种故障模式。
要点: 现代远程桌面客户端使用一个引导(rendezvous)服务器将两个端点互相介绍,然后尝试通过 UDP 打洞建立直接点对点连接。如果打洞失败(常见于 对称 NAT、CGNAT 和某些公司防火墙),则回退到中继。不论哪种情况,你都无需动路由器。
为什么在 2026 年端口转发成问题
端口转发在 2005 年还是有意义的。当时大多数用户只有一层 NAT(家庭路由器),公网 IPv4 很便宜,ISP 也不会干预。如今这些假设都不成立。
- CGNAT (Carrier-Grade NAT): 大多数移动运营商以及越来越多的光纤 ISP 将数千名用户放到同一个公网 IP 之后。你无法为一个你不拥有的公网地址转发端口。T-Mobile Home Internet、Starlink residential 和大多数蜂窝热点默认都在 CGNAT 之后。
- Double NAT: ISP 提供的网关常常在你的路由器前再运行一层 NAT,让你处于两层之后。在内网路由器上做转发毫无意义。
- 企业防火墙: 策略上只允许出站。你不可能让 IT 部门为你的笔记本打开入站 3389。
- IPv6 过渡: 某些网络仅支持 IPv6 并使用 NAT64;传统的 IPv4 端口转发概念在那类环境中不存在。
- 安全性: 即便可以转发端口,也不应该这么做。RDP 的暴力破解扫描是公共互联网的持续背景噪音,Shodan 在任意时刻大约索引着 400 万个暴露的 RDP 节点。
NAT 穿透如何取代端口转发
该技术称为 NAT 穿透,并已在 WebRTC 栈中标准化,所有基于浏览器的视频通话都在使用这些原语。远程桌面工具借用了相同的机制。
步骤 1:通过 ID 服务器建立会合
当你启动 Tenvo 时,客户端会与我们的 ID 服务器建立一个持久的出站连接(在上游 RustDesk 代码库中称为 hbbs)。这是一种普通的出站 TCP/UDP 连接,几乎所有 NAT 和防火墙都允许。ID 服务器会记录你的设备 ID、你的映射后公网 IP,以及 NAT 为你分配的源端口。所有已连接设备都会被同样处理。
当你输入某人的 ID 并点击连接时,客户端会向 ID 服务器询问:"设备 123 456 789 在哪里?" 服务器会返回该设备的公网端点,并要求双方同时开始打洞。
步骤 2:UDP 打洞
双方同时向对方的公网端点发送 UDP 数据包。大多数 NAT 是 端点无关 的:一旦你向任意外部地址发出数据包,NAT 会允许通过同一端口的任何回复。当双方同时打洞时,每个 NAT 都认为入站数据包是对出站包的合法回复并放行。于是形成直接的点对点连接,流量不经过任何 Tenvo 基础设施。
在我们的无遥测测量中(2026 年 3 月跨 EU 与 US 的 50 个最常见 ISP 测试),该方法对大约 85% 的消费级 NAT 配对有效。它也是 Tailscale、WireGuard 的端点发现以及每一次 Zoom 通话背后的相同机制。
步骤 3:中继回退(类 TURN)
当至少一端运行 对称 NAT(即针对不同目标选择不同外部端口)时,打洞会失败。CGNAT 几乎总是对称的,酒店 Wi‑Fi 也常如此。当在 3 秒超时时间内无法建立直接 P2P 时,双方会通过我们的中继重新建立连接(上游称为 hbbr)。中继在 TLS 之上转发字节。要明确这一点的含义:TLS 在中继处终止,因此与直接点对点连接不同,中继会话并非你两台设备之间的端到端加密。如果这对你的威胁模型很关键,请部署你自己的中继。
中继会增加延迟(在我们的 EU 与 US PoP 上通常为 15–40ms),且你会与其他中继会话共享带宽,但它能在任何允许出站类似 HTTPS 流量的 NAT 拓扑下工作。
连接决策树
| NAT scenario | What happens | Latency overhead |
|---|---|---|
| Both sides on full-cone or restricted-cone NAT | Direct P2P | ~0 ms |
| One side symmetric, other endpoint-independent | Direct P2P (port prediction) | ~0 ms |
| Both sides symmetric / CGNAT | Relay fallback | 15-40 ms via nearest PoP |
| One side IPv6-only, other IPv4-only | Relay fallback | 15-40 ms |
| Strict corporate firewall (outbound 443 only) | Relay over TLS on 443 | 15-40 ms |
与其他方案比较
VPN 隧道(WireGuard、Tailscale、Twingate)
VPN 在不同的层解决相同问题:它们将两个端点放到同一虚拟专用网络上,从而允许任意协议通过。Tailscale 特别也使用上面描述的相同 NAT 穿透技术来构建其网格。缺点是你需要安装、管理并保持另一个软件的更新,而且你将所有流量路由到远端机器,而不仅仅是远程桌面会话。对于单一特定用例(远程控制一台 PC),内建 NAT 穿透的工具更简单。
端口转发的 RDP
原生的 Windows RDP 要求你从路由器将 TCP 3389(或你重映射后的其他端口)转发到目标机器。这在单层 NAT 的家庭网络中可行,但需要静态公网 IP 或动态 DNS,会暴露在全球的 RDP 暴力扫描中,并且一旦 ISP 将你迁移到 CGNAT 就会立即失效。Microsoft 自身的建议是将 RDP 放在 Remote Desktop Gateway 或 Azure Bastion 之后,它们本质上也是中继。
AnyDesk 和 TeamViewer
它们也使用 rendezvous + 打洞 + 中继回退。整体架构与 Tenvo 大体相同。区别在于:AnyDesk 与 TeamViewer 在封闭源代码客户端上运行专有协议,它们的中继无法自托管,且其定价反映了为数百万用户运行全球中继基础设施的运营成本。Tenvo 构建于开源的 RustDesk fork 之上,因此协议可审计,且如果你需要完全控制,中继可以自托管。
三步设置
NAT 穿透的核心就是无需配置。下面是在 Windows 上的实际安装流程:
# 1. Download (no admin required for the portable build)
Invoke-WebRequest https://tenvoai.com/download/godesk-windows-x64.exe -OutFile godesk.exe
# 2. Launch, generates a 9-digit ID and a one-time password
.\godesk.exe
# 3. On the controlling machine, enter the ID and password. Connected.无需改路由器。无需防火墙规则。无需静态 IP。相同流程在 macOS(DMG)、Linux(deb/rpm/AppImage)和 Android(APK 或 Play 商店)上同样适用。若需在大量机器上部署,请参阅我们的 Windows 平台指南 了解基于 MSI 的静默安装方法。
何时你仍可能需要端口转发
两种边缘情况:
- 没有互联网访问的隔离 LAN。 如果你在不能访问我们公共 ID 服务器的局域网内自托管 Tenvo 中继,需要使用
--relay-server标志将客户端指向你的内部中继,并配置防火墙以允许该流量。完整设置请参阅我们的 自托管指南。 - 在已知良好网络上的低延迟关键工作流。 如果你在局域网内进行游戏或音频制作,固定端口的直接连接会减少一项潜在故障点。Tenvo 支持“直连 IP”模式,但这不是默认设置,且在外网时不会使用该模式。
结论
对于远程桌面而言,端口转发是 2010 年的解决方案来应对 2026 年的问题。现代的 NAT 穿透能在 99% 的网络拓扑下实现零配置,既不会将服务暴露到公网,也不要求静态 IP。请在两台机器上 下载 Tenvo,输入 ID,即可连接。如果你想了解运行在 NAT 穿透层之下的安全模型,接着阅读 远程桌面是否安全。
常见问题
Tenvo 真能在不做任何路由器配置的情况下工作吗?
能。客户端仅发起出站连接,几乎所有 NAT 与消费级防火墙默认允许出站连接。无需入站规则、无需 UPnP、无需端口转发。
如果我的两台设备都在 CGNAT 后面会怎样?
打洞很可能会失败,会话会回退到我们的中继。你会看到略高的延迟(增加约 15–40 ms),但除延迟外连接表现与直连相同。
中继是否构成隐私风险?
这取决于谁在运营它,我们宁可直言不讳也不做模糊承诺。流量由 TLS 保护,并使用每设备证书,但 TLS 在中继处终止:中继运营者处于可以查看会话的地位。直接点对点连接不存在这样的中间方,大约 85% 的连接保持直连。如果中继不可接受,请自托管中继。若我们想要并试图查看你的流量,我们也无法做到(注:在直连场景下)。
如何判断我是直连还是中继连接?
Tenvo 客户端的状态栏在连接建立后会显示“直连”或“中继”。你也可以从工具栏查看会话详情。
我能强制 Tenvo 始终使用中继吗?
可以,在客户端配置中设置 relay-only = true。当你希望拥有稳定一致的延迟(而不是 P2P 在会话中途回退到中继导致的波动)时,这很有用。