FRP 內網穿透
需求背景
最近小王公司接個對接公眾賬號應用開發的專案,其中有個功能需求是"使用者關注公眾賬號後傳送特定訊息後公眾賬號需要回復一個二維碼海報“。瞭解需求後,便查看了微信介面文件說明,公眾賬號需要配置一個回撥地址做通知。經驗豐富的小王,一看很簡單嘛,便分分鐘對接微信文件實現了功能,部署時需要把程式開發好的服務部署到公司的公網測試伺服器上進行除錯,一來一回半天時間沒有了!咋辦呢? 為了節約小時,有什麼方法能讓回撥地址直接到通知到自己的電腦上進行除錯呢。百度了下,原來方法挺多,什麼natapp啊,花生殼啊,frp ,對比下,netapp,花生殼高階點的功能都要收費, frp 需要自己配置,但是需要一臺公網伺服器穿透,正好公司有一臺閒置的伺服器,於是便搭建了內網穿透進行除錯,很快專案順利完成驗收上線。
拓撲圖
FTP 需要公網伺服器上轉一個服務端應用,在需要穿透的內網機器需要安裝一個客戶端程式,完成配置啟動應用後,即可進行外網訪問,十分方便,搭建過程10分鐘內就能搞定。
介紹
GitHub 地址:https://github.com/fatedier/frp
透過在具有公網 IP 的節點上部署 frp 服務端,可以輕鬆地將內網服務穿透到公網,同時提供諸多專業的功能特性,這包括:
•客戶端服務端通訊支援 TCP、KCP 以及 Websocket 等多種協議。•採用 TCP 連線流式複用,在單個連線間承載更多請求,節省連線建立時間。•代理組間的負載均衡。•埠複用,多個服務透過同一個服務端埠暴露。•多個原生支援的客戶端外掛(靜態檔案檢視,HTTP、SOCK5 代理等),便於獨立使用 frp 客戶端完成某些工作。•高度擴充套件性的服務端外掛系統,方便結合自身需求進行功能擴充套件。•服務端和客戶端 UI 頁面。
服務端安裝
•下載安裝
# 進入伺服器進入進行wget 下載
cd /usr/local
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_arm64.tar.gz
# 解壓
tar -zxvf frp_0.24.1_linux_amd64.tar.gz
#進入目錄刪除客戶端配置
cd frp_0.24.1_linux_amd64/
rm -f frpc
rm -f frpc.ini
•
配置伺服器配置檔案 frps.ini
[common]
#伺服器監聽埠
bind_port = 7000
#對網穿透http埠
vhost_http_port =80
#管理頁面防訪問埠
dashboard_port = 7500
# dashboard's username and password are both optional,if not set, default is admin.
dashboard_user = admin
dashboard_pwd = 123456
•
啟動
./frps -c ./frps.ini
訪問看dashboard, dashboard 中可以看到連線穿透的客戶端資訊。
http://47.104.17.91:7500
客戶端配置
同上伺服器端下載安裝包解壓配置,刪除frps.ini 檔案,只配置客戶端配置 frpc.ini
[common]
#服務端地址
server_addr = 47.104.17.91
#服務端監聽埠,對應伺服器bind_port
server_port = 7000
#應用名稱
[my_web]
# 協議
type = http
#本地應用埠名稱
local_port = 8888
#訪問穿透域名
custom_domains = test.monkeytit.com
•
啟動
./frpc -c ./frpc.ini
•
本地啟動一個測試springboot 服務,埠8888 專案
•
解析域名到咱們的外網伺服器 test.monkeytit.com
•
訪問測試
http://test.monkeytit.com/callback
•
TCP 穿透例子
比如咱們在家想對公司一臺內網伺服器進行管理,可以配置一個遠端穿透的SSH 服務。配置如下
[common]
#服務端地址
server_addr = 47.104.17.91
#服務端監聽埠,對應伺服器bind_port
server_port = 7000
[test_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 222
這樣配置,咱們就可以透過 ssh [email protected][1] -p 222 進行連線內網伺服器進行管理。
•特別注意: 如果使用的是阿里雲或者騰訊雲做穿透,需要把Server的bind_port、vhost_http_port、dashboard_port 埠,配置安全組入站規則中,否則可能訪問不通
References
[1] [email protected]: mailto:[email protected]