• frp远程运维技术


           1、背景

           为了解决因电力负荷供应紧张时的用电问题,电网针对商业楼宇、企业园区、学校等场所建设了很多了边缘设备、能效控制器以及负控终端,系统基本采用云-管-边-端或者总站-子站—单元的架构设计,边端通过量产工控机实现本地化监测、控制以及边缘计算的应用。但是随着边端设备资产日益增多,服务的更新以及异常处理的工作量也逐步增大,而边端在组网方面基本都是局域网或者4G网络,导致IP都是局域网IP或者4G动态IP,只能单向连接互联网,互联网到局域网是无法到达的,这就导致需要人工的方式升级边端服务,极大增加了项目运维成本和出差的风险,项目需要打破传统的运维方式。

          2、 方案

           远程运维与现在流行的DevOps以及AiOps不同,DevOps以研发的视角实现研发、运维一体化,而AiOps以客户的视角通过算法模型让故障未卜先知,但是两者在地域线上,都没有较大提及。换句话说,DevOps和AiOps都需要在地域线上做出更新实现远程运维,远程访问初步设想了几个方案:

    • 外部采购相关产品
    • frp内网穿透技术
    • lcx端口转发技术
    • mqq技术,可以上送数据,可以远程发包,但是不能远程访问系统
    • 自研发内网穿透技术,tcp连接,做一个tcp通道。边端的网络设备TCP连接到云端, 云端把客户端请求转发到现场的网络设备,类似一个中转的功能,网络设备去主动连接云服务器,然后保持连接就可以。

           最后使用了frp内网穿透技术实现,这里也只谈这一个技术点,通过4G设备与固定公网IP,利用frp技术打通网络渠道。frp是一个基于P2P技术的网络穿透应用,也可以称为一款反向代理应用,通过frp技术打通互联网到局域网的技术问题,实现内网穿透,让局域网的IP能够通过互联网访问到,利用固定的公网IP进行端口转发,实现局域网的业务穿透到外网访问,如下图所示,局域网端口6666,经过中转服务器(公网IP)进行36601代理之后,用户层的终端就可以通过36601端口进行访问局域网系统。

           3、frp介绍      

           frp的官方定义frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

           通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

    • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。

    • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。

    • 代理组间的负载均衡。

    • 端口复用,多个服务通过同一个服务端端口暴露。

    • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。

    • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。

    • 服务端和客户端 UI 页面。

           下载界面:https://github.com/fatedier/frp/releases
           源码界面:https://github.com/fatedier/frp

    frp tcp连接包含三种连接模式:tcp、stcp、xtcp

           4、frp使用            

           frp是能够代理的协议很多,我这里只介绍一个tcp和一个监控界面,frp在部署时分为服务端frps和客户端frpc,是一个一对多的部署,frpc部署在局域网,frps部署在具有公网IP的服务器上。

                  4.1、服务端frps

           部署时,先部署frps,因为frpc的启动需要连接frps

    1)确定版本

    如果是linux系统,首先查看系统的版本

    arch

    查看结果,如果是“X86_64“即可选择”amd64”,
    运行如下命令,根据架构不同,选择相应版本并进行下载
    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
    wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
    wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.37.1_linux_amd64.tar.gz

    2)安装
    解压压缩包

    tar -zxvf frp_0.22.0_linux_amd64.tar.gz

    文件夹改个名,方便使用

    cp -r frp_0.22.0_linux_amd64 frp

    把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录

    cd frp

    查看一下文件,是否包含frpc 、frpc.ini 、 frps 、 frps.ini

    ls -a

    因为我们正在配置服务端,可以删除客户端的两个文件
    rm frpc
    rm frpc.ini
    3)配置文件

    进入frp目录,执行vim frps.ini,进入配置文件编辑页面

    1. [common]
    2. bind_port = 7000
    3. dashboard_port = 7500
    4. token = xxxxxxxxx
    5. dashboard_user = admin
    6. dashboard_pwd = admin
    7. vhost_http_port = 38080
    8. vhost_https_port = 3443


    “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
    “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
    “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
    “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
    “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。

    4)启动

    ./frps -c frps.ini

    或者挂载一下

    nohup ./frps  -c frps.ini  >"nohupLogs/nohup_frps.log" 2>&1 &

    此时访问 111.111.111.111:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面,这就表示成功了

                   4.2、客户端frpc

    1)确定版本

    如果是linux系统,首先查看系统的版本

    arch

    查看结果,如果是“X86_64“即可选择”amd64”,
    运行如下命令,根据架构不同,选择相应版本并进行下载
    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
    wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
    wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.37.1_linux_amd64.tar.gz

    2)安装
    解压压缩包

    tar -zxvf frp_0.22.0_linux_amd64.tar.gz

    文件夹改个名,方便使用

    cp -r frp_0.22.0_linux_amd64 frp

    把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录

    cd frp

    查看一下文件,是否包含frpc 、frpc.ini 、 frps 、 frps.ini

    ls -a

    因为我们正在配置服务端,可以删除客户端的两个文件
    rm frps
    rm frps.ini
    3)配置文件

    进入frp目录,执行vim frpc.ini,进入配置文件编辑页面,[localnginx]表示需要代理局域网的nginx 

    1. [common]
    2. server_addr = 111.111.111.111
    3. server_port = 7000
    4. token = xxxxxxxx
    5. [localnginx]
    6. type = tcp
    7. local_ip = 127.0.0.1
    8. local_port = 7777
    9. remote_port = 7111
    10. [busiweb]
    11. type = tcp
    12. local_ip = 127.0.0.1
    13. local_port = 8188
    14. remote_port = 7222
    15. [RemoteOp]
    16. type = tcp
    17. local_ip = 127.0.0.1
    18. local_port = 3389
    19. remote_port = 33389

        # common 同frps.ini
        # server_addr :云服务器的ip地址
        # server_port :绑定的端口,需要云服务器和内网服务器都开启这个端口
        # token : 此处填写需要的token,frps.ini 中没有填写则此处不填写 填写示例:


        # myPort1 此项代理的名称,名字随便写,比如:[common]  [busiweb] [RemoteOp]
        # type = 代理的类型,一般为tcp
        # local_ip = 本地的ip
        # local_port = 被代理的端口
        # remote_port = 云服务器端口 填写示例:

     4)启动

    ./frpc -c frpc.ini

    或者挂载一下

    nohup ./frpc  -c frpc.ini  >"nohupLogs/nohup_frpc.log" 2>&1 &

    启动成功之后,在浏览器中输入公网地址的 http://111.111.111.111:7111/就可以访问到局域网的nginx地址了

                   4.3、监控界面

    frp自带监控界面,在frps和frpc都启动成功之后,访问 http://公网IP:7500  

     输入frps.ini中配置的账号(dashboard_user)和密码(dashboard_pwd),打开tcp就可以看到配置的局域网信息了

  • 相关阅读:
    在SpringBoot中使用EhCache缓存
    设备的分配与回收(考虑因素,数据结构,分配步骤)
    vue3中的组件通信
    Vulnhub系列靶机---Raven2
    数据链路层-点对点PPP(point-to-point protocal)
    golang sync.Map 在函数传参时默认是值传递
    stm32cubemx图形化配置之 FreeRTOS选项中CMSIS_V1和CMSIS_V2的区别
    yum提示Another app is currently holding the yum lock; waiting for it to exit...
    如何获取微信的版本号详解【附完整源码】
    深入Redis的切片
  • 原文地址:https://blog.csdn.net/myfmyfmyfmyf/article/details/126717374