原理

Tailscale 如何用于远程桌面?

远程桌面协议 (RDP)、VNC 或其他屏幕共享工具通常需要你在路由器上进行复杂的端口转发设置,并将你的电脑直接暴露在公共互联网上,这会带来严重的安全风险。

Tailscale 彻底改变了这一点:

  1. 无需公网 IP 或端口转发: 你无需对家庭或办公室的网络进行任何修改。Tailscale 会为每台设备分配一个固定的、私有的 IP 地址(格式通常是 100.x.x.x)。
  2. 增强安全性: 当你使用 Tailscale 进行远程桌面时,整个连接过程都在一个端到端加密的隧道中进行。这意味着除了你自己的设备,没有其他人(包括 Tailscale 公司)能够窥探你的连接内容。这极大地降低了被黑客攻击的风险。
  3. 简化连接过程: 设置完成后,你只需在远程桌面客户端(如 Windows 自带的“远程桌面连接”或 macOS 上的 Microsoft Remote Desktop)中输入目标电脑的 Tailscale IP 地址,而不是它复杂的公网 IP。

NAT 穿透

Tailscale 之所以能让这些设备互相通信,是巧妙地运用了一系列名为 “NAT 穿透”(NAT Traversal) 的网络技术。整个过程可以分为三个关键部分:一个“协调员”,一个首选的“直连方案”,以及一个“中继备胎”。

1. 协调服务器 (The Coordinator)

首先,您在每个设备上安装并登录 Tailscale 时,这些设备都会向 Tailscale 的协调服务器报到。

  • 设备注册: 每个设备都会告诉协调服务器:“你好,我在这里!” 同时,它会提供一些网络信息,比如它在局域网内的 IP 地址,以及它所在的路由器对外呈现的公网 IP 和端口(尽管这个公网 IP 是共享的)。
  • 交换“名片”: 当你的电脑 A 想要连接你的电脑 B 时,协调服务器就像一个介绍人。它不会传输你的数据,而是把电脑 B 的“网络名片”(包括公网 IP、端口和加密密钥)发给电脑 A,反之亦然。

**重要的是:协调服务器只负责“牵线搭桥”,一旦设备双方认识了,它就尽可能地退出,让设备之间直接对话。**你的实际数据流,如远程桌面的画面,并不会流经 Tailscale 的服务器。

2. NAT 穿透:想办法“打洞”直连 (The Preferred Plan: Direct Connection)

现在,电脑 A 和 B 都有了对方的网络信息,但它们都被各自的路由器(NAT 设备)保护着。它们需要一种方法来“穿透”这层保护,建立一条直接的点对点连接。这个过程通常被称为 “打洞”(Hole Punching)

您可以这样理解这个过程:

  • 路由器通常会阻止外面主动发起的连接请求,但会允许内部设备主动发起的连接“出去”,并让返回的数据“进来”。
  • 电脑 A 和电脑 B 在协调服务器的帮助下,几乎在同一时刻,主动向对方的公网 IP 和端口发送一个数据包。
  • 当 A 的数据包到达 B 的路由器时,B 的路由器可能会因为这是“不请自来”的连接而丢弃它。但是! 因为 B 几乎在同时也在向 A 发送数据包,B 的路由器已经在自己的状态表里为这个“出站”连接记录了一个“允许返回”的规则。
  • 因此,当 A 的数据包紧随其后到达时,B 的路由器会认为这是之前那个“出站”连接所期待的“返回”数据,于是就放行了!
  • A 的路由器对 B 的数据包也是同理。这样,一个双向的加密隧道就在两个路由器之间被“冲开”了。

一旦这个“洞”被打通,两台设备就可以通过这个直接的加密隧道高效地传输数据了。绝大多数情况下(约 85-90%),Tailscale 都能成功地建立这种直接连接。

3. DERP 服务器:当直连失败时的中继备胎 (The Fallback: Relay Servers)

在某些复杂的网络环境下(例如,某些大型企业网络、严格的运营商级 NAT),“打洞”可能会失败。

这时,Tailscale 会启动备用方案:DERP (Designated Encrypted Relay for Packets) 服务器。

  • DERP 是 Tailscale 在全球部署的一组中继服务器。
  • 如果电脑 A 和 B 无法直连,它们会各自连接到离自己最近的 DERP 服务器。
  • DERP 服务器会接收来自 A 的加密数据包,然后将其原封不动地转发给 B,反之亦然。它就像一个加密邮件的中转站。

关键在于,即使通过 DERP 中继,你的数据依然是端到端加密的。 DERP 服务器只能看到加密后的数据包,无法解密你的任何内容。它只是一个盲目的“搬运工”。虽然通过中继会增加一点点延迟,但它保证了在任何网络条件下,你的设备始终能够保持连接。

基础配置

登陆互访

各客户端登陆即可成功通过 derp 互访

subnet routers

1. 功能定义

Subnet Router 允许你将某台设备作为“网关”,把整个公司或家庭的私有网段(如 192.168.1.x)暴露给 Tailscale 网络。

  • 解决痛点:你不需要在每一台打印机、摄像头、或老旧服务器上安装 Tailscale。只要“网关”开了子网路由,你就能访问这些网段内的所有设备。
  • 无感切换:在公司时走局域网,在外面时流量通过子网路由器中转。

2. 配置步骤

服务端 (公司/家里的跳板机)

  1. 开启内核转发

    echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
    echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  2. 宣告子网路由: 假设你要宣告的内网段是 192.168.3.0/24

    sudo tailscale up --advertise-routes=192.168.3.0/24
  3. 后台授权: 打开 Tailscale 控制面板,点击该设备的 Edit route settings,勾选对应的子网段。

客户端 (你的 MacBook/手机)

  • macOS/Windows:点击菜单栏图标 Settings Route Settings 勾选 Use Tailscale Subnets
  • Linux:运行 sudo tailscale up --accept-routes

exit node

1. 功能定义

Exit Node 允许你通过某台远程设备转发所有非 Tailscale 流量(包括上网流量)。

  • 解决痛点:当你身处不安全的公共 WiFi,或者需要以公司/家庭的固定公网 IP 访问特定网站(如限制 IP 的管理后台)时,可以将流量全部“隧道化”到出口节点。
  • 效果:开启后,你在查 IP 时,显示的会是“服务端”的公网 IP,而不是你当前的 IP。

2. 配置步骤

服务端 (拥有优质网络或固定 IP 的设备)

  1. 开启内核转发

    echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
    echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  2. 宣告出口节点功能

    sudo tailscale up --advertise-exit-node
  3. 后台授权: 在 Tailscale 控制面板 中找到该设备,进入 Edit route settings,勾选 Use as exit node

客户端 (需要“变身” IP 的设备)

  • macOS/Windows:点击菜单栏图标 Exit Node 在列表中选择刚才配置的“服务端”名称。
  • 手机端:在 App 首页找到 Exit Node 选项并选择相应节点。
  • Linux:运行 sudo tailscale up --exit-node=<服务端的Tailscale-IP>
维度Subnet Router (子网路由)Exit Node (出口节点)
流量范围仅私有网段流量(如访问内网 GitLab)全部互联网流量(如刷网页、看视频)
主要用途跨地域办公,访问内网资源隐藏真实地址,安全上网,固定 IP 访问
核心命令--advertise-routes=...--advertise-exit-node
后台操作批准特定网段批准该设备作为出口