无需依赖第三方服务,掌握完全控制的远程桌面体验

在现代工作和生活中,远程访问和控制计算机的需求日益增长。RustDesk作为一款开源的远程桌面软件,提供了自托管的解决方案,让您能够完全掌控自己的远程桌面服务。本文将指导您如何使用Docker部署RustDesk服务器。

为什么选择RustDesk?

RustDesk是一款用Rust编写的开源远程桌面软件,具有轻量级、高效、安全等特点。它支持Windows、Linux、macOS等多个操作系统,可以轻松实现跨平台远程桌面连接。

与TeamViewer、AnyDesk等商业解决方案不同,RustDesk允许您自建服务器,这意味着:

  • 数据完全私有化:所有远程连接数据都经过您自己的服务器,不会经过第三方
  • 无连接限制:不受商业软件的连接时间和设备数量限制
  • 定制化配置:根据您的网络环境优化连接参数
  • 成本节约:长期使用成本远低于商业软件授权费用

准备工作

在开始部署之前,您需要准备:

  1. 一台服务器:可以是云服务器(如AWS、Azure、腾讯云等)或本地服务器,建议至少1核CPU、2GB内存
  2. 安装Docker:确保系统已安装Docker和Docker Compose
  3. 域名(可选):如果您希望通过网页客户端访问,建议准备域名并配置SSL证书
  4. 防火墙配置:确保防火墙已开放必要的端口

安装Docker

如果您的系统尚未安装Docker,可以按照以下步骤安装:

# 更新包索引
sudo apt update

# 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新包列表并安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world

为了避免每次使用Docker都需要sudo权限,可以将当前用户添加到docker组:

sudo usermod -aG docker ${USER}
su - ${USER}

RustDesk服务器端口说明

RustDesk服务器由两个主要组件组成:hbbs(信令服务器)和hbbr(中继服务器)。每个组件都需要特定的端口才能正常工作:

组件 端口 协议 用途 是否必需
hbbs 21114/TCP TCP 网页控制台(仅Pro版本可用) 可选
hbbs 21115/TCP TCP NAT类型测试 必需
hbbs 21116/TCP TCP TCP打洞和连接服务 必需
hbbs 21116/UDP UDP ID注册和心跳服务 必需
hbbs 21118/TCP TCP 支持网页客户端 可选
hbbr 21117/TCP TCP 中继服务 必需
hbbr 21119/TCP TCP 支持网页客户端 可选

注意:如果您不需要网页客户端支持,可以禁用端口21118和21119。

使用Docker部署RustDesk服务器

方法一:直接使用Docker命令

最简单的部署方式是直接使用Docker命令运行RustDesk服务器:

# 创建数据目录
mkdir rustdesk-data
cd rustdesk-data

# 拉取RustDesk服务器镜像
sudo docker pull rustdesk/rustdesk-server

# 运行hbbs(信令服务器)
sudo docker run --name hbbs -v $(pwd):/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs

# 运行hbbr(中继服务器)
sudo docker run --name hbbr -v $(pwd):/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr

注意--net=host参数仅在Linux上有效,它使得hbbs/hbbr能够看到真实的传入IP地址而不是容器IP(172.17.0.1)。如果在Windows上运行,请省略sudo--net=host参数。

方法二:使用Docker Compose

为了更方便地管理容器,建议使用Docker Compose部署。创建一个docker-compose.yml文件:

version: '3'

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: "host"
    environment:
      - RELAY_SERVERS=your_hbbr_ip
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: "host"
    environment:
      - RELAY_SERVERS=your_hbbr_ip
    restart: unless-stopped

然后运行以下命令启动服务:

docker-compose up -d

如果需要配置特定环境变量,如设置ALWAYS_USE_RELAY=Y,可以在docker-compose.yml中的environment部分添加。

使用Podman和Quadlet部署

如果您更喜欢使用Podman而不是Docker,可以使用Quadlet来管理容器。Quadlet是集成到Podman 4.4+中的工具,旨在简化在systemd下运行容器的过程。

创建两个Quadlet配置文件:

hbbs.container:

[Unit]
Description=RustDesk hbbs container
After=network-online.target

[Container]
AutoUpdate=registry
Image=ghcr.io/rustdesk/rustdesk-server:latest
Exec=hbbs
Volume=/path/to/rustdesk-server/data:/root
Network=host

[Service]
Restart=always

[Install]
WantedBy=default.target

hbbr.container:

[Unit]
Description=RustDesk hbbr container
After=network-online.target

[Container]
AutoUpdate=registry
Image=ghcr.io/rustdesk/rustdesk-server:latest
Exec=hbbr
Volume=/path/to/rustdesk-server/data:/root
Network=host

[Service]
Restart=always

[Install]
WantedBy=default.target

将这两个文件放置在/etc/containers/systemd/目录下,然后运行:

# 重新加载systemd配置
systemctl daemon-reload

# 启动服务
systemctl start hbbs.service
systemctl start hbbr.service

# 设置开机自启
systemctl enable hbbs.service
systemctl enable hbbr.service

配置和优化

基本配置

RustDesk服务器启动后,会在数据目录中生成配置文件。您可以根据需要修改配置:

  • 修改密钥:hbbs运行时会在根目录生成id_ed25519.pubid_ed25519文件,这是服务器的密钥对。客户端需要使用公钥进行连接,以增强安全性。
  • 设置中继服务器:如果您的网络环境复杂,可能需要配置中继服务器以提高连接成功率。
  • 调整超时设置:根据网络条件调整连接超时参数。

网页客户端配置

如果您希望使用网页客户端,需要配置反向代理和SSL证书。以下是一个Nginx配置示例:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location / {
        proxy_pass http://127.0.0.1:21118;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

性能优化

  • 资源分配:为Docker容器分配足够的CPU和内存资源。您可以使用Docker Desktop的资源设置或Docker运行参数进行调整。
  • 日志管理:配置日志轮转,防止日志文件过大占用过多磁盘空间。
  • 定期清理:定期运行docker system prune清理无用的Docker资源。

客户端连接配置

服务器部署完成后,您需要在客户端配置中使用自己的服务器:

  1. 下载客户端:从RustDesk官网下载对应操作系统的客户端
  2. 配置服务器地址:在客户端设置中输入您的服务器IP或域名
  3. 设置密钥:在客户端中输入服务器生成的公钥(可选,但建议设置以提高安全性)
  4. 连接测试:尝试在不同网络环境下的设备间建立连接测试

故障排除

如果遇到连接问题,可以尝试以下步骤:

  1. 检查端口开放:使用telnetnc命令检查所需端口是否正常开放
  2. 查看日志:使用docker logs hbbsdocker logs hbbr查看容器日志,寻找错误信息
  3. 测试网络模式:如果使用--net=host参数遇到问题,尝试移除它并使用端口映射
  4. 检查防火墙:确保服务器防火墙和安全组规则允许相关端口的通信
  5. 验证密钥配置:确保客户端使用了正确的公钥

总结

通过本文的指导,您应该已经成功使用Docker部署了自己的RustDesk服务器。自建远程桌面服务器不仅提供了更高的数据安全性和控制权,还能根据您的特定需求进行定制化配置。

RustDesk的强大功能结合Docker的便捷部署,使得任何人都能轻松搭建专业的远程桌面基础设施。无论您是用于远程办公、技术支持还是设备管理,这个解决方案都能提供稳定可靠的服务。