创业公司为节约运维成本,往往把应用服务放在阿里云等平台上。除了对外服务,公司还存在一些对内的测试环境、监控等服务,如果这些内部服务同时也有外网访问的需求。直接用云平台构建也蛮省事,但对于初创公司而言,会是一笔不小的成本。本文章将介绍一种更好的方式:基于frp开源工具,构建一个外网可访问的内网穿透环境。
外网可访问,必须要有一个外网的固定ip。这个ip可以是运营商安装网络时给的(一般运营商网络多是浮动ip,要固定网络ip需额外掏钱购买),也可以是一台阿里云服务器(云服务器上有绑定对外的固定ip)。本文以一台阿里云主机作为内网穿透的跳板接入入口。即构建环境必须满足以下两个条件:
以阿里云主机作为外网访问的跳板入口,通过内网穿透工具frp,转发请求到内网环境,以达到内网环境服务对外开放的目的。其中云主机上需安装frp内网穿透server端,公司内网环境安装frp client端,依靠frp server 到 client的连接作为内外网数据交换的通道。
frp官方地址:
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等路由功能,有兴趣的小伙伴可以自行参考官网介绍。这里仅做抛砖引玉,欢迎一起深入讨论。