RustDesk Server
Docker Compose
推荐Docker Compose安装:
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped开放防火墙端口
确保在防火墙中打开这些端口:
- hbbs:
- 21114 (TCP): 用于网页控制台,仅在 Pro 版本中可用。
- 21115 (TCP): 用于 NAT 类型测试。
- 21116 (TCP/UDP): 请注意 21116 应该同时为 TCP 和 UDP 启用。 21116/UDP 用于 ID 注册和心跳服务。21116/TCP 用于 TCP 打洞和连接服务。
- 21118 (TCP): 用于支持网页客户端。
- hbbr:
- 21117 (TCP): 用于中继服务。
- 21119 (TCP): 用于支持网页客户端。
如果不需要网页客户端支持,可以禁用相应的端口: 21118、21119
firewall-cmd开放端口的示例命令:
firewall-cmd --permanent --add-port=21114-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload
# firewall-cmd --permanent --remove-port=21114-21119/tcp
# firewall-cmd --permanent --remove-port=21116/udp
# firewall-cmd --reload如果安装了UFW,也可使用以下命令配置防火墙:
ufw allow 21114:21119/tcp
ufw allow 21116/udp
sudo ufw enable注意
- 21116端口同时为 TCP 和 UDP,这个要在防火墙上开放,不要漏掉UDP
- 如果RustDesk Server是部署在 OpenStack 等云平台上的虚拟机,请务必在平台的安全组中配置相应的防火墙策略,以开放上述所需端口。
理解各端口的作用
21114 (TCP): 用于网页控制台,仅在 Pro 版本中可用
Pro版本功能,略过
21115 (TCP): 用于 NAT 类型测试
RustDesk 客户端要想做到P2P直连,必须知道自己是否能被外网访问。如果两边都是对称 NAT,直连基本没戏,只能走中继 (hbbr)。所以连接前要测试 NAT 类型。
RustDesk 客户端在启动时,会尝试通过 hbbs 的 21115/TCP 端口:
探测公网可见 IP 和端口 客户端向 hbbs 发送请求,hbbs 看到的来源 IP/端口可能和客户端自己认为的不一样。这样能识别 NAT 是否改写了端口。
区分 NAT 类型
- 开放 / Full Cone NAT → 直连成功率很高。
- 受限锥形 (Restricted Cone NAT) → 大部分情况下能打洞成功。
- 端口受限 (Port-Restricted Cone NAT) → 打洞更难。
- 对称 NAT (Symmetric NAT) → 几乎无法 P2P,只能走中继 (21117)。
决定连接策略
- 如果 NAT 类型“友好”,RustDesk 就会优先尝试 P2P。
- 如果 NAT 类型“不友好”,RustDesk 会直接转向中继 (21117)。
21115 端口的作用就是让 hbbs 充当一个“探测点”,帮客户端确认自己处于哪种 NAT 类型,从而决定能否直连还是必须用中继。
21116/UDP 用于 ID 注册和心跳服务
ID 注册:
- 当客户端启动时,它会随机生成一个
ID。 - 客户端通过
21116/UDP把自己的信息(ID、公网 IP、端口、NAT 类型等)注册到hbbs(ID server)。 - hbbs 维护一个
ID → 节点地址表,用来让其他客户端能够找到当前的客户端。
心跳服务:
- 客户端会定期通过UDP包向 hbbs 发“心跳”。
- hbbs依靠心跳来:
- 确认客户端是否在线。
- 刷新客户端的公网地址和端口(因为NAT映射可能过期)。
- 保持NAT映射存活(UDP打洞需要映射一直有效)。
21116/TCP 用于 TCP 打洞和连接服务
- 当双方 NAT 情况允许时,执行TCP 打洞
- 如果 UDP 不可达,尝试建立 TCP 通道
- 在必要时,作为连接控制和数据传输的备用通道
21117/TCP:中继服务(Relay)
- 当客户端之间"无法直接 P2P 连接"(例如双方都在对称 NAT 或防火墙阻挡 UDP/TCP 打洞)时,RustDesk 会使用 中继服务器 (hbbr)转发流量。
21117/TCP就是中继服务监听的端口,负责:- 接收客户端发来的数据。
- 将数据转发给目标客户端。
可以理解为:当直连失败时,所有流量都会通过21117/TCP“绕道”
21118/TCP & 21119/TCP:支持网页客户端
- hbbs - 21118/TCP
- hbbr - 21119/TCP
RustDesk 除了桌面客户端外,还有网页端:
- 提供 HTTP/HTTPS 或 WebSocket 通道,让网页客户端能连接到 RustDesk 服务。
- 转发控制命令和远程桌面数据,类似桌面客户端的功能。
如果所使用的客户端的网络环境决定了不可能实现直连的话,即都需要中继服务(Relay)的话,这种情况下最少需要向外部暴露以下端口:
- 21116/UDP
- 21116/TCP
- 21117/TCP
客户端
Mac客户端
- 日志目录
~/Library/Logs/RustDesk - 配置目录
~/Library/Preferences/com.carriez.RustDesk
Windows客户端
- 日志目录
C:\Users\Administrator\AppData\Roaming\RustDesk\log - 配置目录
C:\Users\Administrator\AppData\Roaming\RustDesk\config
强制使用中继服务
- 方法1: 连接时输入
ID/r - 方法2: 连接历史列表里的Peer的选项菜单里有一个
Always connect via relay的复选框
其他问题
RustDesk客户端远程连接Windows服务器分辨率过低问题
Windows服务器在没有物理显示器插着的情况下,显卡驱动不会加载正常的EDID信息,所以只会给出几个很低的分辨率(800×600 / 1024×768)。RustDesk也就只能看到这些分辨率。
解决方法:
下载“虚拟显示器驱动” (Virtual Display Driver)
- Virtual-Display-Driver
- 它会给 Windows 增加一个“假显示器”,这样系统就能解锁 1080p、2K、4K 等分辨率。
安装方法
- 打开设备管理器 → 添加过时硬件 → 从磁盘安装 → 指定解压后的
.inf文件。 - 安装完成后,会在“显示适配器”或“监视器”下看到一个Virtual Display Driver。
- 打开设备管理器 → 添加过时硬件 → 从磁盘安装 → 指定解压后的
切换分辨率
- 右键桌面 → 显示设置 → 选择新加的虚拟显示器 → 设置所需分辨率。
- RustDesk 就能以这个分辨率连接。