CrossDesk 開源遠端桌面:自架前先看清的三種信任邊界

4,243 星全端開源遠端桌面:用戶端、伺服器、RTC 引擎、網頁版全部公開,自架收進單一 Docker 容器。但自架預設路徑要你把自簽根憑證裝進系統信任庫,三種連線模式的信任邊界與替代作法一次拆解。

用 AI 摘要這篇文章:

CrossDesk 是一套開源的跨平台遠端桌面軟體,Windows、macOS、Linux 三平台都有安裝包,輸入設備 ID 就能發起遠端連線,另外提供瀏覽器網頁版,手機開 Safari 也能控制電腦。它最不一樣的地方在於開源開得很徹底:桌面用戶端、自架伺服器、底層即時傳輸引擎、網頁版用戶端,四個部分全部是公開倉庫、全部可以自己編譯。主倉庫目前有 4,243 顆星、404 個 fork,最近一次提交在 2026 年 8 月 16 日,過去一個月發了四個版號,是一個還在高速移動的專案。

CrossDesk 官網首頁:開源跨平台遠端桌面軟體的下載區與線上裝置計數Pin
CrossDesk 官網首頁(crossdesk.cn),即時顯示線上裝置與遠端連線計數,下載區標示最新版本 v1.4.2-20260803

先講結論。如果你只是個人要連自己的兩三台機器,抓官方安裝包用預設模式就能動;如果你打算管公司或機敏環境的機器,這套軟體支援自架,而且自架只需要一個 Docker 容器,部署門檻比多數同類專案低;但自架的預設路徑會要你把一張自簽的根憑證裝進整台電腦的系統信任庫,這一步的風險官方文件自己都承認無法保障,後面會給繞過它的部署路線。這篇是文件面的導讀,畫面延遲這類體感問題,留給你裝完自己判斷。

三種連線方式,其實是三種你要信任的東西

遠端桌面軟體的本質,是把你的鍵盤、滑鼠、螢幕內容和剪貼簿交出去。這類軟體都有一個信令伺服器,角色像電話總機:兩台機器先透過它互相報到、交換連線資訊,之後的畫面流量在理想情況下兩點直送,不經過總機。所以挑這類軟體時,真正該問的問題只有一個:這些資料經過誰的手上。CrossDesk 的官方文件把這件事攤得比多數同類清楚,剛好可以拆成三種連線模式來看。

連線模式資料路徑你要信任的對象
P2P 直連兩台機器互相連線,畫面走加密通道只信任對方機器與軟體本身
官方預設伺服器打洞失敗時畫面經官方中繼轉發官方的 api.crossdesk.cn 與它的營運者
自架伺服器打洞失敗時畫面經你自己的中繼轉發你自己(與你的憑證管理)

理想情況是 P2P 直連。CrossDesk 底層用一個叫 MiniRTC 的自研即時傳輸引擎,支援 RFC 5245 的 NAT 打洞,多數家用網路環境下兩台機器可以直連,畫面理論上不經過第三台機器。傳輸加密用 SRTP,視訊編碼宣稱支援 H.264 與 AV1,音訊用 Opus。這些規格寫在 README 上,規格本身可以先進(AV1 在同類工具裡少見),但規格不等於體感,issue 上已有使用者反映鍵鼠反應速度與同類工具還有差距,這點後面會展開。

打洞失敗時就靠備援。當兩台機器之間的網路環境不允許直連,流量會改走中繼伺服器轉發。用預設模式的話,這個中繼是官方的。隱私政策寫得明白:未啟用自架時,用戶端會連上預設的 api.crossdesk.cn,用於設備註冊、信令交換、NAT 穿透,並在無法直連時提供中繼。官方常見問題也老實說了另一件事:公共中繼伺服器的頻寬比較小,走中繼時清晰度與流暢度會下降,建議重度使用者自己架。這是一人專案誠實的地方,免費中繼只當備援用,重度使用官方建議自己架。順帶一提,如果你的機器全部都在同一個區網內,用途只是互傳檔案和看一眼對方螢幕,鄰雲這類區網限定的整合式工具也曾在這個位置被討論,只是它已標明停止維護,性質更接近原型。

自架則是這套軟體的主要賣點,下一節單獨講。

這裡有個隱私細節值得單獨拎出來:遠端連線期間,剪貼簿文字可能自動同步到對方機器。這在遠端桌面工具裡是常見設計,但如果你習慣在密碼管理器複製貼上,就要意識到切換視窗的瞬間,剪貼簿內容可能已經飛到另一台機器上。如果你要的只是單純的跨裝置剪貼簿同步,不需要整套遠端桌面,可以另外看看 UniClipboard 這類專做剪貼簿同步的開源工具,把用途拆開,攻擊面也跟著變小。

自架的部署現實:容器很簡單,憑證才是關卡

