• 第二部分:关键技术领域的开源实践【内网穿透FRP】


    FRP简介

    FRP(Fast Reverse Proxy)作为一种高性能的内网穿透工具,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点(云服务器)的中转暴露到公网。

    为什么使用 FRP ?

    以下是一些常见的企业级应用场景:

    1. 远程办公和远程桌面

      • 允许员工从外部网络远程接入企业内部的桌面系统进行工作,提高灵活性和效率,尤其是在远程工作成为常态的情况下。
      • 便于IT部门进行远程维护和故障排除,无需物理访问设备。
    2. 远程服务器管理

      • 使管理员能够通过公网访问位于企业内网的服务器,进行配置、更新和监控。
      • 支持对云服务器的管理,即使它们位于具有私有IP地址的VPC(Virtual Private Cloud)中。
    3. 企业服务的公网访问

      • 允许企业内部的Web服务、数据库、API接口等对外界开放,而无需企业拥有固定的公网IP。
      • 使得客户、合作伙伴或外部应用程序可以访问这些内部服务,促进业务合作和数据交换。
    4. 视频监控和安防

      • 实现对企业内部安装的视频监控系统的远程访问,便于实时监控和安全管理。
      • 对于分布式的公司,总部可以远程监控各个分部的安保情况。
    5. 物联网(IoT)设备管理

      • 允许远程管理和监控位于企业内部网络中的IoT设备,如智能传感器、自动化设备等。
    6. 开发测试环境的远程访问

      • 开发人员可以远程访问位于企业内网的开发测试服务器,进行代码调试和功能测试。
      • 支持跨地域的开发团队协作,提高开发效率。
    7. 企业资源规划(ERP)和CRM系统访问

      • 提供外部用户对内部ERP或CRM系统的安全访问,例如供应商或销售团队成员。
    8. 云服务扩展

      • 当企业使用混合云架构时,FRP可以帮助连接私有云和公有云资源,实现更灵活的资源调度和管理。
    9. 企业内部通信和协作工具

      • 使企业内部的通信平台如电话会议、视频会议系统可以被外部参与者访问。

    通过使用FRP,企业能够在不改变现有网络结构的情况下,提升网络的可访问性和灵活性,同时保持较高的安全性标准。然而,实施FRP时也应考虑网络安全策略,确保只有授权用户可以访问特定的服务。
    下面重点讲解FRP在企业中的实际应用,分别从服务端和客户端阐述:

    FRP开源实践应用【企业案例】

    在Linux系统上安装FRP的基本步骤:

    步骤1:下载FRP

    首先,你需要下载适合你操作系统版本的FRP二进制文件。假设你正在使用一个基于Linux的系统,你可以使用wgetcurl来下载。如果你的系统上还没有wget,需要先安装:

    sudo apt-get update
    sudo apt-get install wget
    

    对于基于RPM的系统(如CentOS),可以使用:

    sudo yum install wget
    

    然后下载最新版本的FRP(以2024年为例,目前是v0.59.1,具体版本号可能不同):

    wget https://github.com/fatedier/frp/releases/download/v0.X.Y/frp_0.X.Y_linux_amd64.tar.gz
    

    v0.X.Y替换为实际的版本号。

    步骤2:解压FRP

    使用tar命令解压下载的文件:

    tar -zxvf frp_0.59.0_linux_amd64.tar.gz
    

    步骤3:移动文件

    将解压后的文件移动到一个合适的目录,比如/opt/frp_0.59.0_linux_amd64
    解压目录如下:

    image.png

    步骤4:创建配置文件

    FRP使用.toml格式的配置文件。这些文件需要根据你的需求进行适当的配置。

    服务端配置(编辑frps.toml文件)

    服务端一般放置在有公网IP的服务器上,通常为云服务器(腾讯,华为、阿里云服务器)

    bindPort = 7000
    vhostHTTPPort = 8080
    #vhostHTTPSPort = 443
    auth.method = "token"
    auth.token = "token123456_abcdefghijklmn=="
    webServer.port = 7500
    webServer.user = "admin"
    webServer.password = "admin.com"
    webServer.pprofEnable = false
    
    客户端配置(编辑frpc.toml文件)

    下面是tcp ,http的配置方法,特别要注意云服务器,例如阿里云要开放remotePort端口
    内网服务器:通常企业的开发服务器或测试服务器

    serverAddr = "81.71.44.34"
    serverPort = 7000
    auth.method = "token"
    auth.token = "token123456_abcdefghijklmn=="
    webServer.addr = "0.0.0.0"
    webServer.port = 7500
    webServer.user = "admin"
    webServer.password = "admin.com"
    webServer.pprofEnable = false
    
    [[proxies]]
    name = "ssh"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 2212
    
    [[proxies]]
    name = "mysql"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 3309
    remotePort = 33090
    
    [[proxies]]
    name = "redis"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 6379
    remotePort = 33012
    
    
    [[proxies]]
    name = "git"
    type = "http"
    localIP = "192.168.0.100"
    localPort = 82
    customDomains = ["git.***.com"]
    
    [[proxies]]
    name = "jenkins"
    type = "http"
    localIP = "192.168.0.100"
    localPort = 8088
    customDomains = ["jenkins.***.com"]
    # tls
    #transport.tls.certFile = "/etc/frp/ssl/client.crt"
    #transport.tls.keyFile = "/etc/frp/ssl/client.key"
    #transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"
    
    

    步骤5:启动服务

    使用nohup或者screen等工具来后台运行FRP服务,或者你可以创建一个systemd服务单元文件来管理服务。例如,创建一个名为frps.service的文件在/etc/systemd/system目录下,并在其中定义服务,实现开机自启。
    内容如下:

    [Unit]
    Description=Frp Server
    After=syslog.target network.target
    Wants=network.target
    
    [Service]
    Type=simple
    ExecStart=/opt/frp_0.59.0_linux_amd64/frps -c /opt/frp_0.59.0_linux_amd64/frps.toml
    ExecStop=/usr/bin/killall frps
    RestartSec=1min
    KillMode=control-group
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    步骤6:配置防火墙

    如果你的服务器有防火墙,确保打开FRP所需的端口,通常是70007500

    #内网服务器开放端口方法
    firewall-cmd --add-port=3309/tcp --zone=public  --permanent
    #远程云服务器开放端口
    ***例如阿里云要开放remotePort端口:安全组,开放端口即可***
    

    image.png

    如果使用安全证书https,最好安装一个nginx代理

    新建一个/usr/local/openresty/nginx/conf/apps/frp.conf,内容如下:

     location / {
        client_max_body_size    1000m;
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_read_timeout 300;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
    }
    

    购买云服务器厂商,申请免费3个月的数字证书,放置/usr/local/openresty/nginx/cert目录下
    修改nginx.conf文件,加入如下内容

    server {
            listen 443 ssl;
            server_name www.***.com;
            root html;
            index swagger-ui.html index.html index.htm;
            ssl_certificate      ../cert/www.***.com.pem;
            ssl_certificate_key  ../cert/www.***.com.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            proxy_intercept_errors on;
            charset utf-8;
            #frp穿透到内网
            include apps/frp.conf;
        }
    

    步骤7:测试连接

    在浏览器地址栏输入:https://www.***.com 进行测试

    确保一切设置无误后,从客户端尝试连接到服务端,检查是否可以通过公网访问到内网服务。
    请注意,上述步骤是基于Linux系统的一般指导。具体版本的FRP可能需要不同的配置选项,因此请参考FRP的官方文档获取最准确的安装和配置指南。此外,安全是关键,确保只允许信任的来源访问你的内网服务。

  • 相关阅读:
    「PAT甲级真题解析」Advanced Level 1007 Maximum Subsequence Sum
    VEX —— Attribute type metadata
    深度学习理论知识入门【EM算法、VAE算法、GAN算法】和【RBM算法、MCMC算法、HMC算法】
    Dubbo简介
    安科瑞电能计量管理系统
    黑马JVM总结(三十一)
    Anaconda和Python的区别
    iOS——Autoreleasepool底层原理
    cvpr24写作模板pdfLaTex编译器注意点小结
    字符串的扩展
  • 原文地址:https://www.cnblogs.com/budaos/p/18301225