没有公网 IP 的服务器(通常位于内网)无法直接从互联网直接访问,但可以通过以下几种主流方案实现远程连接 Ubuntu 桌面。选择哪种方案取决于你的网络环境、安全需求和技术偏好。
核心前提:安装并配置桌面环境
无论使用哪种方案,首先确保服务器已安装图形界面和远程服务软件。
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装 Ubuntu 桌面环境 (如果尚未安装)
# 注意:Ubuntu Server 默认无桌面,需安装 ubuntu-desktop 或轻量级版本如 xfce4
sudo apt install ubuntu-desktop -y
# 或者更轻量的 XFCE:
# sudo apt install xubuntu-desktop -y
# 3. 安装远程桌面协议服务
# 方案 A: VNC (通用性强)
sudo apt install tightvncserver -y
# 方案 B: XRDP (更接近 Windows 体验,推荐)
sudo apt install xrdp -y
# 4. 启动服务
sudo systemctl enable --now xrdp # 如果使用 XRDP
# 或者手动启动 VNC:
# vncserver :1
方案一:SSH 隧道 + VNC/XRDP(最常用、最安全)
原理:利用 SSH 加密通道将本地的 VNC/RDP 流量转发到服务器,无需在路由器上开放端口。
适用场景:你有服务器的 SSH 登录权限(通过跳板机、X_X工具或局域网),且希望最高安全性。
操作步骤:
-
在本地电脑(客户端)执行 SSH 隧道命令:
# 格式:ssh -L [本地端口]:[服务器IP]:[服务器VNC端口] [用户@服务器IP] # 假设服务器内网 IP 为 192.168.1.50,VNC 端口通常为 5901 (对应 :1) ssh -L 5901:localhost:5901 user@192.168.1.50保持该终端窗口开启,不要关闭。
-
连接 VNC 客户端:
- 打开任何 VNC 查看器(如 RealVNC, TightVNC, Remmina)。
- 地址填写
localhost:5901。 - 输入 VNC 密码即可看到桌面。
优点:无需配置路由器端口映射,完全通过 SSH 加密,极其安全。
缺点:需要保持 SSH 连接在线;如果 SSH 断开,VNC 也会断开。
方案二:X_X工具(适合无公网 IP 且需长期访问)
如果你需要在不同地点(如家里和公司)都能访问,且无法控制路由器,可以使用第三方X_X工具。这些工具会在你和本地服务器之间建立一条虚拟公网通道。
推荐工具:Tailscale / ZeroTier / Frp
这里以 Tailscale 为例(配置最简单,基于 X_X 协议):
-
在服务器端安装 Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up按提示登录 Tailscale 账号,获取分配的内网 IP(例如
100.x.y.z)。 -
在本地客户端安装 Tailscale:
同样安装并登录同一账号。此时,你的本地电脑会获得一个与服务器相同的虚拟局域网 IP。 -
连接桌面:
- 直接使用 Tailscale 分配的 IP 进行 SSH 隧道(参考方案一),或者直接通过 RDP/VNC 客户端连接该 IP。
- 如果使用了 XRDP,可以直接在 Windows 远程桌面中填入 Tailscale IP。
优点:配置简单,自动组网,跨地域访问,安全性高。
缺点:依赖第三方服务节点速度(通常很快)。
方案三:反向X_X/FRP(适合高级用户或自建穿透)
如果你有另一台拥有公网 IP 的 VPS,可以搭建 FRP(Fast Reverse Proxy)作为中转。
- 服务端 (VPS):运行
frps.ini配置。 - 客户端 (Ubuntu 服务器):运行
frpc.ini,将本地的 3389 (RDP) 或 5901 (VNC) 端口映射到 VPS 的某个端口。 - 访问:从本地连接
VPS_IP:映射端口。
优点:完全自主可控,不依赖第三方 SaaS 服务。
缺点:需要有一台带公网 IP 的服务器作为中转,配置相对复杂。
方案四:家庭宽带公网 IPv6(如果运营商支持)
许多现代家庭宽带虽然没 IPv4 公网 IP,但分配了 IPv6 地址。
- 确认服务器有 IPv6 地址:
ip addr show | grep inet6 - 配置防火墙允许 IPv6 入站:
sudo ufw allow from ::/0 to any port 3389 proto tcp # 针对 XRDP sudo ufw allow from ::/0 to any port 5901 proto tcp # 针对 VNC - 访问:在客户端浏览器或远程桌面软件中输入
[IPv6地址]:端口。
注意:部分旧版远程桌面软件对 IPv6 支持不佳,可能需要配合 DNS 解析。
总结与建议
| 方案 | 安全性 | 易用性 | 稳定性 | 推荐指数 |
|---|---|---|---|---|
| SSH 隧道 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 首选 (仅限临时或局域网) |
| Tailscale | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 强烈推荐 (跨网络访问) |
| IPv6 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | 条件允许时可用 |
| FRP | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | 适合有公网 VPS 的用户 |
| 端口映射 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 不推荐 (暴露在公网风险大) |
最佳实践建议:
- 优先安装 XRDP(比 VNC 更流畅,支持剪贴板等更好)。
- 部署 Tailscale 解决“无公网 IP"的寻址问题。
- 结合 SSH 隧道 或直接通过 Tailscale IP 连接 XRDP 端口。
- 务必设置强密码,并在
/etc/xrdp/xrdp.ini中禁用低安全性加密算法。
如果你需要具体的某一种方案的详细配置文件示例(如 frpc.ini 或 xrdp.ini),请告诉我你选择的方案。
PHPWP博客