运维笔记 -- frp实现内网穿透

需求描述:

    公司内部一台式机配置很好,出现闲置,为资源充分利用,搭建应用测试环境,但是应用启动后,局限于无法给外地同事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

 

posted @ 2020-06-01 09:52  hello-Jesson  阅读(894)  评论(0编辑  收藏  举报