RustDesk 完整教學 2026:12.5 萬星開源遠端桌面,自架 hbbs/hbbr 取代 TeamViewer(Docker Compose 部署、用戶端金鑰設定、中繼伺服器、NAT Loopback 陷阱一次學會)

RustDesk 是 12.5 萬顆星的開源遠端桌面軟體,用 Rust 寫成、AGPL-3.0 授權,可完全自架 ID 與中繼伺服器,不再受限於商用判定與連線數。本文從「為什麼要自架」講起,完整涵蓋 hbbs/hbbr 運作原理、必要連接埠、Docker Compose 與 Podman Quadlet 部署、用戶端 ID Server 與金鑰設定、免費 OSS 與 Pro 版差異對照,以及 NAT Loopback、WebSocket X-Real-IP 偽造等實務陷阱。

  • Dennis
  • 10 分鐘閱讀
RustDesk 完整教學 2026:12.5 萬星開源遠端桌面,自架 hbbs/hbbr 取代 TeamViewer(Docker Compose 部署、用戶端金鑰設定、中繼伺服器、NAT Loopback 陷阱一次學會)

一句話結論

RustDesk 是一套用 Rust 寫成、AGPL-3.0 授權、12.5 萬顆星的開源遠端桌面軟體,最大特色是你可以把負責「配對」與「轉發」的 ID/中繼伺服器(hbbs、hbbr)整套架在自己的機器上——用 Docker Compose 兩行指令就能跑起來,之後連線數、商用判定、資料落地都由你決定,不必再看第三方免費版的臉色。


為什麼要自己架遠端桌面伺服器?

遠端桌面在日常生活裡是「平常用不到,要用時很急」的工具:幫長輩修電腦、從公司連回家裡的桌機、出差時連回工作室主機。免費版的痛點也很固定:

  • 免費版被判定為商業用途而中斷,要你付費才能繼續連線。
  • 連線數與同時上線裝置有上限,超過就得升級方案。
  • 畫面與檔案傳輸都經過第三方伺服器,什麼東西被記錄、被留存你並不知道。
  • 方案一漲價就得被迫接受,因為 ID 與中繼伺服器都在對方手上,你沒有議價空間。

自架 RustDesk 之後,這四件事全部回到自己手上:ID 配對是自己架的、連線內容走自己的中繼(或直接點對點打洞)、資料留在自己的機器裡。


RustDesk 現況(2026 年 10 月)

項目數據
GitHub Stars約 125,350
Forks約 19,503
授權AGPL-3.0
主要語言Rust(桌面/行動端 GUI 為 Flutter)
建立時間2020 年 9 月
最新版本1.5.0(2026-09-30 發布)
支援平台Windows、macOS、Linux、Android、iOS,另有網頁客戶端
伺服器專案rustdesk/rustdesk-server(約 1.05 萬星,同樣 AGPL-3.0)
官方網站rustdesk.com

它的官方定位寫得很直白:「TeamViewer 的開源替代方案」。這個定位不是行銷詞,因為它從架構上就設計成可自架。


運作原理:兩個執行檔、兩種連線路徑

自架版其實只有兩個服務,搞懂這兩個角色,後面全部就通了。

執行檔角色監聽的埠
hbbsRustDesk ID(rendezvous/signaling)伺服器,負責註冊裝置 ID、協調雙方連線TCP 21115、21116、21118(WebSocket);UDP 21116
hbbrRustDesk 中繼(relay)伺服器,負責在打洞失敗時轉發流量TCP 21117、21119(WebSocket)

整個連線流程是這樣走的:

步驟發生什麼事
1只要 RustDesk 開著,該機器就會不斷向 hbbs 回報自己的目前 IP 與埠(心跳)
2你在 A 電腦發起連線到 B 電腦,A 先問 hbbs:「B 在哪?」
3hbbs 嘗試讓 A 與 B 直接互相連線(TCP/UDP hole punching 打洞)
4打洞成功 → 兩台直接通,中繼伺服器完全不會用到
5打洞失敗(例如雙方都在嚴格對稱式 NAT 後面)→ 走 hbbr 中繼轉發

