需求描述:
公司内部一台式机配置很好,出现闲置,为资源充分利用,搭建应用测试环境,但是应用启动后,局限于无法给外地同事or客户访问;需要让内网服务可以提供给外部互联网访问;
主流实现方式,花生壳,Ngrok,natapp,frp。。。
大致分商业收费和免费开源,各有优势,商业收费的相对稳定。有商业需求的小伙伴,百度下关键字。
方案选择:
这里选择免费了开源的frp,
frp主页: http://frp.xxorg.com/
frp项目地址:https://github.com/fatedier/frp
实现原理:
开始配置「两种场景」:
1. 准备工作
(1)一台可以外网访问的服务器(例:云服务器,假设IP是:172.100.100.188)--必须
(2)公司内网台式机 --必须
(3)如果需要配置多个应用,准备若干域名 --非必须
2. 下载源代码: https://github.com/fatedier/frp/releases
根据自己实际环境,下载对应程序版本,这里阿里云服务器操作系统用的Ubuntu16.04 ,公司台式机操作系统CentOS7, 注意frp虽然分“服务端”和"客户端",但是程序代码是不区分的,也就是一套代码里包含了"服务端"和"客户端",这里选择下载的版本是:frp_0.33.0_linux_amd64.tar.gz
程序解压后,目录结构,显示如下文件:
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE nohup.out systemd
frpc_full.ini frpc.ini 是客户端(内网服务器)需要修改的配置文件
frps_full.ini frps.ini 是服务端(云服务器)需要修改的配置文件
frpc_full.ini frps_full.ini是比较详细的客户端&服务端配置文件,一般场景的使用,我们不需要修改这两个文件,
只要分别修改两个最小配置文件:frpc.ini frps.ini 就能满足日常的需求。
3. 场景1配置:基本的外网IP+端口访问
a. 配置服务端(阿里云服务器)
将下载的文件上传到云服务器,解压后进入程序目录,
修改服务端配置文件:frps_full.ini
默认配置:
[common] bind_port = 7000
不用修改,启动frp服务端程序:
nohup ./frps -c ./frps.ini 2>&1 &
b. 配置客户端(公司内网台式机)
在修改frp客户端配置前,
先把内网已经部署好的测试应用系统服务启动起来,假设我们的系统应用服务访问方式是:127.0.0.1:8080
然后将frp程序包上传到内网台式机,解压,修改客户端配置文件frpc.ini。
[common] server_addr = 172.100.100.188 ---服务端IP,即:你的云服务器IP server_port = 7000 ---对应frp服务端配置 [test] type = tcp ---注意类型要写tcp local_ip = 127.0.0.1 ---内网服务IP local_port = 8080 ---本地端口 remote_port = 8080 ---远程访问端口
type即穿透类型一般分为HTTP,HTTPS及TCP三种,其中HTTP和HTTPS是作为Web网站穿透服务,而TCP一般用于其他服务连接使用,比如Linux服务器的SSH登陆,Windows的3389远程桌面,等无需使用浏览器访问的场景.
启动frp客户端服务:
nohup ./frpc -c ./frpc.ini 2>&1 &
测试验证一把,是否配置成功!
打开浏览器,地址栏输入云服务器地址+IP,172.100.100.188:8080,是否能访问到我们的内网系统。
4. 场景2配置: 多域名映射内网多个应用
上边我们已经测试了,外网IP+端口 通过tcp协议访问内网系统的配置;
接下来,配置下多个域名映射内网多个应用系统的场景。
操作步骤不变,还是先配置服务端,再修改客户端配置文件。
准备工作:
1. 将多个二级域名解析到我们的云服务器地址(172.100.100.188)
例如: app1.beijing.com 解析到: 172.100.100.188 app2.beijing.com 解析到:172.100.100.188
2. 公司台式机上,部署多个系统,并将程序启动,这里以两个应用系统为例,假设系统内网访问地址为:
---应用系统-app1-访问地址: 127.0.0.1:8088 ---应用系统-app2-访问地址: 127.0.0.1:8099
3. 修改frp服务端(云服务器)配置文件: frps.ini
[common] bind_port = 7000 vhost_http_port = 6001 ---原先配置不变,增加主机映射端口6001
启动frp server端服务
nohup ./frps -c ./frps.ini 2>&1 &
4. 修改frp客户端(内网服务器)配置文件: frpc.ini
[common] server_addr = 172.100.100.188 server_port = 7000 [app1] type = http remote_port = 6001 local_port = 8088 custom_domains = app1.beijing.com [app2] type = http remote_port = 6001 local_port = 8099 custom_domains = app2.beijing.com
启动frp客户端服务:
nohup ./frpc -c ./frpc.ini 2>&1 &
验证:
浏览器地址栏,分别输入:app1.beijing.com:6001 和 app2.beijing.com:6001 看能否访问子系统。
注意,上边端口都是写6001。
5. 注意事项:
云服务器开放相应的端口,如上边例子中的:7000和6001
内网服务器,要关闭防火墙或开放相应的端口对外访问
OK,到这里frp基本的配置使用已完成,小伙伴们可以参考,这里只是介绍了两种常见的使用场景,其他更多的灵活配置,可以参考下边的几个链接。
参考:
官方配置教程:https://github.com/fatedier/frp/blob/master/README_zh.md https://www.appinn.com/frp/ https://www.jianshu.com/p/6ae5c771ba89 https://blog.csdn.net/u013144287/article/details/78589643/ https://www.jianshu.com/p/0342d083e17b https://github.com/fatedier/frp/issues/287 https://github.com/fatedier/frp/issues/1189 https://blog.csdn.net/luohongtuCSDN/article/details/88966774 https://www.jianshu.com/p/00c79df1aaf0 https://cloud.tencent.com/developer/article/1437854