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

frp · 浏览次数 : 18

小编点评

FRP(Fast Reverse Proxy)是一种高性能的内网穿透工具,适用于多种协议,如TCP、UDP、HTTP、HTTPS等。它可以帮助企业将内网服务通过具有公网IP节点的中转暴露到公网,从而实现以下优势: 1. 远程办公和远程桌面:允许员工从外部网络远程接入企业内部的桌面系统,提高灵活性和效率。 2. 便于IT部门进行远程维护和故障排除,无需物理访问设备。 3. 远程服务器管理:使管理员能够通过公网访问位于企业内网的服务器,进行配置、更新和监控。 4. 支持对云服务器的管理,即使它们位于具有私有IP地址的VPC中。 5. 企业服务的公网访问:允许企业内部的Web服务、数据库、API接口等对外界开放。 6. 视频监控和安防:实现对企业内部安装的视频监控系统的远程访问,便于实时监控和安全管理。 7. 物联网(IoT)设备管理:允许远程管理和监控位于企业内部网络中的IoT设备。 8. 开发测试环境的远程访问:开发人员可以远程访问位于企业内网的开发测试服务器,进行代码调试和功能测试。 9. 支持跨地域的开发团队协作,提高开发效率。 10. 企业资源规划(ERP)和CRM系统访问:提供外部用户对内部ERP或CRM系统的安全访问。 11. 云服务扩展:帮助连接私有云和公有云资源,实现更灵活的资源调度和管理。 12. 企业内部通信和协作工具:使企业内部的通信平台如电话会议、视频会议系统可以被外部参与者访问。 实施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的官方文档获取最准确的安装和配置指南。此外,安全是关键,确保只允许信任的来源访问你的内网服务。

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

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

FRP简介 FRP(Fast Reverse Proxy)作为一种高性能的内网穿透工具,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点(云服务器)的中转暴露到公网。 为什么使用 FRP ? 以下是一些常见的企业级应用场景: 远程办公和远程

第140篇:微信小程序的登录流程

好家伙,补补补 顶不住了,跑不掉了,这部分的知识还是要补上 来看看微信小程序登录的完整流程 最左边的一列就是前端负责的部分了 几个关键的参数: code:一个用户登录凭证,就是一个临时的token Appid:appid 是微信账号的唯一标识,这个是固定不变的;如果了解微信公众号开发的就需要注意一下

云图说|云数据库GaussDB如何做到卓越性能

摘要:对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区《【云图说】第275期 云数据库GaussDB如何做到卓越性能》,作者:阅识风云。 对于数据库来说,性能

buildkit ctr 与 k3s的简单学习

摘要 前面一部分学习了 buildkit的简单搭建 也学习会了如果build images的简单处理 但是搭建镜像只是万里长征第一步. 如何进行微服务部署,才是关键的第二步. 公司最近使用基于K3S的K8S发行版 基于此 准备进行下一步的学习 简单结论 Buildkit 能够极大的减少镜像的大小 并

#POWERBI_指标监控(第二部分,周期内下降天数及日期明细)

在指标监控的第一部分文章中,我们已经讲了,如何用DAX去查询一段周期内连续下降或者上升指标。 需要复习的同学可以点击下方链接: https://www.cnblogs.com/simone331/p/17730677.html 根据学友上篇文章的反馈,今天,我们来拓展学 习一下,如何计算一个周期内(

使用C#编写.NET分析器-第二部分

## 译者注 这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断)、IDE、诊断工具中,比如Datadog的APM,Visual Studio的分析器以及Rider和Resh

[转帖]Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)

https://www.cnblogs.com/PatrickLiu/p/8527770.html 一、介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分。话不多说,开始我们今天的讲解。如果要想看第一篇文章,地址如下:http://www.cnbl

从Chat-GPT看爆火技术概念及医疗领域科技与应用场景

本文大致分为两方面内容,第一部分是热门前沿科技概述,主要描述有什么与应用场景。第二部分是医疗领域科技前沿,已发生的和可探索的医疗行业的应用场景。

「硬核」实操如何拥有一个自己的数字人模型

本文大致分为三个章节: 第一部分会介绍常用技术以及简介,以及自己用到构建一个自己虚拟数字人用到的3D引擎和三维软件 第二部分会详细描述生成细节,通过照片建模,创建模型,添加细节,添加表情,优化效果,接入场景,最终效果 第三部分总结本篇内容

[转帖]一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍

https://www.jianshu.com/p/9e150d72ffc9 本文分为两个部分,第一是详细讲解Redis6的--bigkeys选项相关源码是怎样实现的,第二部分为自己对--bigkeys源码的优化项目redis-bigkey-online的介绍。redis-bigkey-online