banner
约 1,800 字
6 分钟

Tailscale + xrdp 实现 Ubuntu 无公网远程控制方案

摘要

本文介绍了一种无需公网 IP 和端口转发的 Ubuntu 远程桌面方案。在 Ubuntu 端,需安装 Tailscale 并登录,安装 xrdp(推荐轻量级 Xfce),配置会话并放行 3389 端口。在 Windows 端,安装 Tailscale 并使用远程桌面连接到 Ubuntu 的 Tailscale IP。文中还提供了连接失败、黑屏等常见问题的解决方法。

前言

我之前写过 Ubuntu 的远程控制方案,当时用的是端口转发的思路。但很多朋友反馈说:我根本没有公网 IP,或者宽带运营商不给公网地址,这条路根本走不通。

那没有公网 IP 该怎么办?传统方案无非两种:

  • frp:需要一台有公网 IP 的服务器做中转,得自己买服务器。

  • Ngrok:用它的服务,但有流量限制,免费额度也紧巴巴。

其实还有一条更省心的路——Tailscale + xrdp。这套方案体验最接近原生 Windows 远程桌面,而且关键优势在于:

  • 全程不用公网 IP

  • 不用去路由器里开端口(不用 NAT 转发、不用改防火墙)

Tailscale 免费版个人套餐就支持 100 台设备,个人用完全够。下面完整记录配置过程。

原理:为什么能"无公网也远程"

简单说,Tailscale 会把你名下的多台设备(不管它们各自在什么网络下)组成一个虚拟局域网,给每台设备分配一个稳定的 100.x.x.x 虚拟 IP,设备之间通过加密隧道直接互通——所以两台机器之间能互相访问,根本不需要公网 IP

而 xrdp 则是让 Linux 提供一个 RDP(远程桌面协议)服务,这样 Windows 自带的"远程桌面连接"(mstsc)就能直接连上来,体验和连 Windows 远程桌面几乎一样。

一句话概括:Tailscale 负责"把两台机器拉到同一个内网",xrdp 负责"提供桌面",合起来就是无公网 IP 的流畅远程桌面。

一、Ubuntu 端配置(被控机)

先在被控的 Ubuntu 机器上操作。

1. 安装并登录 Tailscale

在 Ubuntu 终端执行:

bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

安装 Tailscale

运行 sudo tailscale up 后,终端会打印一个登录链接

Tailscale 登录链接

把它复制到浏览器打开,用 Google / GitHub / Microsoft 账号登录(随便选一个)。登录成功后,这台 Ubuntu 会获得一个 100.x.x.x 的虚拟 IP,就说明已经加入你的虚拟局域网了。

2. 安装 xrdp

Ubuntu 桌面版可以直接用默认环境,但有个坑要注意:GNOME 桌面经 xrdp 很容易黑屏/卡顿。所以我推荐装轻量的 Xfce,远程体验更流畅。

bash
sudo apt update
sudo apt install -y xfce4 xfce4-goodies xrdp

3. 让 xrdp 使用 Xfce

装完 Xfce 后,要告诉 xrdp 用 Xfce 会话,并启动服务:

bash
echo "xfce4-session" > ~/.xsession
sudo systemctl enable --now xrdp
sudo systemctl restart xrdp

这一步是避免黑屏/认证循环的关键,别跳过。

4. 放行端口(若开了 UFW 防火墙)

如果你给 Ubuntu 开了 UFW 防火墙,需要放行 RDP 端口 3389:

bash
sudo ufw allow 3389/tcp

注意:我们之所以能"不开路由器端口",是因为 Tailscale 走的是它自己的加密隧道,不需要你在公网路由器上转发 3389;这里的 ufw allow 只是放行 Tailscale 虚拟网卡到你本机的访问。

5. 记下 Ubuntu 的 Tailscale IP

bash
tailscale ip
# 比如我的是 100.102.53.68

查看 Ubuntu 的 Tailscale IP

把这个 IP 记下来,等会儿 Windows 端就连它。

二、Windows 端设置(你的电脑)

Ubuntu 端配好后,到你的 Windows 电脑上操作。

  1. https://tailscale.com/download 安装 Windows 版 Tailscale

安装 Windows 版 Tailscale
  1. 登录同一个账号(和 Ubuntu 那步用的账号一致)——这样两台机器才能在同一个虚拟局域网里互相看到。

  2. 打开 Windows 自带的**「远程桌面连接」**(按 Win+R 输入 mstsc 回车即可)。

  3. 在"计算机"栏填 Ubuntu 的 Tailscale IP(如 100.102.53.68)。

远程桌面连接填写 Tailscale IP
  1. 用户名 / 密码填 Ubuntu 的登录账密

  2. 点连接,看到 Xfce 桌面就成功了 🎉

成功远程连接到 Ubuntu 的 Xfce 桌面

三、常见坑(排错)

1. 连不上

  • 先确认 Windows 端 Tailscale 已登录、状态是绿色(在系统托盘看)。

  • ping <Ubuntu的Tailscale IP> 测试两台机器是否互通。ping 不通说明虚拟局域网没建立,先解决 Tailscale 连接问题。

2. 黑屏 / 认证循环

  • 多半是 GNOME 会话和 xrdp 的兼容问题。回到上面第 3 步,切换到 Xfce(写入 ~/.xsession 并重启 xrdp)基本就能解决。

3. 提示密码错误

  • sudo passwd $USER 重新设置一下 Ubuntu 用户的密码。

4. 卡顿明显

  • 确认用的 Xfce 而非 GNOME(GNOME 经 RDP 效率低)。

  • 检查两端网络质量;Tailscale 两端尽量靠近公网质量好的网络。

我的结论

这套 Tailscale + xrdp 方案,是我目前用过最接近"原生远程桌面"且完全免费的组合了。它最大的价值就是解决了"没有公网 IP"这个硬伤——不用买服务器中转、不用折腾路由器端口,只要两台机器都装了 Tailscale 加入同一账号,剩下的体验跟本地局域网远程几乎没区别。

要说小缺点,就是需要在 Ubuntu 上装并切换到 Xfce(如果你习惯了 GNOME,会需要适应一下桌面样式)。但换来的是稳定流畅的远程体验,这点代价完全值得。

如果你也有一台 Ubuntu 机器(比如闲置笔记本、小主机),想随时随地用 Windows 远程连上去,强烈推荐这套方案——配一次,以后走到哪都能像在本地一样连过去。

END