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

解压目录如下:

步骤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端口:安全组,开放端口即可***

如果使用安全证书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】的更多相关文章

  1. 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区

    1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...

  2. 聊聊第一个开源项目(内网穿透) - CProxy

    文章首发:聊聊第一个开源项目 - CProxy 作者:会玩code 初衷 最近在学C++,想写个项目练练手.对网络比较感兴趣,之前使用过ngrok(GO版本的内网穿透项目),看了部分源码,想把自己的一 ...

  3. [网络]NAT与内网穿透技术初探【待续】

    1 局域网网段IP 要真正了解NAT就必须先了解现在IPv4地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址.RFC 1918 为私有网 ...

  4. B2C商城关键技术点总结(站内搜索、定时任务)

    1.站内搜索 1.1Lucene.Net建立信息索引 string indexPath = @"E:\xxx\xxx";//索引保存路径 FSDirectory directory ...

  5. 在线公开课 | 5G时代的视频云服务关键技术与实践

    5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...

  6. Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术

    Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术 Excel催化剂   2019.01.12 14:10* 字数 2948 阅读 41评论 0喜欢 0 编辑文章 在Excel催化剂的几大 ...

  7. 基于软件开源实践(FLOSS)论共产主义的可实现性

    好久没发博客,来个狠的,我不信挨踢界有人比我更蛋疼来研究这个. 在马克思提出共产主义100多百年后,软件开发领域中出现了一种特别的生产方式:开源(FLOSS:Free/Libre and Open S ...

  8. Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)

    作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 Go 开发关键技术指南文章目录: 为什么你要选择 Go? Go 面向失败编程 带着服务器编程金刚经走进 2020 年 敢问路在何方? Go 开发指南大图 ...

  9. 互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践

    本文从业务目标角度出发,确定了开源+自建模式搭建 Qunar 研发工具链整体生态:通过 APPCODE 打通工具链,流程规范化自动化:多种手段+发布门禁助力质量提升:建立应用画像确定运维最小单元,可发 ...

  10. .NET领域驱动设计—实践(穿过迷雾走向光明)

    阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...

随机推荐

  1. 腾讯、阿里、B站最新面经汇总,有的妥妥的凉经。

    除了BAT(没错我说的B是B站的B),还有网易.希音科技.美柚等中小厂的最新面经. 这次投稿的同学行文幽默风趣,处处透漏着不成功便搞笑的骚气. 祝他早日上岸,也欢迎大家在评论区讨论这些面试题,有哪些面 ...

  2. 基于FPGA的贪吃蛇游戏 之代码解析

    基于FPGA的贪吃蛇游戏 之代码解析 1. 代码结构 代码结构包含7格.v文件. 下面依次解析. 2. 代码解析 (1) seg_display.v 数码管的译码模块是最熟悉,最简单的模块了.这里是共 ...

  3. 用 C 语言开发一门编程语言 — 抽象语法树

    目录 文章目录 目录 前文列表 抽象语法树的结构 使用递归来遍历树结构 实现求值计算 抽象语法树与行为树 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> <用 C 语 ...

  4. NETCore中实现一个轻量无负担的极简任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...

  5. 全网首一份!你最需要的PPTP MS-CHAP V2 挑战响应编程模拟计算教程!代码基于RFC2759,附全部源码!

    本文基于网络密码课上的实验 本来想水一水就过去,代码就网上找找,不行就GPT写,但是!一份都找不到,找到的代码都是跑不了的,总会是就是乱七八糟.所以准备认真的写一份. 代码编译成功的前提是要预先装好o ...

  6. redis三主三从集群快速搭建

    redis集群快速搭建 1 本文以redis6.2.6版本为例,快速搭建一套三主三从的redis集群,已经提前将脚本写好,只需要在节点上面进行执行即可安装 #!/bin/bash install_re ...

  7. .net程序员学习java篇一(搭建SSM)

    一.安装IDE 相比于.net环境的一气呵成,java可能麻烦一点,这里记录下来,避免萌新踩坑 1.1安装JDK,这里不要玩什么花哨,老老实实选个大众版(Oracle JDK1.8x),设置环境变量, ...

  8. 推荐2款开源、美观的WinForm UI控件库

    前言 今天大姚给大家分享2款开源.美观的WinForm UI控件库,希望可以帮助到有需要的同学. WinForm介绍 WinForm是一个传统的桌面应用程序框架,它基于 Windows 操作系统的原生 ...

  9. flutter开发环境的搭建

    下载flutter开发包,有670M左右. github的下载地址:https://github.com/flutter/flutter 或者官方下载地址:https://flutter.dev/do ...

  10. 规则引擎easyRules中组合规则的使用

    这两天想要做支付路由,要根据支付信息将支付请求转发到不同的支付渠道,可能要用到规则引擎,于是研究了一下开源的规则引擎产品.规则引擎核心知识与开源产品对比选型 ,这篇文章对规格引擎和开源产品有详细的介绍 ...