通过 FRP 实现 P2P 通信:控制端与被控制端配置指南
本文介绍了如何通过 FRP 实现 P2P 通信。FRP(Fast Reverse Proxy)是一款高效的内网穿透工具,能够帮助用户突破 NAT 和防火墙的限制,将内网服务暴露到公网。通过 P2P 通信方式,FRP 提供了更加高效、低延迟的网络传输方式,适合需要高带宽和低延迟的场景。
一、前言
FRP(Fast Reverse Proxy)是一个高性能的内网穿透工具,广泛用于解决 NAT 穿透和防火墙限制等问题。FRP 提供了服务端 frps
和客户端 frpc
,其中 frps
一般部署在公网服务器上,而 frpc
部署在需要进行内网穿透的设备上。
在本文中,我们将介绍如何使用 FRP 通过阿里云的 FRP 服务端来实现 P2P 通信。P2P(Peer-to-Peer)通信通过直接的对等网络连接,避免了传统客户端与服务端之间的中转,使数据传输更加高效、低延迟。
二、FRP 架构概述
- frps:FRP 的服务端,部署在阿里云服务器上,负责转发来自客户端的连接。
- frpc:FRP 的客户端,部署被控制端和控制端。
三、P2P 通信模式
P2P(Peer-to-Peer)通信是一种去中心化的网络通信模式,客户端之间可以直接建立连接,数据不通过中间服务器。通过 P2P,FRP 实现了更低延迟和更高带宽的传输能力。对于需要实时传输数据或者高带宽应用(如远程桌面 RDP),P2P 通信方式提供了明显的性能优势。
四、控制端与被控制端配置
在 FRP 配置中,控制端和被控制端分别部署在不同的机器上,控制端可以访问被控制端的内网服务。通过配置 frpc.toml
文件,可以实现 P2P 通信和其他服务的暴露。以下是控制端和被控制端配置的相关说明。
1. 被控制端配置
被控制端的 frpc.toml
配置文件中包括了对本地服务(如 RDP 和 Gitblit)的暴露,同时还配置了 P2P 通信的隧道。P2P 隧道使用 xtcp
类型,确保数据传输的低延迟和高带宽。
# frpc 服务端配置
serverAddr = "your_frps_server_ip" # 阿里云上的 FRP 服务端公网 IP
serverPort = 7000 # FRP 服务端端口# 身份验证
auth.method = "token"
auth.token = "your_token_here" # 与服务端的 token 配置相匹配# 传输配置
[transport]
tcpMux = true # 启用 TCP 多路复用# TLS 配置
[transport.tls]
disableCustomTLSFirstByte = true # 禁用自定义 TLS 第一字节
enable = true # 启用 TLS 加密# 配置 RDP 服务的 TCP 转发
[[proxies]]
name = "rdp" # 隧道名称
type = "tcp" # 使用 TCP 转发
localIP = "127.0.0.1" # 本地服务 IP
localPort = 3389 # 本地服务端口
remotePort = 3389 # 远程暴露端口# 配置 Gitblit 服务的 TCP 转发
[[proxies]]
name = "gitblit" # 隧道名称
type = "tcp" # 使用 TCP 转发
localIP = "127.0.0.1" # 本地服务 IP
localPort = 6888 # 本地服务端口
remotePort = 6888 # 远程暴露端口# P2P 通信配置(使用 xtcp 类型)
[[proxies]]
name = "p2p_rdp" # 隧道名称
type = "xtcp" # 使用 xtcp 类型进行 P2P 通信
localIP = "127.0.0.1" # 本地服务 IP
localPort = 3389 # 本地服务端口
secretKey = "your_secret_key_here" # 与服务端配置相匹配的 secretKey
2. 控制端配置
控制端的配置文件也采用类似的设置,主要包括与被控制端的连接、P2P 隧道的设置和其他服务的转发。控制端配置需要确保与服务端 frps
端口匹配。
# FRP 控制端配置
serverAddr = "your_frps_server_ip" # 阿里云上的 FRP 服务端公网 IP
serverPort = 7000 # FRP 服务端端口# 身份验证
auth.method = "token"
auth.token = "your_token_here" # 与服务端的 token 配置相匹配# 传输配置
[transport]
tcpMux = true # 启用 TCP 多路复用# TLS 配置
[transport.tls]
disableCustomTLSFirstByte = true # 禁用自定义 TLS 第一字节
enable = true # 启用 TLS 加密# P2P RDP 配置
[[visitors]]
name = "p2p_rdp" # 隧道名称
type = "xtcp" # 使用 xtcp 类型进行 P2P 通信
secretKey = "your_secret_key_here" # 与被控制端配置相匹配的 secretKey
serverName = "p2p_rdp" # 对应的被控制端名称
bindAddr = "127.0.0.1" # 本地绑定地址
bindPort = 3333 # 本地绑定端口
五、总结
FRP 是一个强大的内网穿透工具,通过配置 frpc.toml
文件,可以轻松实现内网服务的暴露,并通过 P2P 通信优化传输效率。P2P 通信模式通过直接的对等连接,避免了中转服务器的延迟,适用于高带宽和低延迟的应用场景。在本文中,我们介绍了如何配置 FRP 控制端与被控制端,实现对内网服务的远程访问,同时利用 P2P 技术提高数据传输的效率。
通过这种配置,用户可以安全、稳定地将 RDP 和 Gitblit 服务暴露到公网,并在控制端与被控制端之间实现高效的 P2P 通信。
扩展
1. FRP GUI 客户端
Windows 平台的 FRP GUI 客户端 / A user-friendly desktop GUI client for FRP on Windows.
1.1 被控制端
可以导入被控制端的 frpc.toml
配置文件,也可以手动设置。
选择手动设置。输入名称、ip 和端口号。
如果 frps 设置了 Token,那么认证方式需要选择 Token,并输入令牌。
设置日志文件,方便查找问题。
TLS 配置。启用 TLS 加密,并禁用自定义 TLS 第一字节。
传输配置。启用 TCP 多路复用。
1.2 控制端
前面几步的设置与被控制端配置相同,主要区别在于代理配置。控制端需要编辑代理部分,类型选择 xtcp
,角色选择“访问者”。在配置过程中,确保服务名称和秘钥与被控制端的配置保持一致。绑定的端口可以根据需要设置,只要不与其他端口冲突即可。绑定的 IP 地址使用本地回环地址。
1.3 无密码远程登录(可选)
如果希望远程桌面连接能够在没有密码的情况下访问,请按照以下步骤配置:
- 按
Win + R
键,弹出运行框。 - 输入
secpol.msc
并按回车,打开本地安全策略管理器。 - 在左侧导航栏中,选择“本地策略” -> “安全选项”。
- 找到并双击“帐户: 使用空密码的本地帐户只允许进行控制台登录”选项。
- 将其设置为“禁用”,然后点击“确定”。
这样配置后,就可以通过远程桌面进行无密码登录。
1.4 远程访问
在控制端打开远程桌面连接,并且输入绑定的 ip 、端口和用户名。
2. 阿里云配置 frps
FRP 实现内网穿透_使用frp进行内网穿透
相关文章:

