背景
創業公司為節約運維成本,往往把應用服務放在阿里云等平臺上。除了對外服務,公司還存在一些對內的測試環境、監控等服務,如果這些內部服務同時也有外網訪問的需求。直接用云平臺構建也蠻省事,但對于初創公司而言,會是一筆不小的成本。本文章將介紹一種更好的方式:基于frp開源工具,構建一個外網可訪問的內網穿透環境。
前提條件
外網可訪問,必須要有一個外網的固定ip。這個ip可以是運營商安裝網絡時給的(一般運營商網絡多是浮動ip,要固定網絡ip需額外掏錢購買),也可以是一臺阿里云服務器(云服務器上有綁定對外的固定ip)。本文以一臺阿里云主機作為內網穿透的跳板接入入口。即構建環境必須滿足以下兩個條件:
- 一臺阿里云主機
- 內網環境至少一臺機器能訪問外網(運營商網絡可以是浮動ip)
方案原理
以阿里云主機作為外網訪問的跳板入口,通過內網穿透工具frp,轉發請求到內網環境,以達到內網環境服務對外開放的目的。其中云主機上需安裝frp內網穿透server端,公司內網環境安裝frp client端,依靠frp server 到 client的連接作為內外網數據交換的通道。
frp地址
frp官方地址:
GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
frp下載地址:
Releases · fatedier/frp · GitHub
安裝
Frp使用Go語言開發,支持linux、window、mac等操作系統。安裝非常方便,選擇平臺下載相應安裝包,解壓即可使用。本文以Linux centos系統為例介紹。
安裝目錄執行以下命令:
wget https://github.com/fatedier/frp/releases/download/v0.31.0/frp_0.31.0_linux_amd64.tar.gz
tar xzvf frp_0.31.0_linux_amd64.tar.gz
mv frp_0.31.0_linux_amd64 frp
cd frp目錄
其中frps前綴是服務端相關文件,frpc前綴為客戶端相關文件。
服務端配置
編輯服務端frps.ini配置文件
vi frps.ini
bind_port:frps服務端監聽端口,用于frpc客戶端建立連接時使用。
vhost_http_port:http訪問監聽端口,可根據需要自行調整其他端口。
vhost_https_port:https訪問監聽端口,可根據需要自行調整其他端口。
subdomain_host:子域名地址定義。用于服務端請求域名地址轉發,如***.com
dashboard:一個簡單的frp服務監控面板設置。
注意:以上配置端口,在云主機上需開放對應端口訪問權限,否則服務將無法正常訪問。
完成配置后,啟動frps服務
nohup ./frps -c frps.ini &
客戶端配置
編輯frpc.ini客戶端配置
server_addr:frps服務端ip地址,對應云主機外網訪問ip地址。
server_port:對應frps服務端監聽端口,這里7000與上一步配置端口對應。
[web]:轉發規則配置分組。
type:協議類型。http或https等。
local_port:請求轉發端口。
subdomain:請求轉發子域名域名地址。frps.ini文件subdomain_host定義了***.com子域名,這里實際對應test.***.com格式的域名請求地址。
注意:以上配置端口,需開放防火墻對應端口限制,否則訪問可能失敗。
完成配置后,啟動frpc服務
nohup ./frpc -c frpc.ini &
小結
完成以上步驟,內網服務器上啟動相關服務。瀏覽器訪問test.***.com域名服務,即可在外網訪問內部服務。
本文介紹了內網穿透工具frp的使用背景,構建方式。通過簡單的frp服務端和客戶端配置,實現了內網服務的外網域名訪問。實際frp的實現遠遠不止http/https域名的穿透訪問,它也支持ssh、tcp、udp等路由功能,有興趣的小伙伴可以自行參考官網介紹。這里僅做拋磚引玉,歡迎一起深入討論。