iT邦幫忙

0

開源遠端桌面存取軟體 RustDesk

  • 分享至 

  • xImage
  •  

RustDesk 是一款開源的遠端桌面存取軟體,特別為提供跨平台的遠端桌面支援而設計。適用於不同的作業系統以便用戶可以在不同的設備之間輕鬆地共享桌面,使其能夠輕鬆實現遠端協作和技術支援。

RustDesk 自許為 TeamViewer 的開源替代方案

特色

  • 適用於 Windows、macOS、Linux、iOS、Android 與 Web
  • 支援 VP8 / VP9 / AV1 軟體編解碼器和 H264 / H265 硬體編解碼器
  • 提供自行建立伺服器的解決方案,數據不外流。
  • 基於 NaCl 的端對端加密的 P2P 連線
  • Windows 無需管理權限或安裝,可依需求在本機或遠端提升權限。

您也可以選擇不同的付費方案,提供雙重認證 2FA 與解鎖更多功能。

不過是以年來計費

RustDesk Client

https://github.com/rustdesk/rustdesk/releases/download/1.2.3/rustdesk-1.2.3-x86_64.exe

只要兩台設備都下載 Client 就可以共享桌面了,因為 RustDesk 提供了幾個免費的中繼伺服器給我們使用。

支援的平台如下

  • Microsoft Windows
  • macOS
  • Debian Derivatives (Ubuntu ≥ 16, Linux Mint, etc.)
  • Red Hat Derivatives (CentOS, Fedora ≥ 18, Rocky Linux, etc.)
  • Arch Linux / Manjaro
  • openSUSE
  • NixOS
  • AppImage / Flatpak
  • Android
  • iOS (not support being controlled)
  • Web

執行 RustDesk Client 畫面如下

點擊右上方的設定

一般的部分建議勾選錄製,自動錄製連入的工作階段。

安全的部分可以自訂權限與密碼規則

也可以重新產生連線 ID 與進行 IP 白名單過濾,也可以偵測當使用者處於非活動狀態下自動關閉連線。

RustDesk 連線時會先採端對端的 P2P 連線,若失敗時才會改採中繼伺服器進行 Relay 傳送資料。

若您覺得 RustDesk 提供的中繼伺服器反應速度太慢,則可以考慮自架中繼伺服器,並將相關設定維護於此。

接著我們進行遠端桌面連線,提示輸入密碼(一次性或固定密碼)。

對方的畫面則會跳出存取請求

若直接點選接受,此時連線方則不需要輸入密碼即可登入。

同時使用兩種密碼

  • 一次性密碼:只要連線一結束 Client 密碼會自動變更,連線方就無法再登入了。
  • 固定密碼:永遠不變的密碼,建議自己留存使用。

可將連線過的紀錄加入我的最愛,下一次就不用再輸入 ID 了。

RustDesk Web Client
RustDesk 也有提供網頁版的應用程式,建議使用 Docker 安裝。

docker pull keyurbhole/flutter_web_desk:v1.0.0
docker run -d -p 5000:5000 --name webdesk keyurbhole/flutter_web_desk:v1.0.0

開啟瀏覽器並前往 localhost:5000,輸入遠端 ID 即可。

連線畫面如下

網頁版有支援觸控模式,平板的使用者可以參考看看。

RustDesk Server
如果您對 RustDesk 免費的中繼伺服器有資安上疑慮,則建議改採自架中繼伺服器的方式。

伺服器要求

  • 基礎雲端伺服器最低配置就夠了,對 CPU 和 RAM 的要求很低。
  • 中繼伺服器的流量在 30 K/s 到 3 M/s(1920x1080 螢幕)之間,取決於解析度設定和螢幕更新。
  • 如果只是辦公室需求,流量在 100 K/s 左右。

筆者使用 B1s 規格的 Azure VM 進行安裝,費用約每個月 330 台幣。

RustDesk Server 由以下兩個伺服器所構成

  • RustDesk ID / Rendezvous Server
  • RustDesk Relay Server

Client 與 Remote Computer 的 RustDesk 透過 Rendezvous Protocol 與 Rendezvous Server 進行註冊,當 RustDesk 連線時會先採端對端的 P2P 連線。

若 P2P 連線失敗時才會改採中繼伺服器進行 Relay 傳送資料

