前言
由於之前做devops,需要給用戶支持,為了方便遠程,首先使用的是向日葵,但是這個收費就算了,收費后效果也不大(很顯然著的是去年疫情時候遠程辦公),后面就查詢有沒遠程工具,繼而發現了frp,覺得很好用,配置對於首次使用的人來說,稍微有點復雜,因此記錄下。
frp介紹
frp簡單來說就是個內網穿透工具,提供了支持tcp的轉發,這也是我們最常用的功能,下載地址和文檔請參考frp github ,文檔
如果配置ssh、http,也是類似,具體參考文檔
使用frp進行遠程桌面
windows默認提供了遠程桌面功能,但是由於電腦都是局域網,沒有公網ip,是無法進行遠程桌面的,如果使用內網穿透工具frp,就可以實現。
配置frp tcp
以家中電腦遠程辦公室電腦為例
1.准備一個雲服務端(具有公網ip,比如阿里雲、騰訊雲、京東雲等),在雲服務器上安裝frp
從github下載frp,解壓后frp目錄是/etc/frp
服務端配置
#vim /etc/frp/frps.ini文件
#文件 frps.ini
[common]
bind_port = 7000
#啟動frp
nohup /etc/frp/frps -c /etc/frp/frps.ini &
客戶端(辦公室電腦)配置
同理下載frp安裝包,解壓后(目錄D:\tools\frp_0.31.2_windows_amd64),編輯frpc.ini文件
#frpc.ini
[common]
server_addr = 雲服務器ip
server_port = 7000
#不能相同
[office_demo_mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389 #3389是windows的遠程桌面端口,如果是ssh默認是22
remote_port = 7002 #把雲服務器的7002映射到辦公pc的3389端口,即遠程桌面端口
Windows開機啟動frp
winkey+r,輸入shell:startup
,進入開機啟動目錄,創建frpc.vbs
文件,內如如下
set ws=wscript.createobject("wscript.shell")
ws.run "D:\tools\frp_0.31.2_windows_amd64\frpc.exe -c D:\tools\frp_0.31.2_windows_amd64\frpc.ini",0
雙擊frpc.vbs
啟動frp,在Windows進程中可以查看到frpc.exe
,同時在雲服務器netstat -an |grep 700
,發下7002端口處理監聽狀態。
這樣就可以從家中電腦進行遠程桌面到辦公室電腦: 遠程地址 雲服務器ip:7002
,輸入辦公室電腦賬戶密碼即可登錄。
這個做法就是使用的frp的tcp轉發功能,把雲服務器的7002端口流量轉發到辦公電腦的3389端口,這種方法簡單,但是由於把內網的辦公電腦暴露到了外網,不安全。我由於使用此方法遠程家中電腦,由於家里電腦密碼太簡單,導致被電腦被黑,電腦密碼被修改而無法登陸。因此要考慮使用安全的遠程方法。
配置stcp
stcp即securt tcp,安全的tcp
由於frp tcp需要把內網端口暴露到公網,無法保證安全性,當然電腦密碼設置的復雜也可以,但是誰天天去輸入那么復雜的密碼登錄電腦呢,很不方便,因此采用安全的方式進行遠程桌面,frp提供了stcp即secret tcp,安全的tcp,這種方式流量也是經過雲服務器,但是內網端口並不進行暴露,而且經過認證,很安全。
雲服務器配置
#vim /etc/frp/frps.ini文件
[common]
bind_port = 7000
token = 123456 #token配置,客戶端要保持一致,也可以不加
dashboard_port = 7501 #dashboard端口,在瀏覽器輸入 雲服務ip:7501 即可訪問查看
dashboard_user = frp
dashboard_pwd = frp123456 #建議密碼復雜
#啟動
nohup /etc/frp/frps -c /etc/frp/frps.ini &
在瀏覽器輸入 雲服務ip:7501 即可訪問查看儀表盤
日志直接查看/etc/frp/nohup文件即可
公司電腦配置(受控方)
[common]
server_addr = 雲服務器ip
server_port = 7000
token = 123456 # 如果服務端設置了token,那客戶端要保持一致才連得上
#服務名不能相同,
[office_demo_mstsc]
type = stcp #使用stcp
sk = mstsc123 #安全key,訪問端也要保持一致
local_ip = 127.0.0.1
local_port = 3389
#remote_port = 7002 #發現去除了公網監聽 stcp模式以服務名的形式匹配,不再需要remote_port
同理,使用自己編寫的frp.vbs腳本進行啟動
家里電腦配置(控制方)
[common]
server_addr = 雲服務器ip
server_port = 7000
token = 123456 # 如果服務端設置了token,那客戶端要保持一致才連得上
#訪問公司電腦
[office_demo_mstsc_visitor]
type = stcp
# stcp 的訪問者
role = visitor
sk = mstsc123 #保持和受控方frp內的sk相同,否則無法通過
# 要訪問的 stcp 代理的名字
server_name = office_demo_mstsc #受控方的服務名稱
# 綁定本地端口用於訪問 SSH 服務
bind_addr = 127.0.0.1
bind_port = 7555 #本地監聽端口
然后家中電腦 mstsc,輸入127.0.0.1:7555
輸入公司電腦的賬戶密碼即可訪問
這種方式最安全,受控方只能被配置的使用方(自己家里電腦)遠程。但是比較麻煩
同理,如果要使用公司電腦控制家中電腦,在兩邊的frpc.ini配置即可。
參考 https://gofrp.org/docs/examples/