本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html
本文做者: 蘇洋linux
建立時間: 2019年03月11日 統計字數: 4300字 閱讀時間: 9分鐘閱讀 本文連接: https://soulteary.com/2019/03/11/mac-osx-remote-management.htmlgit
開發設備通常開放 SSH
端口和訪問權限就可以知足幾乎全部需求,可是若是設備換成了 Windows 或者 OSX ,這個事情就沒有那麼簡單了,偶爾仍是須要登陸圖形界面作一些事情。對於我這種家裏局域網有完整開發環境的折騰控,遠程管理 OSX 設備的需求就出現了。github
若是你使用相似 AnyConnect 的方式去鏈接專有網絡進行開發,這個事情能夠相對容易的解決,可是會額外帶來一個問題:你的全部流量都會走目標設備。編程
而若是使用本地端口轉發、系統PROXY的方案來作,有些客戶端又支持的不是很好,好比我一直在使用的 Remotix ,我購買這款軟件有好幾年了,它可以讓我在筆記本、平板、甚至是手機上解決一些問題,可是一旦我離開局域網環境,它的「假期就開始了」。安全
本文將花費十五分鐘的時間,解決這個問題。bash
相比較所有流量都走目標設備,這個方案明顯更合理。固然,你也能夠選擇配置路由表解決上面的問題,不過若是目標設備有多臺,分佈於多個位置,難道咱們要不停切換網絡鏈接狀態嗎。服務器
這裏用到的技術方案主要是:流量反向代理。網絡
我選擇的工具是 github.com/fatedier/fr…,選擇它的緣由很簡單,它的代碼開源。app
這個方案須要一臺位於公網的服務器,前一陣清理服務,正好空閒了兩臺,拿來作這個事情再適合不過了。
這裏的服務端是具有公網 IP 地址的雲服務器,用來反向代理你在局域網中須要被訪問的設備。
以 Ubuntu 18.04
爲例,咱們進行服務端的配置。訪問 github.com/fatedier/fr… 獲取最新的軟件包。
cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_amd64.tar.gz
tar -zxvf frp_0.24.1_linux_amd64.tar.gz
複製代碼
解壓縮以後,你會看到一堆文件,其中名稱爲 frps
的文件是和服務器相關的,而命名爲 frpc
則是客戶端相關的文件。
咱們先對應用目錄進行規劃,理想的目錄環境能夠是這樣:
.
├── conf # 存放配置文件
│ └── supervisor.ini
├── frps # 服務端應用
├── frps.ini
└── log # 存放日誌文件
├── frps.log
└── supervisor.log
複製代碼
建立必要的目錄,並將以前下載好的應用執行文件放到這個目錄中。
mkdir -p /data/frp/{conf,log}
mv /tmp/frp_0.24.1_linux_amd64/frps /data/frp
複製代碼
接着咱們來建立一個服務端配置文件,能夠參考下面的配置,並適當修改內容。
[common]
bind_port = 8000
bind_addr = 0.0.0.0
dashboard_addr = 0.0.0.0
dashboard_addr = 8080
dashboard_user = homelab_user
dashboard_pwd = homelab_pass
token = token_used_by_server_and_client
max_pool_count = 5
max_ports_per_client = 0
tcp_mux = true
複製代碼
若是你將上面的配置保存爲 frps.ini
,接下來就能夠執行命令驗證配置是否正確。
/data/frp/frps -c /data/frp/frps.ini
複製代碼
不出意外,你將看到下面的提示:
2019/03/11 12:30:45 [I] [service.go:124] frps tcp listen on 0.0.0.0:8000
2019/03/11 12:30:45 [I] [root.go:204] Start frps success
複製代碼
這裏須要額外注意一件事,若是你使用的雲服務開啓了安全組
功能,須要額外配置安全組的規則,對上述配置文件的端口進行放行,若是開啓了 ufw
這類防火牆,也是同理。
爲了服務的穩定運行,這裏咱們仍是使用 supervisor
進行進程管理和運行守護,若是有不會配置的同窗能夠翻看以往的文章或者自行搜索。
這裏給出一個基礎的配置參考:
[program:frp]
; 啓動目錄
directory = /data/frp/
; 執行命令
command = /data/frp/frps -c /data/frp/frps.ini
; 隨 supervisord 啓動
autostart = true
; 程序啓動 5s 內沒有異常則認爲是正常運行
startsecs = 10
; 程序異常退出後從新啓動
autorestart = true
; 重試啓動程序多少次
startretries = 1000
; 默認使用當前用戶執行應用
;user = soulteary
; 須要手動建立目錄
stdout_logfile = /data/frp/log/supervisor.log
複製代碼
固然,別忘記重啓 supervisor
讓配置生效,具體操做上一篇文章中有講。
這裏的客戶端是指你須要被訪問的設備,或者使用端口轉發規則可以訪問到目標設備的路由器、交換機設備,本文中的客戶端指的是一臺 Mac Book Pro 筆記本。
和配置服務端相似,咱們先下載軟件包,並準備應用執行目錄。
wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_darwin_amd64.tar.gz
tar -zxvf frp_0.24.1_darwin_amd64.tar.gz
mkdir -p ~/Service/frp/{conf,log}
mv frp_0.24.1_darwin_amd64/frpc ~/Service/frp/
複製代碼
接着建立客戶端的配置文件,這裏暫定命名爲 frpc.ini
,具體內容請根據具體狀況修改。
[common]
server_addr = 123.123.123.123
server_port = 8000
token = token_used_by_server_and_client
admin_port = 8080
admin_user = homelab_client
admin_pwd = homelab_client
pool_count = 5
tcp_mux = true
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
use_encryption = true
use_compression = trye
remote_port = 5900
health_check_type = tcp
health_check_timeout_s = 3
health_check_max_failed = 3
health_check_interval_s = 10
複製代碼
這裏須要額外注意的是:token 字段,內容務必和服務端保持一致,不然沒法建立鏈接。
另外,你但願可以被遠程訪問到的服務,它的 remote_port
一樣須要服務端開放此端口的訪問規則。
接着,咱們運行下面的命令,進行測試,看看服務是否聯通。
~/Service/frp/frpc -c ~/Service/frp/frpc.ini
複製代碼
若是一切正常,你將可以看到相似下面的日誌:
2019/03/11 12:36:00 [I] [service.go:214] login to server success, get run id [4a62ac3f5f635268], server udp port [0]
2019/03/11 12:36:00 [I] [proxy_manager.go:137] [2a62ac3f5f635268] proxy added: [rdp]
2019/03/11 12:36:00 [I] [health.go:115] [2a62ac3f5f635268] [rdp] health check status change to success
2019/03/11 12:36:00 [I] [proxy_wrapper.go:206] [2a62ac3f5f635268] [rdp] health check success
2019/03/11 12:36:00 [I] [control.go:143] [vnc] start proxy success
複製代碼
這時,打開客戶端軟件,建立一個 VNC 連接,服務器地址填寫雲主機的IP,端口填寫客戶端服務 remote_port
,若是上述配置都正常,那麼你將會看到遠程桌面的登陸提示。
輸入正確的用戶名和密碼以後,熟悉的桌面就呈如今你的眼前了。
Mac OSX 系統上的進程管理,上一篇文章已經提到過,這裏不作贅述,簡單提供一個 supervisor
配置。
rogram:frp]
; 啓動目錄
directory = /Users/soulteary/Service/frp/
; 執行命令
command = /Users/soulteary/Service/frp/frpc -c /Users/soulteary/Service/frp/frpc.ini
; 隨 supervisord 啓動
autostart = true
; 程序啓動 5s 內沒有異常則認爲是正常運行
startsecs = 10
; 程序異常退出後從新啓動
autorestart = true
; 重試啓動程序多少次
startretries = 1000
; 默認使用當前用戶執行應用
;user = soulteary
; 須要手動建立目錄
stdout_logfile = /Users/soulteary/Service/frp/log/supervisor.log
複製代碼
長時間這樣暴露端口,其實並非理智 & 安全的選擇,爲了更加安全的使用這個服務,咱們還須要作一些額外的策略,後續我會再更新一篇,詳細介紹如何處理。
我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。
在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)