frp xtcp P2P 穿透详解:如何快速实现两台内网机器不走服务器中转的直连

发布时间:2026/9/3 22:29:31
frp xtcp P2P 穿透详解:如何快速实现两台内网机器不走服务器中转的直连 frp xtcp P2P 穿透详解如何快速实现两台内网机器不走服务器中转的直连【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frpfrp是一款高性能的反向代理内网穿透工具其xtcpP2P 打洞模式可以让两台都藏在 NAT/防火墙后的内网机器建立点对点直连隧道——数据不再经过 frps 服务器中转延迟更低、带宽不再受服务器限制。本文将带你快速理解 xtcp 的工作原理、完成两台内网机器的直连配置并掌握隧道保活与回退等实用技巧。一、为什么需要 xtcpstcp 与 xtcp 的区别frp 有两种访问别人内网服务的模式对比项stcpSecret TCPxtcpP2P 打洞数据路径访客 → frps 服务器 → 目标服务访客 →直连隧道→ 目标服务延迟较高多一跳低点对点带宽占用占用服务器带宽几乎不占服务器带宽成功率高只要服务器可达即可取决于双方 NAT 类型典型场景远程访问内网 Web远程桌面、大流量低延迟需求 一句话理解stcp 把服务器当传话人xtcp 让双方自己打电话服务器只当红娘。二、xtcp 是如何打通的4 步握手流程xtcp 的核心是一套UDP 打洞NAT Hole Punching机制整个过程分为 4 步对应源码 pkg/nathole/nathole.go1️⃣ STUN 探测与 NAT 类型识别两台 frpc 客户端各自向公共 STUN 服务器发起探测确认自己的公网映射地址并判断 NAT 类型EasyNAT / HardNAT与端口映射行为pkg/nathole/classify.go。STUN 服务器默认使用stun.easyvoip.com:3478可通过配置项natHoleStunServer覆盖见 pkg/config/v1/client.go。2️⃣ 通过 frps 交换打洞信息访客端visitor先做 PreCheck确认目标代理在线随后双方把各自的公网候选地址通过 frps 服务器交换ExchangeInfo。注意这里服务器只转发少量元信息不中转任何业务数据。3️⃣ 同时发起 UDP 打洞frps 根据双方 NAT 特征选择打洞策略共 5 种 Detect Mode覆盖 EasyNAT/EasyNAT、HardNAT/EasyNAT、HardNAT/HardNAT 等组合指令双方在同一时刻向对方公网地址发送带 SID 的探测包MakeHole利用 NAT 的回包放行规则在防火墙上打出孔洞。4️⃣ 建立 QUIC 或 KCP 隧道孔洞打通后双方在直连的 UDP 通道上建立QUIC默认或KCP隧道见 client/visitor/xtcp.go。之后访客访问本地绑定端口数据就通过这条 P2P 隧道直达目标内网服务。三、配置教程三步实现内网直连以下以远程访问 A 机器的 22 端口SSH为例假设两台机器都运行 frpc且都连接到同一台 frps。步骤 1A 机器被访问方配置 xtcp 代理在 A 机器的 frpc 配置中添加 xtcp 类型代理完整示例见 conf/frpc_full_example.toml[[proxies]] name p2p_tcp type xtcp secretKey abcdefg localIP 127.0.0.1 localPort 22 allowUsers [user1] # 不填则默认只允许同用户连接步骤 2B 机器访客方配置 xtcp visitor在 B 机器的 frpc 配置中添加 visitor端口 9001 就是 B 本地能访问的入口[[visitors]] name p2p_tcp_visitor type xtcp serverName p2p_tcp secretKey abcdefg bindAddr 127.0.0.1 bindPort 9001 # 隧道保活与回退可选 keepTunnelOpen true maxRetriesAnHour 8 minRetryInterval 90步骤 3连接使用B 机器上执行ssh user127.0.0.1 -p 9001流量将经 P2P 隧道直达 A 机器的 SSH 服务。访客端源码逻辑见 client/visitor/xtcp.go有隧道则复用无隧道则阻塞等待打洞成功。四、关键配置速查保活、回退与打洞优化配置项所在侧作用keepTunnelOpenvisitor周期性探测并自动重建隧道保持长连接可用maxRetriesAnHour/minRetryIntervalvisitor限制每小时重连次数、最小重连间隔防止疯狂打洞fallbackTo/fallbackTimeoutMsvisitor打洞失败/超时时自动回退到 stcp走服务器中转保证可用性protocolvisitor隧道协议默认 QUIC也可设为kcpnatTraversal.disableAssistedAddrs两侧禁用局域网辅助地址打洞只用 STUN 发现的公网地址推荐做法同时配置keepTunnelOpen truefallbackTo stcp_visitor直连优先、失败兜底可用性接近 stcp性能接近 P2P。五、打洞失败怎么办NAT 类型自查xtcp 的成功率取决于 NAT 类型组合双 HardNAT 时难度最大。可以用内置命令直接检测本机 NAT 特征实现见 cmd/frpc/sub/nathole.gofrpc nathole discover --nat_hole_stun_server stun.easyvoip.com:3478输出会显示 NAT 类型EasyNAT/HardNAT、端口映射行为与公网地址。经验法则EasyNAT EasyNAT成功率最高几乎必通HardNAT EasyNAT需要端口猜测一般可通HardNAT HardNAT双方端口均随机变化时可能失败建议配置fallbackTo回退到 stcp。服务器端如何撮合打洞会话、分析 NAT 特征可参考 server/proxy/xtcp.go 与 pkg/nathole/controller.go客户端打洞逻辑见 client/proxy/xtcp.go。六、总结frp 的 xtcp 模式通过STUN 探测 → 信息交换 → 同步 UDP 打洞 → QUIC/KCP 隧道四步握手让两台内网机器绕过服务器建立直连实现低延迟、高带宽的 P2P 访问。只需在两端分别配置type xtcp的 proxy 和 visitor配合keepTunnelOpen保活与fallbackTo回退就能在享受直连性能的同时保证稳定可用。【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考