当前位置: 首页 > news >正文

frp基础知识

FRP 内网穿透技术原理详解

一、核心问题:为什么需要内网穿透?

  • 网络环境限制:内网设备通常位于 NAT/防火墙后,无公网 IP,外部无法直接访问
  • 主动连接优势:通过让内网服务主动向外连接,规避 NAT 对入站连接的阻拦
  • 应用场景:远程调试、家庭 NAS 访问、渗透测试、服务演示等

二、FRP 核心架构

1. 组件构成

组件部署位置关键功能
FRP 服务端公网服务器监听控制端口,代理转发外部请求,维护与客户端的隧道连接
FRP 客户端内网设备主动连接服务端,注册需暴露的服务,处理数据转发任务

2. 核心通信流程

外部用户 → 公网IP:暴露端口 → frps → 已建立隧道 → frpc → 内网IP:本地端口 → 目标服务

三、技术实现细节

1. 隧道建立机制

  • 控制通道建立

    • 客户端通过 TCP 长连接(默认端口 7000)主动连接服务端
    • 传输元数据(端口映射、服务配置)和心跳包维持连接存活
  • 数据传输模式

伪代码示例隧道数据转发
while tunnel_connected:if external_request_arrived:encrypt_data() # 可选 TLS 加密send_via_tunnel() # 通过控制通道发送if tunnel_has_data:decrypt_data() # 对应解密forward_to_local_service() # 转发至内网服务

2. 协议支持特性

协议类型支持情况典型应用场景
TCPSSH、远程桌面、数据库连接
UDP视频流、游戏联机、DNS 查询
HTTPWeb 服务访问、API 代理
HTTPS安全 Web 服务代理

3. 安全机制

  • TLS 加密传输:可选开启端到端加密,防止中间人攻击
  • Token 验证:客户端连接服务端时需验证预设 token
  • 端口白名单:限制可访问端口的范围
  • 访问控制:支持 IP 黑白名单限制

四、关键技术原理

1. NAT 穿透实现

  • 突破性设计:通过内网客户端主动向外建立连接,形成"反向隧道"
  • 会话维持:通过心跳包保持 NAT 映射表项不被清除(通常 NAT 超时为 60-300s)
  • 多路复用:单个控制通道可承载多个服务的流量,减少资源消耗

2. 流量转发机制

详细数据流路径
1.用户访问公网服务器 IP:60002.frps 接收请求,通过隧道查询映射关系3.frps 通过控制通道将请求元数据发送给 frpc4.frpc 在本地建立与目标服务(如127.0.0.1:22)的连接5.数据通过隧道双向转发:
[用户] ↔ [frps:6000] ↔ [隧道] ↔ [frpc] ↔ [内网服务:22]

五、配置实例详解

服务端配置 (frps.ini)

[common]控制端口,客户端通过此端口连接
bind_port = 7000可选认证令牌,增强安全性
token = your_secure_token_here仪表板端口,用于监控连接状态
dashboard_port = 7500dashboard_user = admindashboard_pwd = admin日志记录配置
log_file = ./frps.loglog_level = info

客户端配置 (frpc.ini)


[common]服务端连接信息
server_addr = your_server_ip #攻击机ipserver_port = 7000token = your_secure_token_hereSSH 服务暴露示例
[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000 # 通过公网服务器6000端口访问Web 服务暴露示例
[web]type = httplocal_port = 8080custom_domains = your.domain.comUDP 服务示例
[dns]type = udplocal_port = 53remote_port = 6001

六、与其他方案的对比分析

特性FRPNgrokVPN端口转发
配置复杂度中等简单复杂依赖网络设备
协议支持多协议主要 HTTP/TCP全协议全协议
性能开销中等最低
公网IP需求服务端需要服务端需要服务端需要需要
安全性可配置加密企业版支持加密加密通道无加密

七、高级应用场景

1. 多层内网穿透


A → B → C 三级跳转穿透
互联网用户 → 公网服务器 → 办公网络FRP客户端 → 研发内网FRP客户端 → 目标服务

2. 负载均衡配置


多个客户端提供相同服务
[web_balance]type = tcplocal_port = 80remote_port = 6080group = web_serversgroup_key = group_password

3. 带宽限制配置


[limited_service]type = tcplocal_port = 22remote_port = 6022bandwidth_limit = 1MB # 限制带宽使用

总结

FRP 通过巧妙的"反向连接+隧道转发"机制,使其成为内网穿透领域的重要工具,特别适用于渗透测试

1. 建立持久隧道
(客户端主动连接)
2. 请求访问服务
3. 通过隧道转发请求
4. 交付请求至内网服务
5. 响应
6. 通过隧道返回响应
7. 返回最终响应
公网用户
FRP 服务端
frps
FRP 客户端
frpc
内网服务
e.g. SSH, Web
http://www.dtcms.com/a/349405.html

相关文章:

  • React 学习笔记2 props、refs
  • 消息中间件RabbitMQ03:结合WebAPI实现点对点(P2P)推送和发布-订阅推送的Demo
  • 从C语言到数据结构:保姆级顺序表解析
  • 使用OpenSSL生成自签名证书
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化
  • 逆向抄数工程师能力矩阵:设备操作(±0.05mm 精度)× 曲面重构 ×GDT 公差分析
  • C++|UDP通讯使用总结
  • Fluent Bit系列:字符集转码测试(下)
  • Dify 从入门到精通(第 55/100 篇):Dify 的模型微调(进阶篇)
  • Devops之Jenkins:Jenkins服务器中的slave节点是什么?我们为什么要使用slave节点?如何添加一个windows slave节点?
  • 如何监控ElasticSearch的集群状态?
  • Fluent Bit系列:字符集转码测试(上)
  • LengthFieldBasedFrameDecoder 详细用法
  • Error ratio tests for 200 Gb/s per lane ISLs using PMAmeasurements
  • 李沐-第十章-实现Seq2SeqAttentionDecoder时报错
  • 什么是事件循环(Event Loop)?浏览器和 Node.js 中的事件循环有什么区别?
  • springboot整合druid(多数据源配置)
  • Python_occ 学习记录 | 阵列
  • 李沐-第十章-训练Seq2SeqAttentionDecoder报错
  • 十九、云原生分布式存储 CubeFS
  • 剧本杀APP系统开发:打造多元化娱乐生态的先锋力量
  • Go编写的轻量文件监控器. 可以监控终端上指定文件夹内的变化, 阻止删除,修改,新增操作. 可以用于AWD比赛或者终端应急响应
  • TensorFlow深度学习实战(34)——TensorFlow Probability
  • GO学习记录八——多文件封装功能+redis使用
  • Node.js(2)—— Buffer
  • 安卓Android低功耗蓝牙BLE连接异常报错133
  • Docker Compose 部署 Elasticsearch 8.12.2 集成 IK 中文分词器完整指南
  • Go初级三
  • 上海AI实验室突破扩散模型!GetMesh融合点云与三平面,重塑3D内容创作
  • 少儿舞蹈小程序需求规格说明书