FRP的proxies只是建立通道,相当于建立与服务器沟通的不同通道而不是直接将路由器与服务器云端沟通

没有更好的办法了吗,我看frpc.toml的里面可以设置两个proxies那我esp32的监听端口设置在frpc.toml里面它不也能跟云服务器建立联系吗,比如远程与本地端口都配置为5112那云服务器接收到的5112访问会以frp配置的本地端口5112转发到frp客户端的路由器,再由路由器广播给所有链接到本路由器的ip,不是这样吗,那这样我esp32返回的端口数据不也是5112的端口图像数据到路由器再由路由器上传到云端返回给手机,难道说frp客户端电脑才能跟云端沟通而不是路由器能,那.toml里面的proxies有啥用,只配一个电脑的点不就好了为啥可以配多个proxies

用户之前的讨论主要集中在使用FRP进行内网穿透,将ESP32的摄像头数据通过FRP客户端电脑传输到云服务器,从而让手机可以通过公网访问。现在用户提出了几个新的疑问,需要逐一解答。

首先,用户提到在frpc.toml中可以设置多个proxies,是否可以通过配置ESP32的监听端口和云服务器的远程端口为同一端口(例如5112),使得云服务器接收到5112端口的请求后,直接通过路由器转发给ESP32,而不需要经过FRP客户端电脑。用户认为这样可能更高效,或者是否存在其他更好的方法。另外,用户还质疑为什么需要配置多个proxies,如果只需要一个电脑的代理点,为什么可以配置多个。

需要分析FRP的工作原理,明确FRP客户端和服务器之间的通信机制,以及端口映射的具体过程。用户可能存在误解,认为路由器可以直接与云服务器通信,而实际上FRP客户端才是建立隧道的关键。此外,用户提到的“路由器广播”可能混淆了NAT和端口转发的概念。

接下来,需要解释FRP的代理配置(proxies)的作用。每个proxy对应一个端口映射规则,允许将不同的远程端口映射到不同的内网服务。例如,一个proxy用于摄像头,另一个用于其他服务如Web服务器。用户可能没有意识到多proxies的用途,或者认为单一配置足够,但实际上多proxies支持多服务的同时穿透。

还需要澄清,FRP客户端必须运行在一个能够连接到云服务器和内网设备的机器上,通常是电脑或服务器,而不是路由器本身,除非路由器上安装了FRP客户端。如果用户的路由器支持运行FRP客户端,则可以配置在路由器上,否则需要依赖其他设备作为客户端。

用户可能误以为设置相同的本地和远程端口可以让路由器自动转发,但实际上这需要FRP客户端主动建立和管理隧道。即使端口号相同,FRP客户端仍然负责将云服务器收到的请求转发到内网的指定IP和端口,而路由器在此过程中仅处理NAT,不参与FRP的隧道管理。

最后,需要总结用户的问题,确认其核心疑问在于FRP客户端的作用、端口映射配置的意义,以及如何优化架构以减少对单独客户端电脑的依赖。回答时需要结构清晰,分点解释,避免技术术语过于复杂,同时提供实际配置示例帮助理解。


一、FRP核心机制详解

1. FRP通信本质

mermaid

复制

graph TB云服务器(frps) -->|控制通道| FRP客户端(frpc)FRP客户端 -->|数据通道| 云服务器FRP客户端 --> 内网设备(ESP32)
  • 控制通道:客户端主动发起的TCP长连接(默认7000端口)

  • 数据通道:按需建立的临时连接(如配置的6000端口)

  • 关键特性:所有通信均由客户端主动发起,路由器仅做NAT转换

2. 端口映射实质

toml

复制

# frpc.toml示例
[[proxies]]
name = "cam1"
type = "tcp"
localIP = "192.168.1.100"  # ESP32的IP
localPort = 80             # ESP32的真实端口
remotePort = 5112          # 公网暴露端口[[proxies]]
name = "cam2"
type = "tcp" 
localIP = "192.168.1.101"
localPort = 80
remotePort = 5113
配置项作用说明误区澄清
remotePort云服务器监听端口不依赖路由器端口映射
localPort内网设备真实服务端口可与remotePort不同
localIP目标设备的内网IP必须可达FRP客户端

二、多Proxies配置场景

1. 典型应用场景
场景配置示例优势
多设备穿透每个设备独立proxy隔离流量,独立控制
多服务类型HTTP+TCP混合代理协议优化
端口复用同端口不同路径(/cam1,/cam2)节省公网端口资源
2. 实战配置示例

toml

复制

# 场景:单ESP32提供多服务
[[proxies]]
name = "video-stream"
type = "tcp"
localIP = "192.168.1.100"
localPort = 80
remotePort = 5112[[proxies]]
name = "sensor-data" 
type = "tcp"
localIP = "192.168.1.100"
localPort = 8080
remotePort = 5113