Rendezvous Protocol 詳細的內容如下

RustDesk ID / Rendezvous Server 負責的功能與埠號

  • 21115 / TCP:NAT 類型測試
  • 21116 / UDP:ID 註冊與心跳服務
  • 21116 / TCP:TCP 打洞與連接服務
  • 21118 / TCP:支援 RustDesk Web Client

RustDesk Relay Server 負責的功能與埠號

  • 21117 / TCP:Relay 服務
  • 21119 / TCP:支援 RustDesk Web Client

若不使用 RustDesk Web Client,可以停用 21118 與 21119 埠號。

設定 Azure VM 的網路安全性群組,允許上述埠號。

設定 Ubuntu 作業系統的防火牆,允許上述埠號。

sudo ufw allow 21115:21119/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 21116/udp
sudo ufw enable

使用 Binary 檔案架設
下載最新版本的 RustDesk Server

cd /opt
sudo wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.9/rustdesk-server-linux-amd64.zip

將其解壓縮與重新命名

sudo apt install unzip
sudo unzip rustdesk-server-linux-amd64.zip
sudo mv amd64 rustdesk

賦予執行權限

hbbr 代表 RustDesk ID / Rendezvous Server
hbbs 代表 RustDesk Relay Server

cd rustdesk
sudo chmod +x hbbr
sudo chmod +x hbbs

先執行 hbbs 使其產出憑證

./hbbs

憑證的位置如下

cat /opt/rustdesk/id_ed25519.pub
EHyIOeeL7keiLHfXnr5aPii11ZazkgGsW2r3Ihvh1ZI=

建立 hbbs 服務

sudo vi /etc/systemd/system/hbbs.service
[Unit]
Description=Rust Desk Service
After=network.target
 
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=/opt/rustdesk
# 參數 -k 是強制驗證客戶端公鑰,避免被未授權連線使用。
ExecStart=/opt/rustdesk/hbbs -r 0.0.0.0 -k _

[Install]
WantedBy=multi-user.target

啟動 hbbs 服務

sudo systemctl daemon-reload 
sudo systemctl enable hbbs.service
sudo service hbbs start

建立 hbbr 服務

sudo vi /etc/systemd/system/hbbr.service
[Unit]
Description=Rust Desk Service
After=network.target
 
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=/opt/rustdesk
# 參數 -k 是強制驗證客戶端公鑰,避免被未授權連線使用。
ExecStart=/opt/rustdesk/hbbr -k _
 
[Install]
WantedBy=multi-user.target

啟動 hbbr 服務

sudo systemctl daemon-reload 
sudo systemctl enable hbbr.service
sudo service hbbr start

使用 Docker 架設
建立 rustdesk 資料夾,沒用過 Docker 的朋友可以參考這篇文章

mkdir rustdesk
cd rustdesk

撰寫 docker-compose.yml,參數 -k 是強制驗證客戶端公鑰,避免被未授權連線使用。

version: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r your_server_ip_or_fqdn:21117 -k _
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr -k _
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    restart: unless-stopped

運行 RustDesk Server

sudo docker compose up -d
[+] Running 3/3
 ✔ Network azureadmin_rustdesk-net  Created             0.1s
 ✔ Container hbbr                   Started             0.1s
 ✔ Container hbbs                   Started             0.1s 

憑證的位置如下

cat rustdesk/data/id_ed25519.pub
EHyIOeeL7keiLHfXnr5aPii11ZazkgGsW2r3Ihvh1ZI=

填寫 RustDesk Client 的網路設定

就可以使用自架中繼伺服器進行連線了

假設您的伺服器名稱被別人知道了,但是對方不知道 Key。

由於有強制驗證客戶端公鑰,就不怕我們的中繼伺服器被別人拿來濫用了。

今天的分享就到這邊,感謝收看。

參考文件

  1. https://rustdesk.com/
  2. https://wiki.freedomstu.com/books/%E9%96%8B%E6%BA%90%E8%BB%9F%E9%AB%94%E5%AE%89%E8%A3%9D%E6%B5%81%E7%A8%8B/page/rustdesk
  3. https://hackmd.io/@ziyu0304/rJqyqbsIo
  4. https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F
  5. https://ivonblog.com/posts/setup-rustdesk
  6. https://hub.docker.com/r/keyurbhole/flutter_web_desk

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言