通过 FRP 实现 P2P 通信:控制端与被控制端配置指南
本文介绍了如何通过 FRP 实现 P2P 通信。FRP(Fast Reverse Proxy)是一款高效的内网穿透工具,能够帮助用户突破 NAT 和防火墙的限制,将内网服务暴露到公网。通过 P2P 通信方式,FRP 提供了更加高效、低延迟的网络传输方式…...

即时通信系统项目总览
聊天室服务端项目总体介绍 本项目是一个全栈的即时通信系统, 前端使用QT实现聊天客户端, 后端采⽤微服务框架设计, 由网关子服务统一接收客户端的请求, 再分发到不同的子服务上处理并将结果返回给网关, 网关再将响应转发给客户端 拆分的微服务包含: 网关服务器&…...

QT获取tableview选中的行和列的值
查询数据库数据放入tableview(tableView_database)后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…...

GDPU 人工智能 期末复习
1、python基础 2、回归、KNN、K-Means、搜索方法思想及算法实现步骤 3、知识表示基本概念 4、状态空间的相关概念、表示方法及应用 5、图搜索策略及应用 6、问题归约概念、与或图搜索、博弈树搜索与剪枝 7、决策树、贝叶斯决策算法及其应用 8、神经网络与深度学习基本概念 一、…...

编程之路,从0开始:补充篇
Hello大家好!很高兴和大家又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞,关注! 这篇…...

使用缓存提升Web应用性能:从新手到高手的实践指南
引言 在现代Web开发中,性能优化是确保用户体验和系统稳定性的关键。使用缓存是提升网站性能的有效手段之一,可以显著减少数据库访问和计算开销。根据“网站优化第一定律”,缓存可以提升网站的响应速度,减少延迟,从而改…...

