一句話結論
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 的開源替代方案」。這個定位不是行銷詞,因為它從架構上就設計成可自架。
運作原理:兩個執行檔、兩種連線路徑
自架版其實只有兩個服務,搞懂這兩個角色,後面全部就通了。
| 執行檔 | 角色 | 監聽的埠 |
|---|---|---|
hbbs | RustDesk ID(rendezvous/signaling)伺服器,負責註冊裝置 ID、協調雙方連線 | TCP 21115、21116、21118(WebSocket);UDP 21116 |
hbbr | RustDesk 中繼(relay)伺服器,負責在打洞失敗時轉發流量 | TCP 21117、21119(WebSocket) |
整個連線流程是這樣走的:
| 步驟 | 發生什麼事 |
|---|---|
| 1 | 只要 RustDesk 開著,該機器就會不斷向 hbbs 回報自己的目前 IP 與埠(心跳) |
| 2 | 你在 A 電腦發起連線到 B 電腦,A 先問 hbbs:「B 在哪?」 |
| 3 | hbbs 嘗試讓 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 最常出錯的地方。以下表格請直接照抄:
| 埠 | 協定 | 用途 | 是否必要 |
|---|---|---|---|
21115 | TCP | NAT 類型測試 | 必要(最低需求之一) |
21116 | TCP + UDP | UDP 負責裝置註冊與心跳;TCP 負責打洞與連線 | 必要,TCP 與 UDP 都要開 |
21117 | TCP | 中繼(Relay)轉發 | 必要 |
21118 | TCP | WebSocket(供網頁客戶端使用) | 選用 |
21119 | TCP | WebSocket(供網頁客戶端使用) | 選用 |
21114 | TCP | HTTP 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 | 必填 |
| Key | id_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(付費) |
|---|---|---|
| 費用 | $0 | Individual $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 環境的臨時支援 |
兩個常被忽略的點:
- RustDesk 可以跟 VPN 混搭。你不需要把 RustDesk 伺服器直接暴露在公網——先用 Tailscale 這類 mesh VPN 把機器串成同一個虛擬內網,再讓 RustDesk 只走內網位址,安全性更好。若你不想開防火牆埠,也可以搭配 Cloudflare Tunnel 把 ID Server 用域名安全地對外。
- 它跟媒體伺服器、密碼管理器是同一類自架需求。Jellyfin 把影片留在家裡,Vaultwarden 把密碼留在家裡,RustDesk 則是把「遠端連線」這條路留在家裡——同一套 Docker + 反向代理 + HTTPS 的技能可以直接複用。
什麼時候不該用自架 RustDesk?
- 只想臨時連一次別人的電腦:裝官方版或直接用 Chrome 遠端桌面更快,自架要花的設定時間不划算。
- 公司有嚴格資安規範與合規稽核需求:這時你需要的其實是 RustDesk Server Pro(有稽核記錄、2FA、OIDC/LDAP),或直接採購商業方案。
- 完全不想維運任何伺服器:自架代表你要自己顧憑證、備份、升級與監控——建議至少搭配 Uptime Kuma 之類的監控,不然伺服器掛了你會是最後一個知道的人。
反過來說,只要你符合「有自己的機器可以放伺服器 + 在意資料不要經過第三方 + 不想被免費版規則綁住」這三件事,RustDesk 自架版的性價比在開源圈裡幾乎沒有對手。
五分鐘檢查清單
| # | 檢查項目 | 指令/位置 |
|---|---|---|
| 1 | Docker 裝好了 | docker --version |
| 2 | hbbs 與 hbbr 都起來了 | docker compose ps |
| 3 | 埠有開(TCP 21115-21117、UDP 21116) | ufw status |
| 4 | 取得伺服器公鑰 | cat ./data/id_ed25519.pub |
| 5 | 用戶端兩邊都填了 ID Server + Key | Settings → Network |
| 6 | 內網若連不上先查 NAT Loopback | 見上文陷阱 1 |
| 7 | 沒用網頁客戶端就關掉 21118/21119 | 見上文陷阱 3 |
延伸閱讀
- Cloudflare Tunnel 完整教學 2026:不開防火牆 port 也能把自架服務搬上網
- Tailscale 完整教學 2026:用 WireGuard 把家中與雲端主機串成一個虛擬內網
- Docker 完整教學 2026:從安裝、Dockerfile、Compose 多階段構建到安全部署
- Vaultwarden 完整教學 2026:自架 Bitwarden 相容密碼管理器
- Uptime Kuma 完整教學 2026:自架服務監控與到處通知
原始來源
- RustDesk GitHub 專案(rustdesk/rustdesk)
- RustDesk Server GitHub 專案(rustdesk/rustdesk-server)
- RustDesk 官方文件:Self-host 總覽(hbbs/hbbr 與連接埠)
- RustDesk 官方文件:Installation(Docker/script/deb 三種安裝方式)
- RustDesk 官方文件:Docker(Docker Compose 與 Podman Quadlet 範例)
- RustDesk 官方文件:Client Configuration(ID Server/Key/匯出匯入/–config)
- RustDesk 官方文件:NAT Loopback issues
- RustDesk 官方定價頁(OSS 免費與 Pro 各方案)
- techahold/rustdeskinstall:systemd 安裝腳本
