在遠端桌面方面博主以前一直用的是 TeamViewer,官方各種查商用加限制之後換成了國產的 ToDesk,但是近來 ToDesk 也開始炸魚了,強制登錄加各種限制。最近恰好看到 Rustdesk 轉為開源模式了就摸索著嘗試一下它的使用,體驗真的很棒~
一、軟體簡介#
RustDesk,工具如其名,基於高效的 Rust 語言構建的開源遠端桌面工具。這款工具最早我是在 V2EX 上看到的,但是當時自建伺服器需要支付 100 美金購買授權,用於展示的 demo 只能實現最簡單的演示功能,內置的伺服器似乎位於境外,無法作為生產力軟體使用。
最近又看到群友提起,發現 RustDesk 已經將伺服器開源並允許自行搭建中轉伺服器。開學以來博主頻繁用到遠端桌面軟體,因為即使不在辦公室也時常需要在辦公室的電腦上錄製會議、接收檔案、刷網課等。從去年開始博主一直使用的是 ToDesk,但是近期幾個新版本主控不僅強制登錄還加入了針對 Android 被控的限制,免費版僅有支持一台設備且並且一個月才能更換一次。軟體本身也有點小 bug,手機作為主控時斷開連接把 app 置於背景一段時間之後,再打開就會提示 “帳號未登錄”,只有重啟軟體後才能繼續正常控制帳戶內的電腦。
簡單總結一下博主這幾天使用 RustDesk 的優勢:
(1)輕量: 不論伺服器還是客戶端、不論哪個平台,軟體小巧、功能完備。
(2)全平台支持: 支持 Android、Linux、Windows 任意雙向控制。
(3)安全可控: 軟體開源,伺服器自建,通信加密。
(4)帶寬高效: 僅需 2-3M 即可流暢 1080P,支持 TCP 打洞端對端 P2P 連接。
二、準備工作#
除了日常使用的主控、被控手機和電腦之外,要準備的就只有一台伺服器。
三、構建伺服器#
Rustdesk 官方有提供docker一把梭的的部署方式,可以很方便地將伺服器搭建起來。不過本文著重記錄一下手動配置的方式,畢竟作為 Rustdesk 本身硬體要求極低,還是要把優勢最大化展示出來。
官方文檔 :點擊前往
Rustdesk 的伺服器(即轉發伺服器)需要最少 3 個端口,程式佔用另外兩個用於實現 Web 端的遠端桌面(參考:點擊前往)。官方文檔對於各端口的用途說明比較簡略,下表是一個簡要的概述。我引入了一個 “錨點” 的概念,因為針對 Rustdesk 伺服器的自定義端口設置是通過指定錨點再通過 - 1、+2 來產生的,並不是讓你自行隨意指定五個端口。
端口號 | 協議 | 程式 | 用途 | 錨點 |
---|---|---|---|---|
21115 | tcp | HBBS | NAT 類型測試 | |
21116 | tcp/udp | HBBS | TCP 打洞與連接服務 / UDP ID 註冊與心跳服務 | HBBS 錨點 |
21117 | tcp | HBBR | 中繼服務 | HBBR 錨點 |
21118 | tcp | HBBS | WebSocket 服務 | |
21119 | tcp | HBBR | WebSocket 轉發 |
HBBR、HBBS 伺服器 64 位的 Windows/Linux 的預編譯包可以通過 GitHub Release 進行獲取,其餘的架構則需要自行 clone 源碼通過 cargo 進行編譯(官方文檔)。若構建中遇到問題可以在評論區留言,博主可以協助或者完善本文。
GitHub 預編譯包 :點擊前往
官方的文檔推薦使用 PM2 來守護進程(點擊前往),但是我感覺為了一個輕量級的遠端桌面工具,裝一套 Node.js 的工具有一點不太合適。博主還是推薦通過 systemd 實現進程的管理、開機自啟。
HBBS#
解壓出來的 hbbs 檔案先通過chmod +x hbbs
賦予可執行權限,先運行一次./hbbs
,生成用於客戶端認證使用的公鑰id_ed25519.pub
,隨後用cat id_ed25519.pub
命令查看公鑰並記下。然後通過喜歡的編輯器編輯/etc/systemd/system/hbbs.service
,將用於參考的以下配置根據需要進行修改並保存,這時也要將強制校驗密鑰以-k _
參數寫入啟動命令中。
⚠警告:博主強烈建議增加
-k
參數設置,否則 hbbs 將不會強制校驗客戶端的密鑰是否正確,導致轉發伺服器可能會被匿名使用!
1234567891011121314151617181920 | # systemd 配置路徑# /etc/systemd/system/hbbs.service [Unit]Description=RustDeskServiceAfter=network.target [Service]Type=simpleUser=rootRestart=on-failureRestartSec=5s#設置運行路徑WorkingDirectory=/程式路徑/rustdesk#可修改錨點端口,當前為 21116(錨點)和 21115(錨點 - 1)和 21118(錨點 + 2)#-r 用於指定網卡 IP(適用多網卡),-k 參數用於強制校驗客戶端公鑰,用於避免未授權的使用ExecStart=**/程式路徑/**rustdesk/hbbs-r0.0.0.0-p21116-k_ **[Install]**WantedBy=multi-user.target |
---|
HBBR#
解壓出來的 hbbr 檔案先通過chmod +x hbbr
賦予可執行權限,然後通過喜歡的編輯器編輯/etc/systemd/system/hbbr.service
,將用於參考的以下配置根據需要進行修改並保存,同樣將密鑰校驗以-k _
參數寫入啟動命令中。
hbbr.service
1234567891011121314151617181920 | # systemd 配置路徑# /etc/systemd/system/hbbr.service [Unit]Description=RustDeskServiceAfter=network.target [Service]Type=simpleUser=rootRestart=on-failureRestartSec=5s#設置運行路徑WorkingDirectory=/程式路徑/rustdesk#可修改錨點端口,當前為 21117(錨點)和 21119(錨點 + 2)#-k 參數用於強制校驗客戶端公鑰,用於避免未授權的使用ExecStart=**/程式路徑/**rustdesk/hbbr-p21117-k_ **[Install]**WantedBy=multi-user.target |
---|
為了簡化這個流程,你可以將解壓出來預編譯的hbbr
、hbbs
放於/home/rustdesk
資料夾下,直接執行以下兩個 txt 中的內容(點擊前往)創建 service。.service
設置好後,即可通過service hbbs start
和service hbbr start
來啟動這兩項服務,啟動後可以通過service hbbs status
和service hbbr status
查看進程的運行狀態,顯示綠色的 Active 即無誤。
一切準備就緒後即可通過systemctl enable hbbs
和systemctl enable hbbr
允許它們開機自啟。最後端口的放行,iptables
、firewalld
、ufw
的命令分別如下,其中的端口請按照你的設置的進行放行(默認 21115-21117),這裡需要注意 hbbs 錨點端口必須同時放行 tcp 和 udp。WEB 端由於正在測試加上博主暫時沒有這個需求,就沒有去嘗試,如果你有好的實踐歡迎在評論區分享你的經驗~
端口放行
Shell
123456789101112131415161718 | #CentOS firewalldfirewall-cmd--zone=public--add-port=21115/tcp--permanentfirewall-cmd--zone=public--add-port=21116/tcp--permanentfirewall-cmd--zone=public--add-port=21116/udp--permanentfirewall-cmd--zone=public--add-port=21117/tcp--permanent #Debian/Ubuntu ufwufwallow21115/tcpufwallow21116/tcpufwallow21116/udpufwallow21117/tcp #iptablesiptables-IINPUT1-ptcp--dport21115-jACCEPTiptables-IINPUT1-ptcp--dport21116-jACCEPTiptables-IINPUT1-pudp--dport21116-jACCEPTiptables-IINPUT1-ptcp--dport21117-jACCEPTiptables-save// 保存(解決重啟失效) |
---|
四、配置客戶端#
在新版的服務中,在 hbbs/hbbr 運行目錄下執行cat id_ed25519.pub
可以得到用於客戶端與伺服器認證的公鑰(配圖操作有誤,感謝作者指正)。
在 Rustdesk 客戶端中,找到【ID / 中繼伺服器】選項點進去設置成我們搭建好 hbbs/hbbr 的伺服器(官方文檔)。
其中第一項 ID 伺服器處以【IP:端口
】的形式填寫伺服器伺服器IP
和hbbs錨點端口
、第二項以相同的格式填寫伺服器IP
和hbbr錨點端口
、第四項 Key 將上文獲取到的id_ed25519.pub
填入,保存後即可和 Todesk、Teamviewer 等一樣通過 ID + 密鑰的形式控制其他客戶端。
需要注意的是不論是主控還是被控,都需要設置為同一個ID/中繼伺服器
才能夠正常連接使用。除此之外,局域網 IP 直連可以在被控的設置菜單中開啟【允許 IP 直接訪問】,然後在主控端連接框直接輸入【被控IP
:21116】進行連接。其他平台更細節的使用可以參考官方文檔(點擊前往)進行學習。
五、結語#
RustDesk 無疑是一款優秀的開源遠端桌面工具,在這個遠端桌面工具反復被商業公司養魚、割韭菜的背景之下,它可謂是一股清流打破了這樣的局面,給我們帶來了更多的選擇。
當然 RustDesk 本身仍有許多改進的空間,比如 APP 連接之後默認讓畫面適合螢幕的狀態更好、掃碼功能啟動更流暢些、交互 UI 更友好一些等等。根據同類的軟體猜測 RustDesk 未來可能會有更高效的組件如 NVENC、更完備的帳戶和控制系統等等,也希望 RustDesk 能夠保持開源的初心並找到合適自己的盈利方式,畢竟光用愛發電是不可能的。這裡有一個作者接受捐助的網址(點擊前往),有餘力可以考慮支持一下作者。
最後呢,就再次感謝作者帶來這樣一款好用的軟體吧~
轉載自: Luminous' Home » 【RustDesk】自建遠端桌面服務替代 TeamViewer/Todesk