手把手教你搭建FRP XTCP P2P打洞环境:告别中转,直连更快!
还在为FRP中转服务器的带宽和延迟烦恼吗?XTCP(P2P打洞)技术让你的客户端直连服务端,流量不再经过中转,速度更快,成本更低!
在日常开发与运维中,FRP(Fast Reverse Proxy)是解决内网穿透的利器。通常我们使用的是TCP/HTTP代理模式,所有流量都要经过frps服务端(VPS)中转。这种方式对服务器的带宽要求高,且会产生额外的网络延迟。
FRP还提供了一种更高效的XTCP (P2P) 模式。在此模式下,frps仅作为“信令服务器”,负责协助两个内网客户端(frpc)进行NAT(网络地址转换)打洞。一旦打洞成功,双方将建立点对点直连,数据不再流经服务端,实现了“加速”与“降本”的双重目标。
本文将带你在一套纯Linux模拟环境中,从零开始部署和测试FRP的XTCP模式,包括自建STUN服务器来提升打洞成功率。
为了模拟真实世界,我们设计了如下网络拓扑:
公网区:模拟互联网,包含FRP服务端(frps)和STUN服务器。
内网A:模拟公司或家庭内网,部署需要被访问的服务(如SSH)。
内网B:模拟另一个隔离的内网,作为访问端。
核心节点角色表:

实验版本:FRP
v0.68.0(TOML配置),兼容stunserver(STUNTMAN)。
为了方便实验,我们提供了一键脚本,也保留了详细的手动配置步骤,你可以根据喜好选择。
推荐:使用一键脚本
脚本位于仓库docs/scripts/frp-p2p/目录下。将所有脚本拷贝到对应主机,按顺序执行即可。
部署顺序:Core-Router→GW-A&GW-B→FRPS-Server→Node-A→Node-B

备选:手动配置(深入理解原理)
如果你希望更深入地理解每一步,请跟随以下手动步骤。
此服务器有两个任务:运行frps作为信令,运行stunserver辅助打洞。
配置文件/usr/local/frp/frps.toml:

启动服务:

FRP的XTCP打洞依赖STUN协议获取客户端NAT后的公网地址。为了最佳效果,我们部署一个支持Full模式的STUN服务器,它需要两个公网IP。
在FRPS-Server的网卡上添加第二个IP(示例IP为10.10.10.11):


别忘了放行防火墙端口:7000/tcp,3478/udp,3479/udp。
Node-A位于内网A(192.168.100.0/24),它提供了一个SSH服务(端口22)等待被访问。
配置文件/usr/local/frp/frpc.toml:

Node-B位于内网B(192.168.200.0/24),它将作为访问者,打洞连接到Node-A的SSH服务。
配置文件/usr/local/frp/frpc.toml:

配置完成后,访问端(Node-B)只需连接127.0.0.1:6000,即可尝试通过P2P通道连接到Node-A的22端口。
为了让内网节点能访问“公网”(10.10.10.0/24),需要配置网关的SNAT和转发规则。
以下为手动配置命令(在GW-A和GW-B上执行):

在所有服务启动后,让我们来见证奇迹的时刻!
检查状态:确保FRPS-Server、Node-A、Node-B上的frp进程均正常运行,日志无报错。
在Node-B上执行SSH命令:

如果一切顺利,你将成功登录到Node-A!此时,流量已经通过P2P直连,不再经过FRPS-Server。
验证直连:在Node-A或Node-B上使用ss -tn或tcpdump查看连接,你会看到对端IP是对方NAT网关的公网IP(如10.10.10.200),而不是frps的IP(10.10.10.10)。

实验中的secretKey和metadatas.token仅为示例,正式环境请务必使用强密码。
SSH的StrictHostKeyChecking=no仅用于实验,生产环境应开启主机密钥验证。
调试完毕后,请将frp和stunserver的日志级别从debug调整为info或warn,避免日志过多。
通过本文,你已经成功搭建了一个完整的FRP XTCP P2P打洞模拟环境,并体验了从服务端、网关到客户端的全流程配置。
XTCP模式是优化内网穿透体验的利器,尤其适合文件传输、远程桌面、数据库直连等大流量、低延迟敏感的场景。赶快动手试试吧,让你的内网服务飞驰在直连的快车道上!
阅读原文:https://mp.weixin.qq.com/s/GRMwn5-hCKSe4uyHGOYGzg