三、关键技术验证

1. 网络抓包分析

在FRP客户端执行:

bash

复制

tcpdump -i any 'port 5112 or port 80' -nnv
  • 应观察到:

    • 入站:云服务器IP:随机端口 → 客户端:5112

    • 出站:客户端:随机端口 → ESP32:80

2. 连接状态查看

bash

复制

# 云服务器端
ss -ant 'sport = :5112'# 输出示例
ESTAB 0      0            云服务器IP:5112      客户端IP:36742
3. 路由跟踪验证

bash

复制

traceroute -T -p 5112 云服务器IP
# 路径应显示经过公网路由节点,不涉及内网路由器

四、架构优化方案

1. 去除中间设备方案

mermaid

复制

graph TB手机 --> 云服务器云服务器 --> 智能路由器(运行frpc)智能路由器 --> ESP32

实现条件

  • 路由器支持Linux系统(如OpenWRT)

  • 安装FRP客户端到路由器

  • 配置持久化服务

路由器配置示例

bash

复制

# OpenWRT安装frpc
opkg update
opkg install frpc# 配置/etc/frpc.ini
[common]
server_addr = 云服务器IP
server_port = 7000[cam]
type = tcp
local_ip = 192.168.1.100
local_port = 80
remote_port = 5112
2. 性能对比
方案延迟带宽开销设备依赖
传统PC客户端200ms需常开电脑
路由器直装客户端150ms需智能路由器
嵌入式方案180ms需定制硬件

五、安全增强实践

1. 端口隐藏技术

toml

复制

# frps.toml
[common]
vhost_http_port = 80
subdomain_host = "yourdomain.com"# frpc.toml
[[proxies]]
name = "web"
type = "http"
localPort = 80
subdomain = "esp32cam"

访问方式:

复制

http://esp32cam.yourdomain.com
2. 动态身份验证

toml

复制

# frpc.toml
[common]
auth.method = "oidc"
auth.oidc.client_id = "frpc-client"
auth.oidc.client_secret = "secure_secret"
auth.oidc.issuer_url = "https://auth.yourdomain.com"

六、深度问题解答

Q1:为何不能直接映射到路由器?
  • NAT限制:普通路由器不具备反向连接能力

  • 安全策略:运营商普遍封锁入站连接

  • 协议限制:FRP依赖客户端主动出站连接

Q2:多Proxies的实质价值
  • 服务隔离:不同业务流量独立管理

  • 资源分配:可单独设置带宽限制

  • 故障隔离:单个代理故障不影响其他服务

Q3:端口复用的实现原理

mermaid

复制

sequenceDiagramparticipant C as Clientparticipant S as Serverparticipant F as FRPSparticipant R as FRPCC->>F: 请求公网IP:5112F->>R: 通过控制通道查询路由R->>F: 返回目标设备信息F->>R: 建立数据通道R->>ESP32: 转发请求到内网IP:80

通过以上分析可见,FRP的精妙之处在于客户端主动建立的双向通道,既规避了NAT限制,又实现了灵活的服务映射。实际部署时可根据网络环境选择最优方案,智能路由器方案可最大限度降低延迟和依赖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#在docker中启动mysql之类的容器时,没有挂载的数据...在后期怎么把数据导出外部

如果要导出 Docker 容器内的 整个目录(包含所有文件及子目录),可以使用以下几种方法: 方法 1:使用 docker cp 直接复制目录到宿主机 适用场景:容器正在运行或已停止(但未删除)。 命…

Java的JDK、JRE、JVM关系与作用

Java的JDK、JRE、JVM关系与作用 java中的JDK、JRE和JVM是三个核心组件,各自承担不同角色,且存在层级依赖关系 1. JVM(Java Virtual Machine,Java虚拟机) 是什么: JVM是虚拟的计算机,能够执行…

C++学习之套接字并发服务器

目录 1.昨天套接字服务器的弊端 2.如何通过多进程方式实现服务器并发 3.多进程服务器-1 4.多进程服务器-2 5.多进程版程序-回收子进程被信号中断的处理 6.多线程版TCP服务处理思路 7.多线程并发服务器编写 8.为什么不能把文件描述符地址传到子线程中 9.多线程程序测试 …

机器学习新范式:Kubernetes + Kubeflow,解锁模型训练与部署的高效密码

一、Kubernetes在机器学习模型训练与部署中的作用 Kubernetes作为一个强大的容器编排平台,为机器学习模型的训练与部署提供了以下核心支持: 分布式训练支持:Kubernetes能够自动化部署和管理PyTorch等机器学习框架的分布式训练任务。通过利用…

动态科技感html导航网站源码

源码介绍 动态科技感html导航网站源码,这个设计完美呈现了科幻电影中的未来科技界面效果,适合展示技术类项目或作为个人作品集的入口页面,自适应手机。 修改卡片中的链接指向你实际的HTML文件可以根据需要调整卡片内容、图标和颜色要添加更…

