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.pswp.cn/news/900810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900810.shtml
英文地址,請注明出處:http://en.pswp.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作為前端控制器,且內部提供了處理器映射器、處理器適…