說到遠(yuǎn)程桌面,其實(shí)已經(jīng)有很多現(xiàn)成的解決方案,比如說向日葵,teamviewer或者說是windows的遠(yuǎn)程桌面等等,他們有需要付費(fèi)、中繼服務(wù)器在遠(yuǎn)端或者只有用于windows等限制。那么假設(shè)說我們要自己折騰一個(gè)中繼和驗(yàn)證服務(wù)器由自己搭建的可以用于多個(gè)平臺(tái)的遠(yuǎn)程桌面,開源項(xiàng)目rustdesk算是一個(gè)不錯(cuò)的選擇。

項(xiàng)目地址

https://github.com/rustdesk/rustdesk

https://rustdesk.com/zh/

項(xiàng)目文檔

https://rustdesk.com/docs/zh-cn/

項(xiàng)目有個(gè)反詐鄭重提示,那就是遠(yuǎn)程桌面可以對被控端進(jìn)行幾乎所有操作,請確保你作為被控端時(shí)明確的知曉被控制的風(fēng)險(xiǎn)以及如何及時(shí)切斷控制,同時(shí)作為控制端時(shí)合法合理的使用。手機(jī)上如果不認(rèn)識(shí)的人讓你安裝這個(gè)你千萬別安,項(xiàng)目也不允許在不輸入自己的服務(wù)器的基礎(chǔ)上使用電腦控制手機(jī)。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

rustdesk也有收費(fèi)的專業(yè)版,即在免費(fèi)版基礎(chǔ)上增加一些用戶管理和多中繼自動(dòng)選擇等動(dòng)能, 不過我們個(gè)人用不太上,只用安裝一般的自建服務(wù)器就行。

一、安裝服務(wù)端

windows和linux有直接的服務(wù)器程序可以部署,直接部署沒啥好說的就是下載運(yùn)行,所以寫的可能簡單一點(diǎn)供大家自行折騰。下載的服務(wù)端項(xiàng)目是rustdesk-server,注意不要在github上面搜錯(cuò)了,linux下載紅框的,windows下載藍(lán)框的。

https://github.com/rustdesk/rustdesk-server/releases/

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

以linux為例,你可以在PVE里面按照前面幾篇的模式再創(chuàng)建一個(gè)linux系統(tǒng)的lxc容器,讓后按照文檔下載相關(guān)文件(wget命令后再unzip解壓或者下載解壓后WinSCP上傳到容器里面,可以在root目錄里面新建一個(gè)rustdesk目錄來存放,方便操作),zip文件里面就以下這幾個(gè)文件。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

看你喜好是不是要用pm2來啟動(dòng)hbbs和hbbr兩個(gè)程序,文檔里面非常的清晰。不用pm2直接啟動(dòng)就是進(jìn)入到rustdesk目錄之后輸入兩條命令,你還可以在兩個(gè)命令后面都加一個(gè)-k _,禁止沒有key的建立非加密連接。不過最新版本好像是強(qiáng)制會(huì)要求key

./hbbs -r

./hbbr

直接部署的壞處是要新建一個(gè)lxc容器,有那么一點(diǎn)點(diǎn)浪費(fèi)資源,好處是不需要和dockerhub網(wǎng)絡(luò)斗智斗勇。

我們下面主要來說一下docker的部署。

首先是示例的yml文檔

networks:

rustdesk-net:

external: false

services:

hbbs:

container_name: hbbs

ports:

- 21115:21115

- :21116 # 自定義 hbbs 映射端口

- :21116/udp # 自定義 hbbs 映射端口

image: rustdesk/rustdesk-server

command: hbbs -r : # 填入個(gè)人域名或 IP + hbbr 暴露端口

volumes:

- :/root # 自定義掛載目錄

networks:

- rustdesk-net

depends_on:

- hbbr

restart: unless-stopped

deploy:

resources:

limits:

memory: 64M

hbbr:

container_name: hbbr

ports:

