EasyTier + FRP 低部署成本实现 P2P 组网

8 阅读2分钟

*2026年3月27日修改

一、需求

外部网络访问家庭内网服务,传统方案成本高、配置复杂。本方案使用 EasyTier + FRP,以低部署成本实现 P2P 组网,外部设备可直连内网服务。

二、架构

  • 信令节点:通过 FRP 暴露至公网,提供设备注册与发现。同时承担 P2P 直连失败时的流量中转。
  • 主机节点:运行于内网,提供实际服务。虚拟 IP 固定(如 10.255.1.1/8),外部客户端通过该 IP 访问。
  • 外部客户端:启动后向信令节点注册,获取主机信息,优先尝试 P2P 直连,失败则走中转。

三、通信流程

  1. 客户端通过 FRP 映射地址联系信令节点,获取主机虚拟 IP。
  2. 客户端直接向主机发起连接,优先 TCP 直连或 UDP 打洞。
  3. 若直连失败,自动切换为信令节点中转。

四、部署原则

信令节点与主机节点分开运行。
合并运行时,两个功能在同一进程内,外部设备可能误判目标在本地,不触发直连,所有流量绕道中转,影响性能。

五、配置示例

信令节点(通过 FRP 暴露)

hostname = "XUYINGJUN_frp"
ipv4 = "10.255.1.2/8"
listeners = ["tcp://0.0.0.0:11011"]
mapped_listeners = ["tcp://<frp公网地址>:11011"]
[network_identity]
network_name = "name"
network_secret = "password"
[[peer]]
uri = "tcp://localhost:11010"

主机节点

hostname = "XUYINGJUN_et"
ipv4 = "10.255.1.1/8"
listeners = [
    "tcp://0.0.0.0:11010",
    "udp://0.0.0.0:11010",
]
[network_identity]
network_name = "name"
network_secret = "password"
[[peer]]
uri = "tcp://<其他信令节点公网地址>:11010"  # 请勿填写本地信令节点的frp映射
[[peer]]
uri = "tcp://localhost:11011"
disable_sym_hole_punching = true
enable_kcp_proxy = true

FRP 服务端

[common]
server_addr = <frp服务端地址>
server_port = 7000

[<自定义隧道名称>]
type = tcp
local_ip = 127.0.0.1
local_port = 11011
remote_port = 11011

本文为我原创,未经授权禁止转载 | bilibili UID1319899187 | 掘金 ID1048290992076985