【数字电路与逻辑设计】实验一 序列检测器
文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验一 序列检测器 一、实验内容二、设计过程(一)作出状态图或状态表(二)状态化简(三)状态编码 三、源代码(一ÿ…...

运动模糊效果
1、运动模糊效果 运动模糊效果,是一种用于 模拟真实世界中快速移动物体产生的模糊现象 的图像处理技术,当一个物体以较高速度移动时,由于人眼或摄像机的曝光时间过长,该物体会在图像中留下模糊的运动轨迹。这种效果游戏、动画、电…...

养老护理员培训考试题库;免费题库;大风车题库
下载链接:大风车题库-文件 大风车题库网站:大风车题库 大风车excel(试题转excel):大风车excel...

Python-配置模块configparser使用指南
configparser 是 Python 标准库中的模块,用于处理配置文件(如 .ini 文件)。它适合管理程序的配置信息,比如数据库连接参数、应用程序设置等。 1. 配置文件的基本结构 配置文件通常是 .ini 格式,由 节(Sec…...

C++的HDF5库将h5图像转为tif格式:szip压缩的图像也可转换
本文介绍基于C 语言的hdf5库与gdal库,将.h5格式的多波段HDF5图像批量转换为.tif格式的方法;其中,本方法支持对szip压缩的HDF5图像(例如高分一号卫星遥感影像)加以转换。 将HDF5图像批量转换为.tif格式,在部…...

【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)
本文详细介绍了String类以及常用的String相关方法,以及StrinBuftrer , StringBulder相关方法的使用,建议有印象即可,不需要都记住,使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…...

WordPress安装或访问时出现数据库连接错误的处理方式
一、在安装时出现数据库连接错误 1、如果数据库名称、用户名或密码错误,或者主机设置不正确(如数据库服务器不是在本地localhost,而是在远程服务器,需要正确填写远程服务器的 IP 地址或域名),就会导致连接错…...

JAVA-面向对象基础
文章目录 概要封装多态抽象类接口内部类为什么需要内部类 概要 面向对象是一种编程范式或设计哲学,它将软件系统设计为由多个对象组成,这些对象通过特定的方式相互作用 封装 将数据和操作数据的方法封装在一个类中,并通过访问修饰符控制对…...

[Java]项目入门
这篇简单介绍一些入门的有关项目和行业的知识,并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍,一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分: 1.前端。比如你现在看到的CSDN页面就是一…...

opencv Mat To Heif
高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12&#x…...

二刷代码随想录第24天
93. 复原 IP 地址 确定函数is_ip的实现细节,start不能超过end,没有0开头的非0数字,每个字符都在0-9之间,每段字符小于255在原字符串s上做操作会更简单一些 class Solution { public:vector<string> result;vector<string> rest…...

Java设计模式之状态模式架构高扩展的订单状态管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...

Yagmail邮件发送库:如何用Python实现自动化邮件营销?
目录 一、Yagmail简介 二、安装Yagmail 三、基本使用示例 1. 发送简单文本邮件 2. 发送HTML邮件 3. 发送带有附件的邮件 4. 多收件人处理 5. 自定义邮件头 四、高级功能 1. SMTP配置 2. 邮件模板 3. OAuth2认证 五、自动化邮件营销案例 六、错误处理和调试 七、…...

李宏毅深度学习-Pytorch Tutorial2
什么是张量? 张量(Tensor)是深度学习和机器学习中一个非常基础且重要的概念。在数学上,张量可以被看作是向量和矩阵的泛化。简单来说,张量是一种多维数组,它可以表示标量(0维)、向量…...

SaaS财务软件:赋能企业数字化转型
在数字化浪潮的推动下,企业财务管理正逐步迈向智能化、高效化的新阶段。在这个过程中,SaaS财务软件应运而生,成为许多企业的首选。以易舟云财务软件为例,这款软件不仅集成了众多先进的财务管理功能,而且在用户体验上做…...

FPGA实战篇(按键控制LDE实验)
1.按键简介 按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开ÿ…...

在Ubuntu-22.04 [WSL2]中配置Docker
文章目录 0. 进入Ubuntu-22.041. 更新系统软件包2. 安装Docker相关依赖包3. 添加Docker官方GPG密钥4. 添加Docker软件源5. 安装Docker Engine5.1 更新软件包列表5.2 安装Docker相关软件包 6. 验证Docker安装是否成功6.1 查看Docker版本信息6.2 启动Docker6.3 配置镜像加速器6.4…...

ACM:均分纸牌
主要思路 整体思路概述: 本题旨在解决给定N堆纸牌(纸牌总数是N的倍数),通过按照特定移牌规则移动纸牌,找出用最少移动次数使每堆纸牌数量相等的方法。程序采用了一种逐步调整的思路,先计算出每堆纸牌应有的…...

ThreadFactory
ThreadFactory 是 Java 中一个用于创建线程的接口,它可以自定义线程的创建过程,例如线程的名称、优先级、是否为守护线程等。它是 java.util.concurrent 包的一部分,通常与线程池(ThreadPoolExecutor)一起使用。 线程…...

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门
作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了…...

NES游戏机项目制作笔记(未完成)
24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目,准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯,注意效率 01 根据项目需求分析 为确保充分考虑每一个细节,并且让自己高效的完成项目制作&#…...

云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题
环境的搭建 准备:云服务器(本地的linux服务器(版本最好不要是老的不然不兼容docker)) f8x配置docker环境: https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...

Elasticsearch入门之HTTP基础操作
RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…...

maven聚合项目部署到tomcat上
目录 一.聚合项目 1.检查无误后将项目打包 2.将这四个拷贝到tomcat的webapp下 二.启动tomcat 1.双击startup.bat 2.页面访问http://localhost:8080 3.打开webapp文件夹,发现多了三个文件夹 4.点进去才有要访问的index页面 5.再进行访问 解决: …...