- :21117 # 自定義 hbbr 映射端口

image: rustdesk/rustdesk-server

command: hbbr

volumes:

- :/root # 自定義掛載目錄

networks:

- rustdesk-net

restart: unless-stopped

deploy:

resources:

limits:

memory: 64M

這是一個(gè)兩個(gè)容器一起的項(xiàng)目,hbbs是id注冊服務(wù)器,hbbr是中繼服務(wù)器;整個(gè)文檔和我們之前的單項(xiàng)目的yml有一點(diǎn)區(qū)別,類似于我們之前部署過的immich的yml文檔。首先是創(chuàng)建了一個(gè)rustdesk-net的網(wǎng)絡(luò),然后兩個(gè)服務(wù)其他都是常規(guī)的映射操作,只是hbbs有一個(gè)運(yùn)行指令hbbs -r ip:端口以及hbbs是依賴于hbbr之上的。按照作者的說明,項(xiàng)目實(shí)際占用資源很少,且只有在打洞不成功的情況下才會(huì)使用中繼服務(wù)器,所以兩個(gè)項(xiàng)目給了個(gè)64M內(nèi)存的限制,我們按照作者的注釋稍微修改一下就能用了。如果說端口那里你覺得麻煩,linux系統(tǒng)下你可以不映射端口,前面的networks段也可以刪了,直接兩個(gè)項(xiàng)目都使用network_mode: "host"模式即可,即直接替換容器配置的ports、networks字段,而內(nèi)存限制是否要保留也看你需要。

以下是操作示例,在docker目錄下創(chuàng)建一個(gè)rustdesk目錄,然后目錄下新建兩個(gè)項(xiàng)目的映射目錄hbbs和hbbr,然后創(chuàng)建我們的yml文檔,端口我都懶得改了,看你自己的需求,以及hbbs部分的command里面的域名要改成你自己容器的域名,而且如果你后續(xù)的服務(wù)器是填域名+端口號的話這里一定是用你的域名和你準(zhǔn)備Nginx反向代理用的端口號,用局域網(wǎng)IP會(huì)公網(wǎng)連接不上。我用的yml文檔如下

networks:

rustdesk-net:

external: false

services:

hbbs:

container_name: hbbs

ports:

- 21115:21115

- 21116:21116 # 自定義 hbbs 映射端口

- 21116:21116/udp # 自定義 hbbs 映射端口

image: rustdesk/rustdesk-server

command: hbbs -r www.example.com:21117 # 填入個(gè)人域名或 IP + hbbr 反向代理后的暴露端口

volumes:

- ./hbbs:/root # 自定義掛載目錄

networks:

- rustdesk-net

depends_on:

- hbbr

restart: unless-stopped

deploy:

resources:

limits:

memory: 64M

hbbr:

container_name: hbbr

ports:

- 21117:21117 # 自定義 hbbr 映射端口

image: rustdesk/rustdesk-server

command: hbbr

volumes:

- ./hbbr:/root # 自定義掛載目錄

networks:

- rustdesk-net

restart: unless-stopped

deploy:

resources:

limits:

memory: 64M

運(yùn)行成功之后我們打開hbbs目錄,里面會(huì)生成一對公鑰和私鑰以及幾個(gè)數(shù)據(jù)庫文件,我們用WinSCP打開id_ed25519.pub這個(gè)公鑰文件放在一邊,等會(huì)兒要復(fù)制里面的公鑰。然后來到我們前幾篇安裝的nginx容器,在nginx.conf中的stream塊里面將21115/21116/21117三個(gè)端口以及21116的UDP都反向代理出去,從而使得我們可以在公網(wǎng)訪問服務(wù),我這里也假設(shè)反向代理端口號并沒有去修改直接同端口號映射,所以我的docker的yml文檔里的hbbs命令的域名后的端口還是21117。前面也有部分讀者提到用lucky圖形化操作比較方便,當(dāng)然也是可以的。然后關(guān)于要使用的域名,你可以用nginx這個(gè)容器ddns解析出去的主域名,也可以去你的域名管理控制臺(tái)里面新建一個(gè)主機(jī)記錄,輸入你喜歡的三級域名,比如說輸個(gè)connect,然后記錄類型選擇CNAME,記錄值就是你的主域名。當(dāng)然由于這里是直接在傳輸層進(jìn)行的轉(zhuǎn)發(fā),所以所有解析到Nginx的IP地址的域名都可以訪問這個(gè)服務(wù)器,只是假裝操作一下。