多數情況下打洞會成功,中繼伺服器根本不會被用到——這也是為什麼自架 RustDesk 的伺服器規格需求極低。

中華電信/家用網路常見的「打洞失敗」情境

打洞失敗的常見原因是對稱式 NAT(電信業者的 CGNAT、某些企業防火牆)。這時會落到中繼路徑,流量成本就變成你要注意的重點:

使用情境中繼流量概估
一般辦公、文書、看程式碼約 100 KB/s
1920×1080 高更新率、看影片30 KB/s ~ 3 MB/s(依解析度設定與畫面更新幅度)

也就是說,如果只是「幫長輩看電腦」這種用量,一台最便宜的雲端主機、甚至樹莓派都綽綽有餘;但如果你打算拿來遠端操作 4K 剪輯機台,就要留意中繼流量費用。


需要開哪些連接埠

這是自架 RustDesk 最常出錯的地方。以下表格請直接照抄:

埠協定用途是否必要
21115TCPNAT 類型測試必要(最低需求之一)
21116TCP + UDPUDP 負責裝置註冊與心跳;TCP 負責打洞與連線必要,TCP 與 UDP 都要開
21117TCP中繼(Relay)轉發必要
21118TCPWebSocket(供網頁客戶端使用)選用
21119TCPWebSocket(供網頁客戶端使用)選用
21114TCPHTTP API 伺服器僅 Pro 版(且設定 HTTPS 443 後可不對外開放)

記法:21115–21117 是「最小可用組合」;21118/21119 只有你要用網頁客戶端才需要開;21114 是 Pro 專用。

UFW 的設定就是三行:

ufw allow 21114:21119/tcp
ufw allow 21116/udp
sudo ufw enable

安裝方式:三種路線怎麼選

方式適合誰為什麼選它
Docker / Docker Compose(官方推薦)絕大多數自架部署升級、回滾、搬到另一台機器都最單純
install script(Techahold 維護)想快速拿到 systemd 服務的 Linux 管理員自動裝好 hbbs、hbbr,還會生一頁密碼保護的用戶端設定頁
Debian 套件(.deb)慣用 apt 的 Debian 系系統貼近原生套件管理

「一台主機多個服務」的環境建議直接走 Docker,理由很單純:network_mode: "host" 是 Linux 上最不容易出事的設定,而 Compose 讓你把整組設定存成一個檔案,換機器只要複製 compose.yml 加資料目錄。


Docker Compose 實戰(推薦路線)

步驟 1:裝 Docker 並下載官方 compose 檔

