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

搭建一個完整的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 //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 //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可參考這篇)