兩個局域網(wǎng)的主機要進(jìn)行遠(yuǎn)程桌面娶视,必須進(jìn)行內(nèi)網(wǎng)穿透告抄。frp 是一個不錯的選項菱皆。但其實不依賴外部的工具汤求,僅僅利用系統(tǒng)的 SSH 也能實現(xiàn),而且在安全性上可能會更好肴楷。
最終架構(gòu)
參與該網(wǎng)絡(luò)的各個機器水由、端口、執(zhí)行的命令及其順序如下圖所示:
實現(xiàn)步驟
假設(shè)我們現(xiàn)在在辦公室有一臺 MacOS 主機 C赛蔫,要連接家里的 MacOS 主機 A砂客。
- 購買一臺公網(wǎng)服務(wù)器 B泥张,且具有公網(wǎng) IP。帶寬可能要的比較大鞠值,見下文的說明媚创。假設(shè)公網(wǎng) IP 為 123.1.2.3,其 SSHD 端口為 22彤恶。
- 在主機 A 上钞钙,開啟 VNC 服務(wù):前往 System Preferences->Share,勾選 Screen Share声离。它會監(jiān)聽本機的 5900 端口芒炼。
- 在主機 A 上,開啟 SSHD 服務(wù):前往 System Preferences->Share术徊,勾選 Remote Login本刽。它會監(jiān)聽本機的 22 端口。
- 在主機 A 上赠涮,開啟 SSH 反向隧道:
ssh -gNTR 127.0.0.1:7000:127.0.0.1:22 root@123.1.2.3
盅安。這里相當(dāng)于在公網(wǎng)服務(wù)器 B 上開了一個新的 SSHD 服務(wù)代理,其端口是 7000(這里是示例端口世囊,可以自己修改别瞭,下同)。 - 在公網(wǎng)服務(wù)器 B 上株憾,通過 7000 端口代理的 SSHD 服務(wù)蝙寨,建立一個到主機 A 的 VNC 服務(wù)的反向代理:
ssh -p 7000 -N -L 127.0.0.1:5900:127.0.0.1:5900 admin@127.0.0.1
(admin 表示主機 A 的登錄用戶名,請改成自己使用的)嗤瞎。這里就相當(dāng)于公網(wǎng)服務(wù)器 B 提供了一個 VNC 服務(wù)墙歪,其端口為 5900。 - 在主機 C 上贝奇,建立一個到公網(wǎng)服務(wù)器 B 的 VNC 服務(wù)的反向代理:
ssh -N -L 127.0.0.1:5900:127.0.0.1:5900 root@123.1.2.3
虹菲。這里就相當(dāng)于主機 C 提供了一個 VNC 服務(wù),其端口為 5900掉瞳。 - 在主機 C 上毕源,打開 Finder->Go->Connect to Server,填寫
vnc://127.0.0.1
陕习,然后在彈出的用戶密碼框中輸入遠(yuǎn)程主機的登錄用戶名(如示例的 admin)及其密碼霎褐,就可以訪問咯「昧停或者用命令行打開:open vnc://127.0.0.1:5900
當(dāng)用戶進(jìn)行遠(yuǎn)程桌面時冻璃,比如移動一下鼠標(biāo),此時其請求數(shù)據(jù)流向為 C:127.0.0.1:5900 -> B:123.1.2.3:22 -> B:127.0.0.1:5900 -> B:127.0.0.1:7000 -> B:123.1.2.3:22 -> A:127.0.0.1:22 -> A:0.0.0.0:5900。
效果
以上所有的端口都是本地 127.0.0.1 的省艳,除了公網(wǎng)服務(wù)器 B 需要對外暴露 SSHD 端口(22)娘纷,無需再暴露任何其他主機、其他端口跋炕,而且使用 OpenSSH 加密通信數(shù)據(jù)赖晶,相對來說比較安全。當(dāng)然上面用了公網(wǎng)服務(wù)器的 root 用戶枣购,你也可以新建一個低權(quán)限用戶來做這個嬉探,進(jìn)一步提升安全性擦耀。
但是也存在一些需要關(guān)注的問題棉圈、優(yōu)化的地方。最大的一個問題就是卡頓眷蜓。在 1Mbit/s(其實只有 100KB)的公網(wǎng)帶寬服務(wù)器上分瘾,效果一般。打字什么的沒什么問題吁系。要是傳送文件德召,擠占帶寬后會導(dǎo)致屏幕完全沒法操作。瀏覽網(wǎng)頁比較卡頓汽纤,可以看到明顯的延遲(尤其是滾動頁面時)上岗。這一點相比 TeamViewer 免費版來說都差很多。很大的原因可能還是 VNC 的協(xié)議不如 TeamViewer蕴坪,OpenSSL 的加密也比較重肴掷。公網(wǎng)帶寬提升到 10Mbit/s 可能會比較流暢,當(dāng)然還要確保家里的電腦的上傳帶寬也足夠(>=10Mbit/s)背传,可以用 http://www.speedtest.cn/ 測試下網(wǎng)速呆瞻。
其他的一些問題:
- SSH 有時候不太穩(wěn)定,容易斷掉径玖〕掌ⅲ可以考慮使用 autossh 之類。
- 輸入文字時會有一個大的光標(biāo)梳星,可能是協(xié)議實現(xiàn)的問題赞赖。
- 使用 MacOS 自帶的 VNC 客戶端,復(fù)制文件只能通過拖拽方式冤灾,無法直接 CMD+C薯定、CMD+V。但復(fù)制文字可以用快捷鍵瞳购。
- 如果遠(yuǎn)程主機配置了屏保话侄,有時候取消屏保特別慢。這個時候可以先斷開連接,重新連年堆⊥毯迹可能還是帶寬不足的并發(fā)癥。
這個方式一般來說作為 TeamViewer 免費版的一個備份還可以变丧。有時候 TeamViewer 在電腦屏毖抗罚或鎖屏或最小化時,無法連接上痒蓬⊥妫可以通過本方法先登錄遠(yuǎn)程主機來排查解決。Windows 及其 RDP 協(xié)議的也差不多類似攻晒,只是把上面 VNC 的部分替換成 RDP顾复,使用 Microsoft Remote Desktop 等客戶端來連接即可。