使用 RustDesk 实现内网穿透
RustDesk 是一款开源远程桌面软件,支持 TCP 隧道(tunneling)功能,这可以用于转发端口,从而允许从其他设备(Windows 或 macOS)通过 SSH 访问 Ubuntu 服务器。即使服务器无 GUI,RustDesk 也可以在 headless(无头)模式下运行作为服务端。TCP 隧道本质上是客户端发起的端口转发:客户端连接到服务器的 RustDesk 后,设置本地端口转发到服务器的 SSH 端口(默认 22),然后从客户端本地 SSH 到该端口即可访问服务器。
- 此设置假设 Ubuntu 服务器的 SSH 服务已启用(
sudo apt install openssh-server && sudo systemctl start ssh)。- 默认情况下,RustDesk 使用公共中继服务器。如果需要自托管中继服务器(例如防火墙限制),可以额外安装 RustDesk Server,但这里聚焦于基本设置。
- TCP 隧道需要在客户端的 RustDesk GUI 中配置(Windows/macOS 有 GUI),服务器侧只需启用并运行 RustDesk 服务。
- 安全提示:使用强密码,并考虑自托管以避免公共中继。
在 Ubuntu 服务器上安装和配置 RustDesk(CLI 操作)
更新系统包:
1sudo apt update && sudo apt upgrade -y下载最新 RustDesk deb 包(检查 RustDesk GitHub Releases 获取最新版本,例如 1.4.2):
1wget https://github.com/rustdesk/rustdesk/releases/download/1.4.2/rustdesk-1.4.2-x86_64.deb安装 deb 包:
1sudo dpkg -i rustdesk-*.deb修复任何依赖问题:
1sudo apt-get install -f安装 headless 支持所需包(虚拟显示驱动,可选):
1sudo apt install ubuntu-desktop xserver-xorg-video-dummy lightdm -y启用 headless 模式:
1sudo rustdesk --option allow-linux-headless Y作为系统服务启动 RustDesk(自动后台运行):
1 2sudo systemctl start rustdesk sudo systemctl enable rustdesk # 开机自启获取 RustDesk ID(用于客户端连接):
1sudo rustdesk --get-id(输出类似:123456789)
设置永久密码(替换
<your_password>为强密码):1sudo rustdesk --password <your_password>启用 TCP 隧道(默认已启用,但可手动确认/设置):
- 编辑配置文件(通常在
/root/.config/rustdesk/RustDesk.toml):1sudo vim /root/.config/rustdesk/RustDesk.toml - 添加或修改:
1enable-tunnel = "Y" - 保存后,重启服务:
1sudo systemctl restart rustdesk
- 编辑配置文件(通常在
在客户端设备上配置 RustDesk 和 TCP 隧道
各平台都可从 RustDesk GitHub Releases 下载并安装 RustDesk 客户端。安装完成后打开 RustDesk 客户端,输入服务器的 ID 和密码进行连接。连接成功后,在 RustDesk 界面中设置 TCP 隧道。
设置端口转发
点击已添加设备菜单中的 TCP Tunneling 按钮

添加新隧道:
- 本地端口:任意可用端口,例如 50002(本地监听端口)。
- 远程主机:localhost(或服务器内网 IP,如果不同)。
- 远程端口:22(SSH 端口)。

上述端口转发设置将实时生效,在使用过程中请勿关闭端口转发窗口。
测试隧道
在客户端命令行(Windows: PowerShell 或 cmd;macOS: Terminal)运行:
| |
输入 Ubuntu 服务器的 SSH 密码,即可连接。这会将客户端的本地 50002 端口流量转发到服务器的 22 端口,实现 SSH 访问。
或者可以通过 Visual Studio Code / Cursor 等支持 SSH 访问的软件进行上述测试,详细的 SSH 配置如下:
| |
其他使用场景
除了上述的 SSH 连接之外,还可以通过将 Windows 设备的 Remote Desktop Protocol 端口(RDP 端口默认为 3389)映射到本地,例如在上述 Port Forwarding 窗口中配置本地 40002 端口转发到远端 3389 端口。然后使用 Windows APP 新建 RDP 远程桌面连接,Windows APP 中的设置如下图,设置远端 Windows 用户名和密码后,即可通过 RustDesk 端口转发的形式完成远程桌面访问。

但话说回来,RustDesk 本身就支持远程桌面访问,上述需求也许算是一个伪需求吧~
为 RustDesk 设置代理
在某些情况下穿透不太稳定,因此可以设置代理使远程连接更加丝滑。如果本机已经安装代理软件且默认开放局域网访问(如 Clash 系列软件,默认开启本机 7890 端口接收其他软件或设备的代理请求),因此可以将 RustDesk 的流量转发给 Clash(127.0.0.1:7890)使其托管,设置方法如下:

常见问题排查
- 连接失败:检查防火墙(
sudo ufw allow 21114:21119/tcp && sudo ufw allow 21116/udp),或使用自托管服务器(参考 https://rustdesk.com/docs/en/self-host/)。 - 无输出:CLI 命令需 sudo 执行。
- 密码加密:如果配置文件中密码加密,可用
--get-temp-password获取临时密码。 - 多设备:每个客户端独立连接并设置隧道,支持同时多个。