使用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
管理後臺介面如下:
配置資訊
frps 服務端配置資訊
https://gofrp.org/zh-cn/docs/reference/server-configures/
frpc 客戶端配置資訊
https://gofrp.org/zh-cn/docs/reference/client-configures/