CrossDesk Server 的部署是真的簡單。官方推薦用 Docker,一條指令把信令伺服器、TURN 中繼、資料庫全部裝進同一個容器,映像叫 crossdesk/crossdesk-server,Docker Hub 上累積 17,790 次拉取,最新 tag 在 2026 年 8 月 14 日更新。你只需要給它對外 IP、內部 IP、幾個埠號,再把資料庫和憑證目錄掛出來持久化:

sudo docker run -d --name crossdesk_server --network host \
  -e EXTERNAL_IP=你的對外IP -e INTERNAL_IP=你的內網IP \
  -e CROSSDESK_SERVER_PORT=9099 \
  -e COTURN_PORT=3478 -e MIN_PORT=50000 -e MAX_PORT=60000 \
  -v /var/lib/crossdesk:/var/lib/crossdesk \
  -v /var/log/crossdesk:/var/log/crossdesk \
  crossdesk/crossdesk-server:v1.1.6

真正的關卡在憑證。容器第一次啟動時會自動產生一組自簽憑證放在 /var/lib/crossdesk/certs,README 接著教你在用戶端機器上,把 api.crossdesk.cn_root.crt 這張自簽根憑證裝進系統信任庫。Windows 要用系統管理員開 PowerShell 執行 certutil -addstore "Root",Linux 要複製進 /usr/local/share/ca-certificates 再跑 update-ca-certificates,macOS 要用 security add-trusted-cert 寫進系統鑰匙圈。

CrossDesk GitHub README 自架伺服器段落:Docker 部署指令與自簽根憑證安裝說明Pin
GitHub README 的自架伺服器段落,含 Docker 部署指令與自簽根憑證安裝指示(kunkundi/crossdesk)

這一步值得停下來想清楚再做。把一張根憑證放進系統信任庫,等於告訴整台作業系統:以後凡是這張憑證簽出來的任何連線,全部放行。它影響的不只是 CrossDesk 自己,而是這台機器上所有走 TLS 的軟體。這張根憑證的私鑰在你那台 Docker 主機上,主機一旦被入侵或金鑰外洩,持有它的人就能對你這台用戶端發動中間人攻擊,而且作業系統不會報警。README 自己也承認:預設自簽憑證無法保障安全性,建議改用向憑證供應商申請的正式憑證,放進同一個目錄再重啟服務。

所以正確的自架路線其實只有一條:網域指向你的伺服器,申請一張 Let’s Encrypt 或其他憑證供應商的正式憑證,放進 /var/lib/crossdesk/certs,用戶端填完伺服器位址後直接連線,完全不需要碰系統信任庫。自簽根憑證那套指令,只適合你很清楚自己在做什麼的封閉測試環境。

自架還有兩個小代價。一個是埠要開夠:TURN 的 UDP 與 TCP 埠、中繼埠範圍(例如 50000 到 60000 的 UDP)、信令伺服器的 TCP 埠,都要在防火牆放行,這在雲端主機上是一串要耐心設定的安全群組規則。README 還提醒一個部署坑:Docker 自動建立的資料目錄如果權限屬於 root,容器內的程序寫不進去,憑證會生成失敗、容器直接報錯退出;正確順序是先手動建好 /var/lib/crossdesk 與 /var/log/crossdesk,把擁有者改成容器內的使用者,再啟動容器。另一個是隱私政策揭露的細節:就算啟用了自架,用戶端啟動時的版本檢查仍然會連官方的 version.crossdesk.cn。它抓的是版本資訊,不是你的桌面內容,但如果你期待的目標是這台機器完全不對官方伺服器發任何請求,目前做不到,這點官方沒有藏,寫在隱私政策裡。

它做到的深度:鎖得住的 Windows 服務與網頁版控制

CrossDesk 有兩個能力做到了多數輕量遠端工具沒碰的深度。

先看 Windows 系統服務。它會註冊一個叫 CrossDeskService 的本地服務,專門處理鎖屏、登入畫面、安全桌面這些受保護場景:回報遠端目前停在什麼狀態、讓控制端可以送出 Ctrl+Alt+Del、在鎖屏與登入階段轉發鍵盤滑鼠輸入。這代表被控機重開機卡在登入畫面時,你遠端就能輸入密碼登入,不需要人在現場。設計上也收斂:服務按需啟動,用戶端沒在跑時自動退出,解除安裝用戶端會同步移除服務。如果遠端沒裝這個服務,基本連線仍可使用,只是鎖屏與登入階段的控制會受限。

不過 Windows 服務再深,也有一個到不了的地方:機器還沒進作業系統的階段。卡在 BIOS 設定、開機選單、或系統整個掛掉的黑畫面時,裝在系統裡的任何遠端軟體都使不上力,那一層要用 IP-KVM 這種硬體層方案才解得掉,兩者是互補關係。

