摘要

本文记录了一次 RustDesk 自托管服务器 的完整部署实践,采用 Docker + host 网络模式,并结合 宿主机防火墙边界路由器端口转发,在家庭网络环境中实现了稳定可用的远程桌面服务。

出于安全考虑,本文 对所有本地路径、端口号与网络细节进行抽象处理,仅保留架构思路、配置原则与验证方法,确保内容可理解、可复现,但不暴露任何可被直接利用的信息。


一、整体架构思路

RustDesk 官方在 Docker 场景中推荐使用 host 网络模式运行服务,其核心特征包括:

  • 容器直接使用宿主机网络栈
  • 服务端口直接监听在宿主机
  • 不再使用 Docker 的端口映射机制
  • UDP 穿透与来源地址识别更加稳定

因此,网络安全边界主要由两部分构成:

  1. 宿主机防火墙(如 UFW / nftables)
  2. 上游路由器的端口转发与访问控制

二、Docker 服务的统一目录管理(路径脱敏)

所有 Docker 服务均集中放置在一个 统一的服务根目录 下,每个应用使用独立子目录管理自身配置与数据,例如:

/path/to/docker-services/
└── rustdesk/
    ├── compose.yml
    └── data/

这种结构的优点在于:

  • 服务之间完全隔离
  • 便于整体迁移与备份
  • 不暴露任何用户真实目录结构

三、Docker Compose 配置(原则级描述)

RustDesk 由两个核心组件组成:

  • ID / 协调服务
  • 中继服务

二者均以 Docker 容器形式运行,并共享数据目录。

配置原则如下:

  • 使用同一官方镜像
  • 使用 host 网络模式
  • 不配置任何端口映射
  • 设置容器自动重启

示意结构(非可直接复制配置):

services:
  id-service:
    image: official-image
    command: start-id-service
    volumes:
      - data-dir:/container-data
    network_mode: host
    restart: unless-stopped

  relay-service:
    image: official-image
    command: start-relay-service
    volumes:
      - data-dir:/container-data
    network_mode: host
    restart: unless-stopped

上述示例为结构示意,刻意省略所有具体参数与数值。


四、端口设计原则(不公开端口号)

RustDesk 服务需要若干 固定职责端口,但在公开文档中应避免直接暴露数值。

其功能层级可抽象为:

核心通信端口

  • NAT 类型探测
  • 客户端注册与心跳
  • TCP / UDP 打洞通信
  • 中继转发服务

可选功能端口

  • Web 客户端支持
  • Web 控制台(高级版本)

在实际部署中应遵循:

  • TCP 与 UDP 分别配置
  • 不同职责的端口独立管理
  • 不使用端口范围一次性放行

五、宿主机防火墙配置原则(以 UFW 为例)

在 host 网络模式下,防火墙规则只需关注 宿主机本身

通用原则:

  • 仅放行 RustDesk 所需的最小端口集合
  • TCP 与 UDP 明确区分
  • 禁止“全部放行”或宽泛规则
  • 所有规则应有清晰描述名称

防火墙配置完成后,应通过系统工具确认监听状态,而不是仅凭配置判断。


六、路由器端口转发配置原则(OpenWrt)

若 RustDesk 服务器位于内网,需要在边界路由器进行端口转发。

配置要点:

  • 每个端口单独一条转发规则
  • 不使用端口范围
  • 明确区分 TCP / UDP
  • 目标为单一内网主机
  • 规则名称清晰反映服务职责

示例命名方式(抽象):

  • rustdesk-id-nat-test
  • rustdesk-id-tcp
  • rustdesk-id-udp
  • rustdesk-relay

七、验证方法(避免“假通”)

部署完成后,必须进行 真实外网验证

  1. 在服务器上确认对应服务正在监听
  2. 使用非局域网环境进行客户端连接测试
  3. 验证直连与中继路径是否可正常建立

仅在外网验证成功后,部署才算完成。


八、常见问题与经验总结

  • host 网络模式下 不应使用 Docker 端口映射
  • UDP 通信是最容易遗漏、但最关键的部分
  • 防火墙与路由器规则缺一不可
  • 公网 IP ≠ 一定可入站(需警惕 CGNAT / MAP-E)
  • 博客公开内容应避免暴露可直接扫描的信息

结论

通过 Docker 的 host 网络模式运行 RustDesk,并配合最小化的防火墙放行与精确的路由器转发,可以在家庭网络环境中构建一个 稳定、可控、自托管的远程桌面服务

Leave a Reply

Your email address will not be published. Required fields are marked *