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






