第二部分:关键技术领域的开源实践【内网穿透FRP】
FRP简介
FRP(Fast Reverse Proxy)作为一种高性能的内网穿透工具,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点(云服务器)的中转暴露到公网。
为什么使用 FRP ?
以下是一些常见的企业级应用场景:
远程办公和远程桌面
- 允许员工从外部网络远程接入企业内部的桌面系统进行工作,提高灵活性和效率,尤其是在远程工作成为常态的情况下。
- 便于IT部门进行远程维护和故障排除,无需物理访问设备。
远程服务器管理
- 使管理员能够通过公网访问位于企业内网的服务器,进行配置、更新和监控。
- 支持对云服务器的管理,即使它们位于具有私有IP地址的VPC(Virtual Private Cloud)中。
企业服务的公网访问
- 允许企业内部的Web服务、数据库、API接口等对外界开放,而无需企业拥有固定的公网IP。
- 使得客户、合作伙伴或外部应用程序可以访问这些内部服务,促进业务合作和数据交换。
视频监控和安防
- 实现对企业内部安装的视频监控系统的远程访问,便于实时监控和安全管理。
- 对于分布式的公司,总部可以远程监控各个分部的安保情况。
物联网(IoT)设备管理
- 允许远程管理和监控位于企业内部网络中的IoT设备,如智能传感器、自动化设备等。
开发测试环境的远程访问
- 开发人员可以远程访问位于企业内网的开发测试服务器,进行代码调试和功能测试。
- 支持跨地域的开发团队协作,提高开发效率。
企业资源规划(ERP)和CRM系统访问
- 提供外部用户对内部ERP或CRM系统的安全访问,例如供应商或销售团队成员。
云服务扩展
- 当企业使用混合云架构时,FRP可以帮助连接私有云和公有云资源,实现更灵活的资源调度和管理。
企业内部通信和协作工具
- 使企业内部的通信平台如电话会议、视频会议系统可以被外部参与者访问。
通过使用FRP,企业能够在不改变现有网络结构的情况下,提升网络的可访问性和灵活性,同时保持较高的安全性标准。然而,实施FRP时也应考虑网络安全策略,确保只有授权用户可以访问特定的服务。
下面重点讲解FRP在企业中的实际应用,分别从服务端和客户端阐述:
FRP开源实践应用【企业案例】
在Linux系统上安装FRP的基本步骤:
步骤1:下载FRP
首先,你需要下载适合你操作系统版本的FRP二进制文件。假设你正在使用一个基于Linux的系统,你可以使用wget
或curl
来下载。如果你的系统上还没有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所需的端口,通常是7000
和7500
。
#内网服务器开放端口方法
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】的更多相关文章
- 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区
1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...
- 聊聊第一个开源项目(内网穿透) - CProxy
文章首发:聊聊第一个开源项目 - CProxy 作者:会玩code 初衷 最近在学C++,想写个项目练练手.对网络比较感兴趣,之前使用过ngrok(GO版本的内网穿透项目),看了部分源码,想把自己的一 ...
- [网络]NAT与内网穿透技术初探【待续】
1 局域网网段IP 要真正了解NAT就必须先了解现在IPv4地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址.RFC 1918 为私有网 ...
- B2C商城关键技术点总结(站内搜索、定时任务)
1.站内搜索 1.1Lucene.Net建立信息索引 string indexPath = @"E:\xxx\xxx";//索引保存路径 FSDirectory directory ...
- 在线公开课 | 5G时代的视频云服务关键技术与实践
5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...
- Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术
Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术 Excel催化剂 2019.01.12 14:10* 字数 2948 阅读 41评论 0喜欢 0 编辑文章 在Excel催化剂的几大 ...
- 基于软件开源实践(FLOSS)论共产主义的可实现性
好久没发博客,来个狠的,我不信挨踢界有人比我更蛋疼来研究这个. 在马克思提出共产主义100多百年后,软件开发领域中出现了一种特别的生产方式:开源(FLOSS:Free/Libre and Open S ...
- Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)
作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 Go 开发关键技术指南文章目录: 为什么你要选择 Go? Go 面向失败编程 带着服务器编程金刚经走进 2020 年 敢问路在何方? Go 开发指南大图 ...
- 互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践
本文从业务目标角度出发,确定了开源+自建模式搭建 Qunar 研发工具链整体生态:通过 APPCODE 打通工具链,流程规范化自动化:多种手段+发布门禁助力质量提升:建立应用画像确定运维最小单元,可发 ...
- .NET领域驱动设计—实践(穿过迷雾走向光明)
阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...
随机推荐
- 用 C 语言开发一门编程语言 — 异常处理
目录 文章目录 目录 前文列表 异常捕获 定义 Lisp Value 函数 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> <用 C 语言开发一门编程语言 - 跨平台 ...
- 定了!航天科技AIRIOT 物联网平台新品发布会,6月6日北京见!
AIRIOT新品发布会预告 航天科技定档6月6日举办AIRIOT新品发布会,诚邀大家共同见证4.0版本的创新与赋能! 活动地点:北京雍和航星科技园. 现场参会请通过下方长图二维码进行报名! 亦可预约直 ...
- java jdbc 得到像C#里的datatable一样的表格
public ArrayList<ArrayList<String>> getDataTale2(String sql) throws SQLException { Array ...
- 轻松绕过 Graphql 接口爬取有米有数的商品数据
轻松绕过 Graphql 接口爬取有米有数的商品数据 有米有数数据的 API 接口,使用的是一种 API 查询语言 graphql.所有的 API 只有一个入口,具体的操作隐藏在请求数据体里面传输. ...
- python脚本将ascii码形式的文件转换为真正的二进制文件
1.通过tcpdump在越狱手机上面抓取所有包,包含环路包 将手机通过USB线连接电脑,并将其映射到本地端口,启动抓包 rvictl -s bb44203ca128c7b13bfc66fa34f6c1 ...
- C基本知识
1 C基本数据类型 C基本的数据类型说明: 2 字节序 测试代码: #include <stdio.h> typedef unsigned char *byte_pointer; void ...
- (八十八)c#Winform自定义控件-转子
官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...
- Lru在Rust中的实现, 源码解析
LRU(Least Recently Used)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰. LRU算法原理 基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间 ...
- THUWC 2024 游记
其实这个游记也没啥好写的-- day 0 上午做动车两个小时到重庆,路上玩了 1.5h 的星露谷. 下午去巴蜀中学报道试机,系统是 Ubuntu Jammy,大大的好评,只是桌面是 Xubuntu/X ...
- 微博Lite版安装
微博Lite版安装 前置条件,需要使用chrome,或chromium内核的浏览器. 1.浏览器输入:https://m.weibo.cn/ 2.在地址栏最右侧点击安装. --