bash <(wget -qO- https://get.docker.com)
wget rustdesk.com/oss.yml -O compose.yml
sudo docker compose up -d

步驟 2:或自己寫一份可控的 compose.yml

想自己掌握每個參數(例如強制走中繼)就用手寫版本:

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    environment:
      - ALWAYS_USE_RELAY=Y      # 想強制走中繼才加,預設可省略
    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
sudo docker compose up -d
docker logs hbbs        # 用 -td 看不到 log 時改這樣看

步驟 3:不想用 Docker 的快速路線

sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr

Podman 使用者的 systemd 路線(Quadlet,存成 ~/.config/containers/systemd/hbbs.container):

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

[Service]
Restart=always

[Install]
WantedBy=default.target

步驟 4:取得伺服器公鑰

第一次啟動 hbbs 時會自動產生金鑰組,公鑰就放在資料目錄裡:

cat ./data/id_ed25519.pub

這串就是用戶端要填的 Key。 請注意它是連線加密用的公開金鑰,跟 Pro 版的授權金鑰是兩個完全不同的東西,別搞混。


用戶端設定:只有兩個欄位要填

打開 RustDesk 客戶端 → 點 ID 旁邊的選單 [ ⋮ ] → Network(需要提權解鎖設定)→ 填入:

欄位填什麼是否必填
ID Server你的 hbbs 主機或 IP,例如 hbbs.example.com 或 hbbs.example.com:21116必填
Keyid_ed25519.pub 的內容必填(加密連線用)
Relay Server留空即可,RustDesk 會自動推導(指向 hbbr 的 21117)選填
API Server僅 Pro 版帳號登入與網頁控制台需要Pro 才填

設定好之後,兩端(本機側與遠端側)都要填 ID Server,這是最常見的「只填一邊所以連不上」錯誤。

大量部署的兩個省事技巧

技巧做法
匯出/匯入設定在已設定好的機器 → Settings → Network → Export Server Config,把字串貼到新機器的 Import Server Config → Apply
命令列套用rustdesk.exe --config <config-string>,適合寫進 RMM/Intune/腳本自動化

免費 OSS 版 vs Pro 版:什麼時候該付錢

項目Server OSS(免費)Server Pro(付費)
費用$0Individual $11.88/月(年繳);Basic $23.88/月;Customized $23.88/月起,每位額外使用者 $1.20、每台額外裝置 $0.12
核心元件hbbs + hbbr同上 + Web 控制台
網頁控制台✗✓
API / OIDC / LDAP / 2FA✗✓
裝置管理 / 存取控制 / 稽核記錄✗✓
品牌化自訂客戶端(自訂名稱、Logo、簽章)✗✓(Basic 或 Custom 方案,支援 Windows x64、macOS Arm64/x64、Linux、Android Arm64)
多中繼管理、通訊錄、SMTP✗✓
付款方式—只有年繳,不自動續訂,到期前 14 天寄信提醒

判斷原則很簡單:個人或小團隊(自己、家人、幾台自己的機器)→ OSS 免費版完全夠用;需要集中管理幾十台裝置、要有帳號權限分級與稽核記錄的 IT 部門 → Pro 版才值得付。

另外 Customized V2 方案是給「裝置數很多但同時上線數有限」的場景用的:多了限制同時連線數的計價方式(每條額外同時連線 $24),超額的受管裝置不會被停用。


五個實務陷阱(這幾點沒處理會卡很久)

1. NAT Loopback/Hairpin NAT:外部連得進來、內網反而連不上

如果你把伺服器架在家用路由器後面的 NAT 環境,會遇到一個很違反直覺的狀況:從外網連線完全正常,但同一個區域網路的裝置用「公網 IP 或網域」卻連不上。

原因是路由器分不清「內網裝置想繞出去再繞回來」的封包與「外網偽造來源」的封包,於是把它擋掉。三種解法:

解法適用情境代價
在路由器開啟 NAT Loopback(Hairpin NAT)路由器支援這個設定最佳長期解,但不是每台路由器都開放
區域網路內改用本地 DNS 把網域指向內網 IP同網段有多台裝置要管理比逐台改 hosts 更好維護
改 hosts 檔只有少數幾台裝置要修手動、筆電帶出門就會忘記

另外官方文件也明講:架在 NAT 後面的環境,伺服器與用戶端必須「用本地 IP 互相存取」或「防火牆支援並啟用 NAT Loopback」二選一。

2. --net=host 只對 Linux 有效

--net=host 讓 hbbs/hbbr 看到真實的來源 IP(而不是 Docker 的 172.17.0.1),但這個參數只在 Linux 上有效。在 Windows 上請把 sudo 與 --net=host 都拿掉。若在你的平台上遇到連線問題,官方建議先移除 --net=host 試試。

3. WebSocket 埠(21118/21119)開了就要小心 IP 偽造

這是官方文件裡明確標示的安全警告:當你開放 WebSocket 埠給網頁客戶端使用時,hbbs/hbbr 會信任連線帶進來的 X-Real-IP/X-Forwarded-For 標頭來判斷真實用戶端 IP。這些標頭沒有被驗證,因此任何能直接連到 21118/21119 的人,都可以用偽造標頭宣稱自己是任意 IP,繞過以 IP 為基礎的限速與封鎖,並竄改日誌裡記錄的來源 IP。

正確做法:

  • 有用網頁客戶端 → 只透過會自己設定 X-Real-IP 的反向代理(如 Nginx)對外暴露 WebSocket 埠,並用防火牆限制只有該代理能連 21118/21119。
  • 沒用網頁客戶端 → 這兩個埠直接保持關閉。

4. 21116 的 TCP 與 UDP 要一起開

只開 TCP 或只開 UDP 是最常見的「裝好了但裝置註冊不上」原因。UDP 負責註冊與心跳,TCP 負責打洞與連線,兩個都要。

5. Key 是公鑰,不是授權金鑰

用戶端 Network 設定裡的 Key,指的是 id_ed25519.pub 那串連線加密公鑰。它跟 Pro 版購買後拿到的 license key 是完全不同的東西,填錯會出現「Pro 版能登入網頁控制台但用戶端登不進去」的症狀——那個症狀通常是 API Server 沒設對,而不是 Key 錯。


跟其他遠端桌面方案怎麼比

方案自架授權免費版限制適合誰
RustDesk(自架)✅ 完全自架 ID + 中繼AGPL-3.0無(自己就是服務提供者)想要資料自持、不想被商用判定中斷的人
RustDesk(官方伺服器)❌AGPL-3.0依官方政策只想快速試用、不想維運
TeamViewer❌專有有商用偵測、連線數與時間限制企業採購、需要完整支援合約
AnyDesk❌專有免費版功能受限單人臨時連線
Chrome 遠端桌面❌專有免費,但功能陽春、依賴 Google 帳號偶爾救火、跨平台最基本需求
Windows 快速助手❌專有免費,僅 Windows 對 Windows純 Windows 環境的臨時支援

兩個常被忽略的點:

  1. RustDesk 可以跟 VPN 混搭。你不需要把 RustDesk 伺服器直接暴露在公網——先用 Tailscale 這類 mesh VPN 把機器串成同一個虛擬內網,再讓 RustDesk 只走內網位址,安全性更好。若你不想開防火牆埠,也可以搭配 Cloudflare Tunnel 把 ID Server 用域名安全地對外。
  2. 它跟媒體伺服器、密碼管理器是同一類自架需求。Jellyfin 把影片留在家裡,Vaultwarden 把密碼留在家裡,RustDesk 則是把「遠端連線」這條路留在家裡——同一套 Docker + 反向代理 + HTTPS 的技能可以直接複用。

什麼時候不該用自架 RustDesk?

  • 只想臨時連一次別人的電腦:裝官方版或直接用 Chrome 遠端桌面更快,自架要花的設定時間不划算。
  • 公司有嚴格資安規範與合規稽核需求:這時你需要的其實是 RustDesk Server Pro(有稽核記錄、2FA、OIDC/LDAP),或直接採購商業方案。
  • 完全不想維運任何伺服器:自架代表你要自己顧憑證、備份、升級與監控——建議至少搭配 Uptime Kuma 之類的監控,不然伺服器掛了你會是最後一個知道的人。

反過來說,只要你符合「有自己的機器可以放伺服器 + 在意資料不要經過第三方 + 不想被免費版規則綁住」這三件事,RustDesk 自架版的性價比在開源圈裡幾乎沒有對手。


五分鐘檢查清單

#檢查項目指令/位置
1Docker 裝好了docker --version
2hbbs 與 hbbr 都起來了docker compose ps
3埠有開(TCP 21115-21117、UDP 21116)ufw status
4取得伺服器公鑰cat ./data/id_ed25519.pub
5用戶端兩邊都填了 ID Server + KeySettings → Network
6內網若連不上先查 NAT Loopback見上文陷阱 1
7沒用網頁客戶端就關掉 21118/21119見上文陷阱 3

延伸閱讀

原始來源

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。

訂閱即表示同意收到 most.tw 電子報,隨時可一鍵退訂。

💬 有問題想討論?加 LINE 聯絡我

歡迎透過 LINE 官方帳號直接留言,我會盡快回覆你的問題。

加入 LINE 好友