通过 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 无密码远程登录(可选)

如果希望远程桌面连接能够在没有密码的情况下访问,请按照以下步骤配置:

  1. Win + R 键,弹出运行框。
  2. 输入 secpol.msc 并按回车,打开本地安全策略管理器。
  3. 在左侧导航栏中,选择“本地策略” -> “安全选项”。
  4. 找到并双击“帐户: 使用空密码的本地帐户只允许进行控制台登录”选项。
  5. 将其设置为“禁用”,然后点击“确定”。

这样配置后,就可以通过远程桌面进行无密码登录。

1.4 远程访问

在控制端打开远程桌面连接,并且输入绑定的 ip 、端口和用户名

2. 阿里云配置 frps

FRP 实现内网穿透_使用frp进行内网穿透

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

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

相关文章

php7.4安装pg扩展-contos7

今天接到一个需求,就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说,直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…

CentOS7.X 安装RustDesk自建服务器实现远程桌面控制

参照文章CentOS安装RustDesk自建服务器中间总有几个位置出错,经实践做个记录防止遗忘 一 环境&工具准备 1.1 阿里云轻量服务器、Centos7系统、目前最高1.1.11版本rustdesk-server-linux-amd64.zip 1.2 阿里云轻量服务器–安全组–开放端口:TCP(21…

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

Java线程的interrupt中断、wait-notify/all(源码级分析)

实例方法: interrupt()方法是设置结束阻塞(sleep、wait等),并且设置中断标记true isInterrupted()判断当前是否中断 静态方法: Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好,既然上面的方法作用是清…

Burp Suite 实战指南:Proxy 捕获与修改流量、HTTP History 筛选与分析

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

12月第1周AI资讯

阅读时间:3-4min 更新时间:2024.12.2-2024.12.6 目录 OpenAI CEO Sam Altman 预告“12天OpenAI”系列活动 腾讯HunyuanVideo:130亿参数的开源视频生成模型 李飞飞的World Labs发布空间智能技术预览版 中科院联手腾讯打造“AI带货王”AnchorCrafter OpenAI CEO Sam Alt…

从零开始学TiDB(1) 核心组件架构概述

首先TiDB深度兼容MySQL 5.7 1. TiDB Server SQL语句的解析与编译:首先一条SQL语句最先到达的地方是TiDB Server集群,TiDB Server是无状态的,不存储数据,SQL 发过来之后TiDB Server 负责 解析,优化,编译 这…

记录一次使用git无权限的问题排查

正常的配置了公私钥之后,在gitlab中也存储了配对的公钥,但当使用git clone 时,总是报无权限 由于在这台机器中添加了多个公私钥,有点复杂,我们可以使用命令 ssh -vvvT 调试一下 ssh -vvvT yourGitlabAddr

python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime

发现这块网上信息很少,记录一下 微软azure入口 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/realtime-audio-quickstart?pivotsprogramming-language-ai-studio sdk文档 https://github.com/azure-samples/aoai-realtime-audio-sdk?tabread…

fastadmin 后台插件制作方法

目录 一:开发流程 二:开发过程 (一):后台功能开发 (二):功能打包到插件目录 (三):打包插件 (四):安装插件…

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

Docker部署的gitlab升级的详细步骤(升级到17.6.1版本)

文章目录 一、Gitlab提示升级信息二、老版本的docker运行gitlab命令三、备份老版本Gitlab数据四、确定升级路线五、升级(共分3个版本升级)5.1 升级第一步(17.1.2 > 17.3.7)5.2 升级第二步(17.3.7 > 17.5.3)5.3 升级第三步(17.5.3 > 17.6.1) 六、web端访问gitlab服务 一…

在Java的xml的sql语句里面的某一个参数是list集合的时候

经常在Java里面,遇到这样的问题,sql的一个查询语句,它的某一个参数是一个List集合,然而,在xml.mapper文件里面的时候,不知道如何去组成这个查询语句,不知道兄弟们是否经常忘记如何去写这个语句&…

前端技术(23) : 聊天页面

来源: GPT生成之后微调 效果图 HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>聊天</t…

内存图及其画法

所有的文件都存在硬盘上&#xff0c;首次使用的时候才会进入内存 进程&#xff1a;有自己的Main方法&#xff0c;并且依赖自己Main运行起来的程序。独占一块内存区域&#xff0c;互不干扰。内存中有一个一个的进程。 操作系统只认识c语言。操作系统调度驱动管理硬件&#xff0…

树与图深度优先遍历——acwing

题目一&#xff1a;树的重心 846. 树的重心 - AcWing题库 分析 采用暴力枚举&#xff0c;试探每个点&#xff0c;除去之后&#xff0c;连通分量最大值是多少&#xff0c; 各个点的最大值找最小的 因为可以通过 dfs 来得到 根u以下点数&#xff0c;以及可以求各分树的点数&am…

Qt Qtablewidget 标题 QHeaderView 增加可选框 QcheckBox

创建自定义QHeaderView #pragma once#include <QObject> #include <QHeaderView> #include <QPainter> #include <QMouseEvent>class SSHeaderView : public QHeaderView {Q_OBJECTprivate:bool isChecked;int m_checkColIdx; public:SSHeaderView(i…

Data Uncertainty Learning in Face Recognition 论文阅读

Data Uncertainty Learning in Face Recognition 论文阅读 Abstract1. Introduction2. Related Work3. Methodology3.1. Preliminaries3.2. Classification-based DUL for FR3.3. Regression-based DUL for FR3.4. Discussion of Related Works 4. Experiments4.1. Datasets an…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法&#xff08;朴素版&#xff09;2.2、Dijkstra算法&#xff08;堆优化版&#xff09;2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

典型常见的知识蒸馏方法总结一

来源&#xff1a;https://github.com/HobbitLong/RepDistiller收录的方法 NeurIPS2015: Distilling the Knowledge in a Neural Network 知识蒸馏开山之作&#xff0c;从logits中蒸馏知识&#xff0c;KL散度损失 ICLR2015&#xff1a;FitNets: Hints for Thin Deep Nets A h…