使用frp實現內網穿透

jeikerxiao發表於2024-06-05

使用frp實現內網穿透

環境說明:
服務端裝置:阿里雲輕量應用伺服器(假設IP為:123.123.123.123)
服務端系統:ubuntu 20.04
客戶端裝置:樹莓派4B
客戶端系統:樹莓派

前言

引用frp專案的部分官方文件對frp進行一個簡單的介紹:

frp是什麼?

frp 是一個專注於內網穿透的高效能的反向代理應用,支援 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式透過具有公網 IP 節點的中轉暴露到公網。

為什麼使用 frp ?

透過在具有公網 IP 的節點上部署 frp 服務端,可以輕鬆地將內網服務穿透到公網,同時提供諸多專業的功能特性,這包括:

  • 客戶端服務端通訊支援 TCP、KCP 以及 Websocket 等多種協議。
  • 採用 TCP 連線流式複用,在單個連線間承載更多請求,節省連線建立時間。
  • 代理組間的負載均衡。
  • 埠複用,多個服務透過同一個服務端埠暴露。
  • 多個原生支援的客戶端外掛(靜態檔案檢視,HTTP、SOCK5 代理等),便於獨立使用 frp 客戶端完成某些工作。
  • 高度擴充套件性的服務端外掛系統,方便結合自身需求進行功能擴充套件。
  • 服務端和客戶端 UI 頁面。

這一段文件看不懂?沒關係,你只需要知道frp是免費開源的內網穿透工具,這就夠了。下面連結可以瞭解到更多:

frp專案官網:https://gofrp.org/

frp的github專案地址:https://github.com/fatedier/frp

frp的專案文件:https://gofrp.org/zh-cn/docs/

如何使用frp

進行frp內網穿透需要一臺有公網ip的裝置作為轉發的服務端,本篇用阿里雲伺服器來作為服務端,給樹莓派實現內網穿透,以下是詳細步驟:

1.在服務端部署frp

用SSH連線到阿里雲伺服器,下載amd64架構的frp檔案包:

sudo wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz

https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz

然後用tar命令解壓下載的壓縮包:

sudo tar -zxvf frp_0.58.1_linux_amd64.tar.gz

進入解壓後的資料夾,資料夾中包含amd64架構的服務端二進位制檔案和客戶端二進位制檔案兩種。由於阿里雲伺服器作為服務端,所以在這上面我們只用到服務端的二進位制檔案及對應的ini配置檔案,其他的檔案可以選擇刪除掉。

編輯frps.ini檔案:

$ cd frp_0.58.1_linux_amd64

sudo vim frps.toml

frps.toml 檔案內容如下:(建議修改預設埠,如修改成9898)

bindPort = 9898        # 預設埠為7000

其中,bind_port埠修不修改都可以,但是bind_port埠要與客戶端配置檔案的server_port埠相同。修改完之後ctrl +o儲存,ctrl +x退出。

記得要在伺服器防火牆中放行bind_port

設定完畢,就可以啟動frp服務了。

先到阿里雲伺服器控制檯視窗中啟動服務端frp服務,在frp的目錄中執行:

./frps -c ./frps.toml

2.配置frp客戶端

再用SSH連線到樹莓派的控制檯,下載適用於樹莓派的arm64架構的frp檔案包:

sudo wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_arm64.tar.gz

https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_arm64.tar.gz

與上一步類似,解壓下載的壓縮包:

sudo tar -zxvf frp_0.58.1_linux_arm64.tar.gz

同樣的,資料夾中包含了服務端和客戶端的兩種二進位制檔案。樹莓派作為客戶端只用到客戶端的二進位制檔案及對應的ini配置檔案,其他的檔案可以刪除。

編輯其中的frpc.toml檔案:

$ cd frp_0.58.1_linux_arm64/
sudo nano frpc.toml

frpc.ini檔案內容如下:

如伺服器端IP地址為:123.123.123.123

serverAddr = "123.123.123.123"
serverPort = 9898

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

按如下引數說明修改配置檔案:

server_addr:伺服器的IP地址;
server_port:伺服器端的埠,與服務端配置檔案的bind_port埠相同;
local_ip:要在公網訪問的本地裝置的地址,這裡指客戶端本機,填127.0.0.1即可;
local_port:本地裝置要暴露的埠,即理解為提供服務的埠
remote_port:在外網的訪問埠,此埠上的流量會被轉發到本地裝置對應的local_port埠上

還有別忘了在伺服器防火牆上放行remote_port

連線樹莓派的控制檯,啟動客戶端frp服務時同樣在frp目錄中執行:

./frpc -c ./frpc.toml

需要注意的是,一定要先啟動服務端frp,再啟動客戶端frp。

3.測試連線

使用可訪問伺服器的電腦,

$ ssh -o Port=6000 [客戶端使用者名稱]@[伺服器IP]

示例:
如樹莓派的使用者為pi,網際網路外網伺服器的IP地址為:123.123.123.123

$ ssh -o Port=6000 pi@123.123.123.123

正常則可開啟內網樹莓派SSH端。

服務端配置管理後臺

bindPort = 9898

# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 8500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin@123"

如外網伺服器的IP地址為:123.123.123.123

則訪問服務端管理後臺
地址:123.123.123.123:8500
賬號:admin
密碼:admin@123

管理後臺介面如下:

frp管理後臺

配置資訊

frps 服務端配置資訊

https://gofrp.org/zh-cn/docs/reference/server-configures/

frpc 客戶端配置資訊

https://gofrp.org/zh-cn/docs/reference/client-configures/

相關文章