背景說明
這兩天由於疫情的原因,很多公司都得在家遠程上班,然后像我們這類小公司有沒有 VPN 這些東西。傳統的遠程回公司只能依靠 Teamviewer 或者向日葵等工具。但是由於最近用戶量很多,可能會造成卡頓,本着能不花錢就不花錢的原則,就得找一個折中的方案。既不用收費,也不會像花生殼,nat123 這種從第三方別人的服務器進行數據傳輸。於是便找到了本次的主角:FRP。
項目說明
該項目的開源地址:
在文檔中有這樣一個架構圖:

簡單的說明一下:
就是我們需要一個中間機器用於運行 FRP 的 Server(服務端),而且該機器需要有公網 IP。
在我們后端的電腦上門安裝 FRP 的 Client(客戶端),可以在這上面運行 tcp 或者 http 等服務。
用戶 User 可以通過訪問官網 IP 的機器映射到后端 FRP 的機器,進行服務訪問。
當然,我們本次的需求肯定不是這個,這個只是用於搞搞什么 web 訪問,遠程連接等操作,我們這一次使用的是這個的升級版,架構如下:

說明:
1. 左邊為用戶在家的電腦,右邊為用戶在辦公室的電腦。
2. 公網 IP 的服務器為公司一台雲上面的服務器,需要運行 FRP Server(服務端)。
3. 用戶在家里的電腦和公司的電腦上面需要運行 FRP Client(客戶端)。
安裝配置
1. 下載服務:
我這里以 0.29 版本為例!
2. 在具有公網 IP 的機器上面安裝配置 Server 端,我這個是 CentOS 7 的,Windows 也是同理,只是需要下載對應的系統版本:frp_0.29.0_linux_amd64.tar.gz
# 解壓 tar -zxf frp_0.29.0_linux_amd64.tar.gz mv frp_0.29.0_linux_amd64 /opt/FRP-Server # 刪除不需要的配置 cd /opt/FRP-Server rm -rf frpc* frps_full.ini frps.ini LICENSE systemd
mkdir logs
添加配置:
vim frps.ini
內容如下:
[common] # 配置IP端口 bind_addr = 這台機器的公網IP bind_port = 10000 bind_udp_port = 10001 # 配置管理頁面的端口,用戶密碼 dashboard_port = 10002 dashboard_user = admin dashboard_pwd = admin # 配置日志保存位置和等級 log_file = ./logs/frps.log log_level = info log_max_days = 3 # 客戶端連接的token,最好是隨機生成的 token = H99h8HHXSHXSSSCCC
啟動服務:
./frps -c frps.ini &
后台運行,可以通過查看端口看到服務!
3. 在公司的電腦上面安裝啟動 FRP Client 端,由於是 Windows,所以需要下載 Windows 的包:frp_0.29.0_windows_amd64.zip
為了便於區分,解壓后將文件夾重命名為:FRP-remote
同理刪除沒用的文件,只留下 frpc.exe 和 frpc.ini 即可:
其中 frpc.ini 的內容如下:
[common] server_addr = 公網服務器的公網IP地址 server_port = 10000 # 公網服務器 FRP Server 配置文件里面的 token token = H99h8HHXSHXSSSCCC # 名字隨意,但是待會兒家里電腦必須和這個一致 [dylan_p2p_rdp] type = stcp # 值隨意,但是待會兒家里電腦必須和這個一致 sk = dylan123131223131 local_ip = 127.0.0.1 # 由於是遠程桌面,所以是 3389 端口 local_port = 3389
啟動方法,進入文件夾,在地址欄輸入 cmd,打開命令行:

命令行執行命令:
frpc.exe -c frpc.ini
效果如下類似:

注意:該窗口由於沒用后台運行,所以不能關掉!
顯示 Success 啟動完成以后,在公司的電腦開啟遠程桌面:

開啟遠程:

至此,公司的電腦配置完成!
4. 家里的電腦配置:
家里的電腦也是 Windows,所以一樣使用安裝包:frp_0.29.0_windows_amd64.zip
除了配置文件不一樣,其他配置和公司電腦一樣,但是為了便於區分,我們將其解壓改名為 FRP-vistor,frpc.ini 內容如下:
[common] # 公網服務器的IP和端口和token server_addr = 公網服務器的公網IP地址 server_port = 10000 token = H99h8HHXSHXSSSCCC # 自定義的名字 [dyaln_RDP_visitor] type = stcp role = visitor # 這個就是 RPC-remote 中配置的,必須一致 server_name = dylan_p2p_rdp # 這個就是 RPC-remote 中配置的,必須一致 sk = dylan123131223131 bind_addr = 127.0.0.1 # 這個本機遠程端口,自己隨便定義,遠程的時候使用 bind_port = 53389
然后在命令行一樣的方式啟動即可,效果如下:

5. 遠程測試:
輸入家里電腦 配置文件中的 IP 和端口即可,然后驗證遠程電腦的用戶密碼:

效果如圖:

遠程成功!
特別說明
1. 如果公網服務器帶寬有限卡頓,可以將兩個 FRP Client 配置中的協議由 stcp 換成 xtcp,但是這種穿透方式不一定能夠成功。在文檔中有這樣一個說明:

2. windows 10 遠程可能出現默認輸入法無法使用輸入中文的問題,公司電腦安裝搜狗輸入法就解決。
3. 服務自帶了儀表盤,之前我們也配置過,可以通過公網 IP + 儀表盤端口登錄訪問:

至此,基本的遠程辦公功能就實現了!其他復雜功能可以看官方文檔和默認自帶的 full 配置,注釋都很詳細。
最后也感謝這位老哥的開源!!!