数字内容智能推荐优化策略

个性化推荐算法构建路径 构建高效数字内容体验的推荐系统,需以多源数据融合为基础框架。首先通过用户画像建模整合人口属性、行为轨迹及兴趣标签,结合协同过滤与深度学习算法建立内容关联矩阵。在此基础上,引入上下文感知机制,动…

# 深度学习中的优化算法详解

深度学习中的优化算法详解 优化算法是深度学习的核心组成部分,用于最小化损失函数以更新神经网络的参数。本文将详细介绍深度学习中常用的优化算法,包括其概念、数学公式、代码示例、实际案例以及图解,帮助读者全面理解优化算法的原理与应用…

汽车的四大工艺

文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺(从网上找了一张图,感觉挺全面的)。 冲压工艺 将金属板材通过…

Perl 发送邮件

Perl 发送邮件 概述 Perl 是一种强大的编程语言,广泛应用于系统管理、网络编程和数据分析等领域。其中,使用 Perl 发送邮件是一项非常实用的技能。本文将详细介绍使用 Perl 发送邮件的方法,包括必要的配置、代码示例以及注意事项。 准备工…

关于柔性数组

以前确实没关注过这个问题,一直都是直接定义固定长度的数组,尽量减少指针的操作。 柔性数组主要是再结构体里面定义一个长度为0的数组,这里和定义一个指针式存在明显去别的。定义一个指针会占用内存,但是定义一个长度为0的数组不会…

NOIP2011提高组.玛雅游戏

目录 题目算法标签: 模拟, 搜索, d f s dfs dfs, 剪枝优化思路*详细注释版代码精简注释版代码 题目 185. 玛雅游戏 算法标签: 模拟, 搜索, d f s dfs dfs, 剪枝优化 思路 可行性剪枝 如果某个颜色的格子数量少于 3 3 3一定无解因为要求字典序最小, 因此当一个格子左边有…

go游戏后端开发29:实现游戏内聊天

接下来,我们再来开发一个功能,这个功能相对简单,就是聊天。在游戏里,我们会收到一个聊天请求,我们只需要做一个聊天推送即可。具体来说,就是谁发的消息,就推送给所有人,包括消息内容…

基于大数据的美团外卖数据可视化分析系统

【大数据】基于大数据的美团外卖数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析,能够为美团外卖平台提供运营决策支…

[ctfshow web入门] web32

前置知识 协议相关博客:https://blog.csdn.net/m0_73353130/article/details/136212770 include:include "filename"这是最常用的方法,除此之外还可以 include url,被包含的文件会被当做代码执行。 data://&#xff1a…

kotlin中const 和val的区别

在 Kotlin 中,const 和 val 都是用来声明常量的,但它们的使用场景和功能有所不同: 1. val: val 用于声明只读变量,也就是不可修改的变量(类似于 Java 中的 final 变量)。它可以是任何类型,包括…

【STM32】综合练习——智能风扇系统

目录 0 前言 1 硬件准备 2 功能介绍 3 前置配置 3.1 时钟配置 3.2 文件配置 4 功能实现 4.1 按键功能 4.2 屏幕功能 4.3 调速功能 4.4 倒计时功能 4.5 摇头功能 4.6 测距待机功能 0 前言 由于时间关系,暂停详细更新,本文章中,…

任务扩展-输入商品原价,折扣并计算促销后的价格

1.在HbuilderX软件中创建项目,把项目的路径放在xampp中的htdocs 2.创建php文件:price.php,price_from.php 3.在浏览器中,运行项目效果,通过xampp中admin进行运行浏览,在后添加文件名称即可,注意&#xff…

3D Gaussian Splatting as MCMC 与gsplat中的应用实现

3D高斯泼溅(3D Gaussian splatting)自2023年提出以后,相关研究paper井喷式增长,尽管出现了许多改进版本,但依旧面临着诸多挑战,例如实现照片级真实感、应对高存储需求,而 “悬浮的高斯核” 问题就是其中之一。浮动高斯核通常由输入图像中的曝光或颜色不一致引发,也可能…

【软件测试】Postman中如何搭建Mock服务

在 Postman 中,Mock 服务是一项非常有用的功能,允许你在没有实际后端服务器的情况下模拟 API 响应。通过创建 Mock 服务,你可以在开发阶段或测试中模拟 API 的行为,帮助团队成员进行前端开发、API 测试和集成测试等工作。 Mock 服…

Spring-MVC

Spring-MVC 1.SpringMVC简介 - SpringMVC概述 SpringMVC是一个基于Spring开发的MVC轻量级框架,Spring3.0后发布的组件,SpringMVC和Spring可以无缝整合,使用DispatcherServlet作为前端控制器,且内部提供了处理器映射器、处理器适…