二、客戶端設(shè)置

首先是客戶端下載,地址

https://github.com/rustdesk/rustdesk/releases

沒必要去下面展開那些assets,上面那個(gè)框里面對應(yīng)著系統(tǒng)和處理器位數(shù)下就行了。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

以下我用我有的windows和安卓系統(tǒng)為例說說怎么用.

1.windows安裝

windows點(diǎn)開之后其實(shí)就是一個(gè)portable的版本,但他會(huì)建議你安裝,否則你需要每次運(yùn)行的時(shí)候?qū)⒊绦蛱釞?quán)到管理員身份運(yùn)行,不然遠(yuǎn)程控制有些權(quán)限不夠。如圖所示,點(diǎn)擊安裝即可

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

安裝主要就是選擇安裝路徑,看你需不需要自動(dòng)啟動(dòng)在啟動(dòng)菜單創(chuàng)建快捷模式以及看你是否想要去閱讀以下隱私條款,機(jī)翻之后應(yīng)該就是這個(gè)會(huì)比較敏感

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

然后就是安裝,安裝后剛才運(yùn)行的臨時(shí)的portable版本的軟件在C:用戶你的用戶名appdatalocalrustdesk這個(gè)目錄里面,安裝后他依然還在不會(huì)自動(dòng)刪除。然后整個(gè)項(xiàng)目的配置文件在C:用戶你的用戶名AppDataRoamingRustDeskconfig,這個(gè)是公用的而且軟件卸載后也不會(huì)自動(dòng)刪除,因?yàn)槟阋掳姹疽彩切遁d后重新安裝。

安裝后我們到安裝的目錄下再次打開程序,然后就可以進(jìn)行一些必要的設(shè)置了,點(diǎn)擊最上方的設(shè)置,ID旁邊的三個(gè)點(diǎn)以及最小化旁邊的三根橫線就可以進(jìn)入設(shè)置界面。

常規(guī)頁沒啥好說的,主要就是自動(dòng)錄屏看你要不要打開。

安全頁首先你要點(diǎn)擊允許調(diào)整安全設(shè)置才能進(jìn)行設(shè)置,基本上還是如字面意思沒有什么需要額外解釋的,看你自己的需求。唯一可能需要提一句的就是如果你要遠(yuǎn)程無人操控的話就設(shè)置一個(gè)固定密碼然后選兩種模式都可以登錄,密碼最好復(fù)雜一點(diǎn),你的另一端可以選擇記住密碼所以不用怕以后記不住。

網(wǎng)絡(luò)這里設(shè)置同理,先點(diǎn)擊上方的解鎖網(wǎng)絡(luò)設(shè)置

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

ID服務(wù)器就是我們剛才建立的hbbs這個(gè)容器映射了TCP和UDP的那個(gè)端口前面再加上你的域名,例如按照我剛才的設(shè)置,那么我的ID服務(wù)器就是域名:21116,中繼服務(wù)器和API服務(wù)器可以不用填,他會(huì)自動(dòng)從ID服務(wù)器獲取,你要自己填寫也行,key的話就是把我們剛才打開放在一邊的id_ed25519.pub這個(gè)公鑰里面的那一串字母數(shù)字符號復(fù)制過來即可,設(shè)置完成后點(diǎn)擊應(yīng)用。

顯示也是基本選項(xiàng)都是如字面意思所言,看自己的需求。

2.安卓安裝

