搭建一個完整的frp服務鏈需要:
-
VPS一臺(也可以是具有公網IP的實體機)
-
訪問目標裝置(就是你最終要訪問的裝置)
-
簡單的Linux基礎(如果基於Linux配置的話)
我這裡使用了騰訊雲伺服器作為服務端(Ubuntu Server 20.04 LTS)、本地Linux虛擬機器作為要訪問的客戶端(Ubuntu 20.04 LTS)和本地Xshell(用於遠端連線客戶端)進行測試。
最後是想把實驗室的電腦進行內網穿透實現 ssh 遠端訪問。
流程很簡單,服務端和客戶端都下載 frp 配置檔案,分別修改配置(地址、埠對映),然後啟動執行即可。本文基於 Linux 配置,macOS 和 Windows 流程一致,最多是命令可能有點區別。
服務端配置
下載 frp 的安裝包(GitHub連線在此),注意服務端和客戶端要同一版本。我這裡是64位Linux,最新版是0.38.0,根據需要選擇即可,速度太慢自己想辦法,可以考慮本地下了通過ftp傳到伺服器。
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
解壓,資料夾改名為frp,方便使用。騰訊雲可能把這玩意當作木馬,去控制檯信任即可。
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
cp -r frp_0.38.0_linux_amd64 frp
cd frp
看一下資料夾下的內容:
ubuntu@VM-0-10-ubuntu:~/frp$ ls -a
. .. frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
我們只需要關注如下幾個檔案
-
frps
-
frps.ini
-
frpc
-
frpc.ini
前兩個檔案(s結尾代表server)分別是服務端程式和服務端配置檔案,後兩個檔案(c結尾代表client)分別是客戶端程式和客戶端配置檔案。因為我們正在配置服務端,可以刪除客戶端的兩個檔案(刪不刪無所謂),然後修改frps.ini檔案。
rm frpc
rm frpc.ini
vim frps.ini
frps.ini
檔案內容如下:
[common]
bind_port = 7000
bind_port
表示用於客戶端和服務端連線的埠,預設繫結 7000 埠,雲伺服器注意開啟相應埠。其實還有其他引數可選配置實現其他功能,這裡只實現ssh遠端訪問,不作討論。
編輯完成後即可儲存,執行服務端應用:
./frps -c frps.ini
如下則成功執行:
2021/12/12 00:32:59 [I] [root.go:200] frps uses config file: frps.ini
2021/12/12 00:32:59 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000
2021/12/12 00:32:59 [I] [root.go:209] frps started successfully
此時的服務端僅執行在前臺,如果 Ctrl+C
停止或者關閉 SSH 視窗後,frps 均會停止執行,因而我們使用 nohup 命令將其執行在後臺。nohup命令可以讓你的shell命令忽略SIGHUP訊號,即可以使之脫離終端執行;“&”可以讓你的命令在後臺執行。
nohup ./frps -c frps.ini &
此時可先使用Ctrl+C關閉nohup,frps依然會在後臺執行,使用jobs命令檢視後臺執行的程式jobs
在結果中我們可以看到frps正在後臺正常執行:
[1]+ Running nohup ./frps -c frps.ini &
客戶端配置
以同樣的方式下載 frp
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
cp -r frp_0.38.0_linux_amd64 frp
cd frp
vim frpc.ini
frpc.ini
檔案內容如下:
[common]
server_addr = 127.0.0.1
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
common
欄位下的三項即為服務端的設定。
-
server_addr
為服務端IP地址,自行更改。 -
server_port
為伺服器埠,填入你設定的埠號即可,如果未改變就是7000。
[xxx]
表示一個規則名稱,自己定義,便於查詢即可。這裡用於 ssh 所以命名為 [ssh] 了。
-
type
連線型別,預設為 tcp,如有需要請自行查詢 frp 手冊。 -
local_ip
本地 IP -
local_port
用於 ssh 的埠號,預設 22 -
remote_port
對映的服務端埠,訪問該埠時預設轉發到客戶端的 22 埠,不同的客戶端設定不同的埠號。
配置好後可以使用同樣的方法後臺執行客戶端程式:
nohup ./frpc -c frpc.ini &
測試
啟動完成後就可以通過 ssh 連線到內網伺服器了,同時也可以用 sftp 傳輸檔案。
ssh -p 6000 user@host
參考
[1] 使用 frp 進行伺服器內網穿透
[2] 使用frp進行內網穿透
[3] 如何使用 frp 實現內網穿透
[4] win10下用frp內網穿透實現ssh遠端連線linux伺服器(Windows可參考這篇)