文章

自建远程连接服务器,画质流畅度质的飞跃!

自建远程连接服务器,画质流畅度质的飞跃!

引言

RustDesk 是一款开源的远程连接软件,相较于常见的 TeamViewer、Todesk 和向日葵,它不仅免费且画质更优,尤其适合那些拥有闲置服务器的用户。通过自建服务端,您可以享受更流畅的远程连接体验,且无需担心高峰期卡顿或付费问题。

本文将指导您如何使用 GitHub Actions 编译 RustDesk,使其硬编码到您的服务器,方便为他人提供远程协助。

部署服务端

使用docker-compose进行部署比较方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
services:
  hbbs:
    container_name: hbbs
    image: docker.ikuncn.top/rustdesk/rustdesk-server:latest
    command: hbbs -r masterke.cn:21117
    volumes:
      - ./docker-data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: docker.ikuncn.top/rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./docker-data:/root
    network_mode: host
    restart: unless-stopped
  rustdesk-api-server:
    container_name: rustdesk-api-server
    image: docker.ikuncn.top/kingmo888/rustdesk-api-server:latest
    environment:
      - ALLOW_REGISTRATION=True
    volumes:
      - ./docker-data/rustdesk-api-server:/rustdesk-api-server/db
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    network_mode: bridge
    ports:
      - "21114:21114"
    restart: unless-stopped

服务器开启21115-21117端口,如官网所述

image-20250722212933817

我们的API面板由rustdesk-api-server提供,将白嫖进行到底,因为官方的登录功能是要收费的,这个的端口是21114,可以用nginx反代一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
    listen 80;
    listen 443 ssl;
    server_name api.rustdesk.masterke.cn;

    # SSL 配置
    ssl_certificate /etc/nginx/auto-ssl/ssl/masterke.cn/masterke.cn.cer;  # 替换为你的证书路径
    ssl_certificate_key /etc/nginx/auto-ssl/ssl/masterke.cn/masterke.cn.key;  # 替换为你的私钥路径
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 配置日志
    access_log /var/log/nginx/jenkins_access.log;
    error_log /var/log/nginx/jenkins_error.log;

    # 反向代理设置
    location / {
        proxy_pass http://localhost:21114;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 保持连接
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
    }
}

然后输入docker logs hbbs即可查看到公钥字符串

QQ_1733845966673

自定义客户端

在1.3.6后面的版本,已禁止默认自定义服务器:原文地址

image-20250723162805388

2025年7月25更新

由于官方在1.3.7后的版本解除了对GitHub的secret直接定义服务器地址的支持,我本来还在那想着怎么怎么改代码,后来发现直接把官方的服务器地址和密钥硬编码到代码里再运行不就行了吗,还不要设置密钥了,方便许多。

首先还是先Fork主仓库到自己的账户里,还有Fork子模块的地址,然后改一下主仓库里面子模块的地址:

1
2
3
4
git submodule set-url libs/hbb_common https://github.com/你的用户名/hbb_common.git
git add .gitmodules
git commit -m "更新子模块远程地址"
git push origin main

改了子模块的地址后把代码拉下来:

1
git submodule update --init --recursive

然后修改下面的代码。

直接使用VSCode全文检索官方的值就行了

API服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
fn get_api_server_(api: String, custom: String) -> String {
    #[cfg(windows)]
    if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() {
        if !lic.api.is_empty() {
            return lic.api.clone();
        }
    }
    if !api.is_empty() {
        return api.to_owned();
    }
    let api = option_env!("API_SERVER").unwrap_or_default();
    if !api.is_empty() {
        return api.into();
    }
    let s0 = get_custom_rendezvous_server(custom);
    if !s0.is_empty() {
        let s = crate::increase_port(&s0, -2);
        if s == s0 {
            return format!("http://{}:{}", s, config::RENDEZVOUS_PORT - 2);
        } else {
            return format!("http://{}", s);
        }
    }
    "https://admin.rustdesk.com".to_owned() # 修改这里的地址为你的
}
SERVER和KEY
1
2
pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com"];
pub const RS_PUB_KEY: &str = "OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=";

修改完成后直接运行GitHubAction,选择master分支执行,等会就能看到上传好了,最后记得把仓库私有。

image-20250725011350728

在自己的服务器上编译(放弃)

安装rust和cargo
1
2
3
# 下载并安装 Rust 工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
下载RustDesk源码
1
2
3
git clone https://github.com/rustdesk/rustdesk.git
cd rustdesk
git submodule update --init --recursive

GitHubAction编译(1.3.7后失效)

复制仓库到您的 GitHub 账户
  1. 访问 RustDesk GitHub 仓库
  2. 点击“Fork”按钮,将仓库复制到您的账户。
内置自定义服务器地址

如果您需要更改默认服务器和公钥,请执行以下步骤:

在您的 Fork 仓库中,进入“Settings → Secrets and variables → Actions”。

添加:

1
2
3
4
5
6
7
8
9
10
11
# 服务器地址
RENDEZVOUS_SERVER
rustdesk.masterke.cn

# 公钥字符串
RS_PUB_KEY
AAAAAAAAAABBBBBBBBBB

# API服务器地址
API_SERVER
https://api.rustdesk.masterke.cn
自定义固定密码

修改源代码中libs/hbb_common/src/config.rs

473dbf6f247f1b4bb33a9056de0befad.png

为下面这个:

1
2
3
4
5
pub static ref HARD_SETTINGS: RwLock<HashMap<String, String>> = {
        let mut map = HashMap::new();
        map.insert("password".to_string(), "aa123456".to_string());
        RwLock::new(map)
};

请注意!!!!,上面代码中的的aa123456就是固定的连接密码,此处只是演示,需要改为你自己的密码,请不要用这么简单的密码。

修改完成后,点击Commit changes

启用工作流程
  1. 在您的 Fork 仓库中,进入“Settings → Actions → General”。
  2. 选择“Allow all actions and reusable workflows”。
  3. 进入“Actions”页面,选择“Flutter Nightly Build”。
  4. 点击“Enable workflow”并运行工作流。
启用工作流程的上传权限
  1. 在您的 Fork 仓库中,进入“Settings → Actions → General”。
  2. 向下滚动,在工作流权限下启用“Read and write permissions”。
下载构建的软件包
  1. 工作流程完成后,进入您的 Fork 仓库主页。
  2. 右键点击“Releases”,在“Nightly”下找到并下载构建的包。

使用

将下载的 EXE 可执行文件发送给需要远程协助的用户,打开后即可自动连接到您的服务器,省去了复杂的配置步骤。


参考资料: http://blog.kkk.rs/archives/37

本文由作者按照 CC BY 4.0 进行授权