使用frp進行內網穿透,實現ssh遠端訪問Linux伺服器

Mengo發表於2021-12-12

搭建一個完整的frp服務鏈需要:

  1. VPS一臺(也可以是具有公網IP的實體機)

  2. 訪問目標裝置(就是你最終要訪問的裝置)

  3. 簡單的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可參考這篇)

相關文章