再看網頁版用戶端。官方提供 web.crossdesk.cn,瀏覽器打開,輸入遠端 ID 與連線密碼就能連,官方 README 放的示範是 iOS Safari 控制 Windows 11。這對臨時救援的價值很實際:親友的電腦出問題,對方裝好用戶端後,你用自己的手機瀏覽器就能接手,不用先找一台裝了用戶端的電腦。網頁版本身也是獨立的開源倉庫,部署與審計的權利和桌面版一樣開放。

安裝包的取得有兩個來源:官網 crossdesk.cn 的下載區,最新版本顯示為 v1.4.2-20260803,與 GitHub Releases 一致,檔案放在 downloads.crossdesk.cn;GitHub Releases 上則有 Windows 安裝版與免安裝可攜版、macOS Intel 與 Apple Silicon 的 pkg、Linux amd64 與 arm64 的 deb。系統需求的細節要注意:Windows 要 10 以上 64 位元,macOS Apple Silicon 要 14.0 以上,macOS Intel 版反而要 15.0 以上(14 到 15 之間要自行編譯),Linux 以 Ubuntu 20.04 為相容基線。

一人專案的誠實清單:這些限制會直接改變你的決定

CrossDesk 的所有倉庫都由同一位開發者 kunkundi 提交,聯絡信箱是隱私政策上那個 hotmail 信箱,官網首頁即時顯示的線上裝置數在數百台量級(兩次載入分別是 641 與 684 台)。對照同為開源遠端桌面的 RustDesk 有 121,132 顆星,這是一個小了一個數量級的社群。這不代表不能用,但支援能量、issue 回應速度、長期維護風險,都要按一人專案的標準估。

把 issue 清單攤開,有六個會直接改變決策的已知限制。沒接螢幕的機器連得上,但整個畫面全黑、無法操作,headless 場景目前出局,留言裡的 workaround 是插一個虛擬顯示器(#7)。ARM64 的 Linux deb 官方 Releases 每個版號都有發,樹莓派等 ARM 小主機有安裝包可抓;但 2025 年 12 月那條希望擴大 ARM 支援的請求至今開著,13 則留言大多卡在 alpine 相容與自行交叉編譯的疑難(#48),非主流發行版要先有心理準備。沒有自動更新功能,用戶端雖會向版本服務查詢新版資訊,更新仍要自己下載安裝(#28)。有使用者回報 Windows 10 控制 Windows 11 失敗、反向卻可以的案件還開著(#62)。控制端與被控端螢幕解析度差距大時,被控端畫面渲染解析度會出錯(#85)。deepin 25.1 上鍵盤輸入失敗(#88)。

安全面上有兩個對照。Windows 官方安裝包有做數位簽署,用的是 SignPath.io 提供給開源專案的免費簽署服務,憑證由 SignPath Foundation 出,下載後可以驗簽。但簽署政策頁只涵蓋 Windows,macOS 的 pkg 沒有提到公證,issue #64 有使用者反映特定 macOS 版本裝不起來的相容問題,macOS 用戶要有第一次執行被攔的心理準備。另外,如果你想自己編譯,README 有個提示:自編譯的用戶端因為缺少憑證檔案,狀態欄會顯示未連接伺服器,解法是先從官網裝一次官方用戶端,讓環境裡有憑證檔。開源歸開源,第一次的信任起點仍然是官方發行的安裝包。

headless、ARM、自動更新還開著,誰該現在裝

我的判斷分成三種人。個人使用者要在自己兩三台機器之間遠端,對畫面延遲不苛求,現在就可以裝來試,成本是兩個安裝包加一次連線測試。有自架能力、想掌控中繼路徑的人,這套的單容器部署值得認真考慮,條件是直接走正式憑證路線,跳過自簽根憑證那一步。需要 headless 主機、自動更新、或商業級支援合約的人,現在的誠實答案是再等,這些缺口都還開著。

驗證它值不值得繼續用,有幾個你自己就能做的低成本檢查。下載前,先去 repo 讀一遍 PRIVACY.md 和簽署政策頁,確認你能接受它的資料路徑描述。裝好後,兩台自己的機器連一次,觀察三件事:狀態欄是否顯示已連接伺服器、直連時的鍵鼠延遲你能不能接受、鎖屏後能不能重新登入(這測的是 Windows 服務有沒有裝好)。看見這三個都過關,再考慮把主力工作流搬上來;任何一個不過關,它的 issue 清單就是你要回去看的地方。最後提醒一次使用姿勢:遠端連線期間剪貼簿會自動同步,連線前把密碼管理器裡的東西清乾淨,這個習慣比挑哪套軟體更重要。

授權與專案狀態:桌面用戶端採 GPL-3.0,自架伺服器、MiniRTC 引擎與網頁版用戶端採 LGPL-3.0,全部可在 GitHub 上審計。最新版號 v1.4.2-20260803,主倉庫 4,243 顆星,最近提交 2026 年 8 月 16 日。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 909

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...