下載了apk文件后安裝,鴻蒙4.2也可以安裝,只是說過幾天他會(huì)提示你這是風(fēng)險(xiǎn)軟件問你是否確定要使用。安裝完成之后打開,然后到設(shè)置中填入ID/中繼服務(wù)器信息,跟電腦版的一樣,其他的設(shè)置內(nèi)容和電腦類似,就不贅述了。

填好之后如果你要手機(jī)控制電腦,那么就在你的手機(jī)端填上你電腦端的ID,然后看你選擇是在手機(jī)端輸入電腦端的連接密碼(隨機(jī)生成的或者是你在設(shè)置里面選擇了手動(dòng)設(shè)置密碼)。如果是反過來需要電腦控制手機(jī),那么首先需要在手機(jī)上點(diǎn)擊下方的共享屏幕,點(diǎn)啟動(dòng)服務(wù),然后會(huì)再次看到反詐提示,請?jiān)俅未_認(rèn)你沒有被詐騙。十秒之后可以選擇確定以及下次不再提示。接下來應(yīng)用會(huì)請求懸浮窗、文件讀寫和屏幕錄制權(quán)限,開啟后默認(rèn)的遠(yuǎn)程權(quán)限只有屏幕錄制,輸入控制(需要額外按照提示開啟無障礙輸入中最下端的原裝的服務(wù)的rustdesk input)、文件傳輸和音頻錄制需要你自己手動(dòng)開啟,并且再次注意沒有輸入中繼服務(wù)器和正確的key的話不能進(jìn)行其他端對手機(jī)端的遠(yuǎn)程控制。接下來同樣可以在手機(jī)上接受或者在電腦端輸入手機(jī)上顯示的隨機(jī)密碼或者你自己設(shè)定的密碼。連接成功之后就長這樣,全面屏的手勢操作是支持的,就是不算是特別靈敏,所以下面給你保留了三鍵的功能鍵,如果你不相信點(diǎn)掉了可以在最上面的下拉里面去點(diǎn)開左邊第二個(gè)即可。鎖屏之后的解鎖會(huì)比較麻煩,因?yàn)檫h(yuǎn)程不支持指紋和人臉了,畫圖只能靠盲畫手感,不過數(shù)字密碼倒是可以通過允許控制后輸入。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

另外一個(gè)可能會(huì)用到的功能是傳輸文件,點(diǎn)擊最上方的向下的箭頭展開菜單,然后選擇第三個(gè),再選擇傳輸文件,這個(gè)時(shí)候應(yīng)用會(huì)再要一次連接權(quán)限或者說輸入密碼,然后就可以在控制端看到傳輸文件的界面了,跟WinSCP差不太多吧,傳輸速度并不算快,只有2M左右,公網(wǎng)和局域網(wǎng)內(nèi)都是這個(gè)速度。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

然后在你第一次連接之后你已經(jīng)連接過的機(jī)器會(huì)出現(xiàn)在首頁,點(diǎn)擊旁邊的三個(gè)點(diǎn)可以選擇是否強(qiáng)制走中繼連接等操作,如圖所示,中繼連接會(huì)稍微穩(wěn)定一些,TCP打洞的方式有的時(shí)候會(huì)斷。

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

三、遠(yuǎn)程開機(jī)和自動(dòng)運(yùn)行

1.遠(yuǎn)程開機(jī)

遠(yuǎn)程開機(jī)需要你在局域網(wǎng)內(nèi)有一臺(tái)常開的設(shè)備,我們的all in one就是一個(gè)很符合要求的常開設(shè)備。同時(shí)還需要網(wǎng)卡支持,基本上近五年的主板上的板載網(wǎng)卡都還是支持遠(yuǎn)程喚醒的,而且一般來說是默認(rèn)開啟的,如果不確定可以去bios里面的電源管理項(xiàng)下確認(rèn)一下,但是每個(gè)板廠的bios他的描述都不盡相同,你可以看看有沒有WOL、wake、喚醒之類的關(guān)鍵詞。

