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]