windows里面我們需要設(shè)置網(wǎng)卡的一些選項(xiàng),在windows搜索那里直接輸入設(shè)備管理器,打開之后在網(wǎng)絡(luò)適配器找到你的網(wǎng)卡,例如我這兒的是螃蟹的2.5G網(wǎng)卡,右鍵選擇屬性

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

將高級選項(xiàng)中的關(guān)機(jī)網(wǎng)絡(luò)喚醒和魔術(shù)封包喚醒開啟

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

然后再在電源管理那里把允許此設(shè)備喚醒計(jì)算機(jī)打開

All in one(十二)遠(yuǎn)程桌面服務(wù)器rustdesk圖片

然后我們需要的是網(wǎng)卡的Mac地址,打開windows的命令提示行或者powershell,輸入ipconfig /all去找這張網(wǎng)卡的MAC地址,記錄下來。

接下來你需要的要么就是你的路由器自己就有魔術(shù)包喚醒的插件,要么我們就用all in one里面常開的機(jī)器來發(fā)送魔術(shù)包,例如說我們使用我們運(yùn)行Nginx的容器,反正他是直接在公網(wǎng)上的,只是需要記得將密碼設(shè)復(fù)雜一點(diǎn)以及不要用默認(rèn)的22端口。發(fā)送魔術(shù)包需要用到ethtool包里面的etherwake工具,首先我們先安裝ethtool包。另外為了方便我們查看網(wǎng)卡信息要用到ifconfig命令,所以順手可以在安裝一個(gè)net-tools包(我不記得這個(gè)在lxc容器里面是不是默認(rèn)有,不過有也沒啥影響)

apt install ethtool net-tools

首先運(yùn)行ifconfig命令找到我們連在局域網(wǎng)內(nèi)的網(wǎng)卡,就是你能看到inet后面是局域網(wǎng)IP的那個(gè),一般來說lxc容器還是按eth0這么來編號的,如果是其他系統(tǒng)的話可能是enp2s0這種。然后我們運(yùn)行etherwake命令

etherwake -i 你的網(wǎng)卡名字例如eth0 被喚醒網(wǎng)卡的MAC地址

我個(gè)人建議把這條命令保存到一個(gè)文本文檔里面(如果你用電腦遠(yuǎn)程操作ssh)或者說手機(jī)上的ssh終端使用有命令記憶下次可以輸前幾個(gè)字母就自動(dòng)點(diǎn)出來的(比如我在用的termius),畢竟這個(gè)命令是真的有點(diǎn)長。

2.開機(jī)后啟動(dòng)rustdesk

這里提供兩種思路,第一種是windows的開機(jī)啟動(dòng)項(xiàng)里面去把rustdesk remote desktop打開,第二種呢則是你本來就有需要ssh來連接windows,那么就在設(shè)置-系統(tǒng)-可選組件里面去搜索安裝openssh服務(wù)器和客戶端,然后就可以像linux一樣用ssh來執(zhí)行啟動(dòng)程序的命令,同樣做到開機(jī)后啟動(dòng)rustdesk。由于遠(yuǎn)程連接需要輸入rustdesk的密碼,所以上面提到需要你把rustdesk的密碼設(shè)置一個(gè)固定密碼。

rustdesk相比于上一篇用來游戲的sunshine+moonlight在遠(yuǎn)程控制這個(gè)層面上權(quán)限和操作更加的多,比如說可以解決我們上一篇沒有解決的鎖屏之后不能輸入密碼的問題,但是對于手柄之類的自然是沒有支持的。所以說可以考慮兩個(gè)工具配合起來,rustdesk用來解決開機(jī)輸入密碼的問題,moonlight用來打游戲,從而實(shí)現(xiàn)遠(yuǎn)程玩游戲,但是吧,延遲作用下玩玩模擬類或者一般RPG還行,ARPG就可以能只會(huì)讓自己血壓上升了。

作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。