<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>虚拟局域网 on 我的博客</title><link>https://blog.5616760.com/tags/%E8%99%9A%E6%8B%9F%E5%B1%80%E5%9F%9F%E7%BD%91/</link><description>Recent content in 虚拟局域网 on 我的博客</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 08 Oct 2026 08:20:00 +0800</lastBuildDate><atom:link href="https://blog.5616760.com/tags/%E8%99%9A%E6%8B%9F%E5%B1%80%E5%9F%9F%E7%BD%91/index.xml" rel="self" type="application/rss+xml"/><item><title>P2WLAN 深度解析：跨平台 P2P 虚拟局域网的工作原理、NAT 穿透与自托管实践</title><link>https://blog.5616760.com/0037.html</link><pubDate>Thu, 08 Oct 2026 08:20:00 +0800</pubDate><guid>https://blog.5616760.com/0037.html</guid><description>&lt;p&gt;异地联机这件事，痛点一直很具体：你和朋友不在同一个网络里，想让两台机器「像在同一个局域网」一样互通，就得面对公网 IP、端口映射、动态域名、防火墙一连串问题。传统做法要么让一方暴露公网端口（不安全），要么全程走中转服务器（延迟高、带宽要花钱）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;P2WLAN 想做的就是把这件事收敛成一句话：给参与设备分配一个私有虚拟 IP，优先直连，直连不通再走加密中继。&lt;/strong&gt; 它是 MIT 许可的开源项目，客户端覆盖 Windows / macOS / Linux / Android，服务端（Control Plane + Relay）也可以自托管。&lt;/p&gt;&#10;&lt;p&gt;这篇不搬运安装说明，而是把这个项目&lt;strong&gt;拆开看&lt;/strong&gt;：它凭什么能打通两端、NAT 穿透到底怎么做的、安全边界在哪里、以及它现在的成熟度到底如何。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;数据说明&lt;/strong&gt;：本文信息来自项目 GitHub 仓库（&lt;code&gt;yhan-sun/p2wlan&lt;/code&gt;）与官方文档，数据快照时间为 &lt;strong&gt;2026-10-08&lt;/strong&gt;。项目仍在快速迭代（版本号尚在 &lt;code&gt;0.1.x&lt;/code&gt;），具体行为请以你所用版本与仓库最新文档为准。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="目录"&gt;目录&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%80p2wlan-%e6%98%af%e4%bb%80%e4%b9%88" &gt;P2WLAN 是什么&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%8c%e5%ae%83%e8%a6%81%e8%a7%a3%e5%86%b3%e7%9a%84%e6%98%af%e4%bb%80%e4%b9%88%e9%97%ae%e9%a2%98" &gt;它要解决的是什么问题&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%89%e5%b7%a5%e4%bd%9c%e6%96%b9%e5%bc%8f%e6%8e%a7%e5%88%b6%e9%9d%a2%e4%b8%8e%e6%95%b0%e6%8d%ae%e9%9d%a2%e5%88%86%e7%a6%bb" &gt;工作方式：控制面与数据面分离&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%9b%9b%e8%bf%9e%e6%8e%a5%e8%b7%af%e5%be%84%e4%b8%89%e7%ba%a7%e4%bc%98%e5%85%88%e7%ba%a7%e4%b8%8e%e7%8a%b6%e6%80%81%e6%9c%ba" &gt;连接路径：三级优先级与状态机&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%ba%94nat-%e7%a9%bf%e9%80%8f%e4%bb%8e%e5%9b%9b%e7%a7%8d-nat-%e7%b1%bb%e5%9e%8b%e5%88%b0%e6%89%93%e6%b4%9e%e7%9f%a9%e9%98%b5" &gt;NAT 穿透：从四种 NAT 类型到打洞矩阵&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%ad%e6%8a%80%e6%9c%af%e6%9e%b6%e6%9e%84%e5%9b%9b%e4%b8%aa%e6%a8%a1%e5%9d%97%e5%90%84%e7%ae%a1%e4%bb%80%e4%b9%88" &gt;技术架构：四个模块各管什么&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b8%83%e5%ae%89%e5%85%a8%e6%a8%a1%e5%9e%8b%e5%87%ad%e6%8d%ae%e5%88%86%e7%a6%bb%e4%b8%8e%e6%9c%80%e5%b0%8f%e6%b3%84%e9%9c%b2%e9%81%a5%e6%b5%8b" &gt;安全模型：凭据分离与最小泄露遥测&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%85%ab%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b%e4%bb%8e%e4%b8%8b%e8%bd%bd%e5%88%b0-ping-%e9%80%9a" &gt;快速开始：从下载到 ping 通&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e4%b9%9d%e6%88%bf%e9%97%b4%e6%8a%8a%e5%92%8c%e8%b0%81%e4%ba%92%e8%81%94%e7%8b%ac%e7%ab%8b%e7%bb%84%e7%bb%87" &gt;房间：把「和谁互联」独立组织&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e8%87%aa%e6%89%98%e7%ae%a1%e6%8a%8a%e5%9f%ba%e7%a1%80%e8%ae%be%e6%96%bd%e6%8f%a1%e5%9c%a8%e8%87%aa%e5%b7%b1%e6%89%8b%e9%87%8c" &gt;自托管：把基础设施握在自己手里&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%b8%80%e4%b8%8e%e5%90%8c%e7%b1%bb%e8%bd%af%e4%bb%b6%e5%af%b9%e6%af%94" &gt;与同类软件对比&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%ba%8c%e6%88%90%e7%86%9f%e5%ba%a6%e8%af%84%e4%bc%b0%e4%b8%8e%e9%80%82%e7%94%a8%e5%9c%ba%e6%99%af" &gt;成熟度评估与适用场景&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="#%e5%8d%81%e4%b8%89%e7%bb%93%e8%af%ad" &gt;结语&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;img alt="图：P2WLAN 官方宣传图——让异地设备像在同一局域网中一样互联" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0037-001.jpg"&gt;&lt;/p&gt;&#10;&lt;h2 id="一p2wlan-是什么"&gt;一、P2WLAN 是什么&#10;&lt;/h2&gt;&lt;p&gt;一句话定义：&lt;strong&gt;P2WLAN 是一个跨平台的 P2P 虚拟局域网（VirtualLAN）工具，把异地设备组织进一张私有虚拟网络，让它们像在同一局域网中一样互联。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;它的身份标签：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;属性&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;开源协议&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MIT&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仓库热度&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GitHub 约 1,936 star、76 fork、7 位贡献者（&lt;code&gt;yhan-sun/p2wlan&lt;/code&gt;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;主要语言&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rust（数据面/daemon 为主）、Dart（Flutter 客户端）、Go（服务端）、Shell/TypeScript（工具链）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;平台支持&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows、macOS、Linux、Android（Release 中另有 iOS 未签名包）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;最新客户端版本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;v0.1.168&lt;/code&gt;（2026-09-30）；服务端独立发布 &lt;code&gt;server-v0.1.167&lt;/code&gt;（2026-09-29）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仓库创建时间&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-07-16（迭代非常活跃，几乎每日发版）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="一个容易被忽略的前提"&gt;一个容易被忽略的前提&#10;&lt;/h3&gt;&lt;p&gt;新安装&lt;strong&gt;不预填&lt;/strong&gt;项目运营的 Control 或 Relay 地址，&lt;strong&gt;也不会自动注册账号&lt;/strong&gt;。你要么向管理员获取一个可信的 Control 地址，要么先自己部署一套服务端。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;这一点决定了 P2WLAN 的产品定位：它交付的是「软件」，不是「服务」。&lt;/strong&gt; 和那些「下载即登录、账号数据都在厂商手里」的组网工具相比，这条设计取向把「服务位置、账号与数据由谁掌握」的选择权交回给了使用者——代价是你要自己找到（或搭建）一台 Control。&lt;/p&gt;&#10;&lt;h3 id="它分配给你的是什么"&gt;它分配给你的是什么&#10;&lt;/h3&gt;&lt;p&gt;不是「端口映射」，也不是「域名转发」，而是一个&lt;strong&gt;私有虚拟 IP&lt;/strong&gt;。P2WLAN 采用三层（L3）TUN 网络模型：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;参与设备各自获得一个虚拟 IP（文档示例中形如 &lt;code&gt;10.21.0.5&lt;/code&gt;）&lt;/li&gt;&#10;&lt;li&gt;应用继续访问&lt;strong&gt;同一个虚拟 IP + 业务端口&lt;/strong&gt;，不用为每项服务单独配公网端口或动态域名&lt;/li&gt;&#10;&lt;li&gt;目标服务需要监听可访问地址，并允许对应的防火墙流量&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;三层网络，不是二层桥接&lt;/strong&gt;：P2WLAN 不提供以太网二层广播桥接。这意味着它&lt;strong&gt;不适合&lt;/strong&gt;依赖广播/组播发现的老式局域网游戏（如局域网联机的大厅列表），更适合「知道对方 IP 就能连」的场景。这是选型时要先确认的一点。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="二它要解决的是什么问题"&gt;二、它要解决的是什么问题&#10;&lt;/h2&gt;&lt;p&gt;把「异地设备互联」拆成需求层次，会更容易看清 P2WLAN 的位置：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;需求层次&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;典型场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;传统做法的问题&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;朋友联机&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Minecraft、Terraria 多人游戏&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要一方做端口映射或走第三方平台&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;远程访问自有服务&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NAS、HomeLab、Web 面板、数据库&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;逐个暴露公网端口，攻击面大&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;远程开发&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SSH、RDP、跨地区调试机&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;依赖跳板机或 VPN 账号体系&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;跨地域组网&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;家庭宽带、移动热点、校园网、多云主机互联&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;网络环境异构，公网 IP 不可控&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;这些场景的共同点是：&lt;strong&gt;设备分散在不同 NAT 后面，彼此都拿不到对方的稳定公网入口。&lt;/strong&gt; 而 P2WLAN 的答案是把问题从「怎么打通网络」转成「怎么在应用层建一条加密的私有链路」——这也是所有现代组网工具（Tailscale、ZeroTier、EasyTier 等）的共同思路，区别在于&lt;strong&gt;路径策略、安全边界和交付形态&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="三工作方式控制面与数据面分离"&gt;三、工作方式：控制面与数据面分离&#10;&lt;/h2&gt;&lt;p&gt;P2WLAN 最核心的设计，是把&lt;strong&gt;连接控制&lt;/strong&gt;和&lt;strong&gt;数据传输&lt;/strong&gt;彻底分开：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Control Plane&lt;/strong&gt;：身份、设备、虚拟 IP、凭据和信令&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Rust daemon&lt;/strong&gt;：虚拟网卡、路由、Peer、NAT 穿透、加密数据面和路径选择&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Relay&lt;/strong&gt;：只在 Direct 不可用时参与，负责转发密文&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; A["设备 A"] &lt;--&gt;|"LAN Direct / UDP P2P"| B["设备 B"]&#10; A --&gt;|"认证 / 信令"| C["Control Plane"]&#10; B --&gt;|"认证 / 信令"| C&#10; A -.-&gt;|"Direct 不可用"| R["Encrypted Relay"]&#10; R -.-&gt; B&#10;&#10; style A fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style B fill:#3b82f6,stroke:#1e40af,color:#fff&#10; style C fill:#8b5cf6,stroke:#6d28d9,color:#fff&#10; style R fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;为什么这个分离很重要？&lt;/strong&gt; 因为控制面只负责「让两端互相知道对方在哪」，真正跑业务的流量走的是&lt;strong&gt;端到端加密的数据面&lt;/strong&gt;。这带来两个直接后果：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;直连成功后，业务流量不消耗中继服务器带宽&lt;/strong&gt;——中继只是「兜底」，不是「必经」&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;中继拿到的是密文&lt;/strong&gt;，它看不到业务明文（但它仍可能观察元数据，见第七节）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;还有一条边界值得注意：&lt;strong&gt;部署了 Control/Relay，服务器不会自动变成虚拟网络节点。&lt;/strong&gt; 服务端只是「协调者」，要让它也成为节点，还得单独装客户端并连接。&lt;/p&gt;&#10;&lt;h2 id="四连接路径三级优先级与状态机"&gt;四、连接路径：三级优先级与状态机&#10;&lt;/h2&gt;&lt;p&gt;P2WLAN 的连接策略可以概括成一条优先级链：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;LAN Direct → IPv6 / IPv4 UDP Direct → Encrypted Relay&lt;/strong&gt;&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD&#10; S["开始建立连接"] --&gt; L{"同一局域网？"}&#10; L --&gt;|"是"| D1["LAN Direct"]&#10; L --&gt;|"否"| U{"IPv6 / IPv4 UDP 打洞成功？"}&#10; U --&gt;|"是"| D2["Direct（P2P 直连）"]&#10; U --&gt;|"否"| W["保留 5 秒直连窗口&lt;br/&gt;同时准备 Relay"]&#10; W --&gt; R["Encrypted Relay&lt;br/&gt;（转发密文）"]&#10; R -.-&gt;|"出现新的直连证据"| U&#10; D2 -.-&gt;|"Direct 失活"| R&#10;&#10; style D1 fill:#10b981,stroke:#047857,color:#fff&#10; style D2 fill:#10b981,stroke:#047857,color:#fff&#10; style W fill:#94a3b8,stroke:#475569,color:#fff&#10; style R fill:#f59e0b,stroke:#b45309,color:#fff&lt;/pre&gt;&lt;p&gt;关键机制有三条：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;默认先保留 5 秒直连窗口&lt;/strong&gt;，同时准备 Relay；窗口结束后可使用已确认的加密 Relay&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;已建立的 Direct 失活时允许 Relay 兜底&lt;/strong&gt;，并继续尝试恢复直连&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;应用始终沿用虚拟 IP&lt;/strong&gt;——路径在 Direct / Relay 之间切换，上层业务无感&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="客户端能看到的连接状态"&gt;客户端能看到的连接状态&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;状态&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;LAN Direct&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通过本地网络直接通信&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Direct&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通过公网 UDP 建立 P2P 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Relay&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通过 Relay 转发加密数据&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Connecting&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;正在建立或确认连接路径&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Offline&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;对端离线或当前没有可用路径&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;「连接路径看得见」是这类工具里体验差异很大的一环。P2WLAN 把&lt;strong&gt;在线设备、Direct/Relay 标签、延迟、收发信息&lt;/strong&gt;都摆在客户端里，并提供内置诊断（&lt;code&gt;p2wlan doctor&lt;/code&gt;、&lt;code&gt;p2wlan route verify&lt;/code&gt;）——出问题时能定位到「是没打通」还是「打通的路径不对」。&lt;/p&gt;&#10;&lt;h2 id="五nat-穿透从四种-nat-类型到打洞矩阵"&gt;五、NAT 穿透：从四种 NAT 类型到打洞矩阵&#10;&lt;/h2&gt;&lt;p&gt;这是全篇技术含量最高的部分，也是判断一个组网工具「功底」的地方。&lt;/p&gt;&#10;&lt;h3 id="51-四种经典-nat-类型"&gt;5.1 四种经典 NAT 类型&#10;&lt;/h3&gt;&lt;p&gt;P2WLAN 文档使用 &lt;a class="link" href="https://www.rfc-editor.org/rfc/rfc3489#section-5" target="_blank" rel="noopener"&#10; &gt;RFC 3489 的经典名称&lt;/a&gt;帮助理解，但强调&lt;strong&gt;实际策略按 &lt;a class="link" href="https://www.rfc-editor.org/rfc/rfc4787" target="_blank" rel="noopener"&#10; &gt;RFC 4787 的映射与过滤行为&lt;/a&gt;分别测量&lt;/strong&gt;，不把各家软件的 NAT1–NAT4 编号当作统一标准。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;NAT 类型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;映射与入站规则&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;对打洞的影响&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;全锥形（Full Cone）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同一本地端口使用稳定公网映射；映射存在时接收入站包，不限制来源&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;对称 NAT 一端可向该稳定入口发包，对端学习实际源地址并回包&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;受限锥形（Restricted Cone）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;公网映射稳定；只接收本端已发包目标 IP 的入站包，不限定其源端口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;先向对端公网 IP 发包后，可接收对称 NAT 改变源端口的探测包&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;端口受限锥形（Port Restricted Cone）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;公网映射稳定；入站源 IP 和端口必须与本端已发包的目标一致&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;与锥形 NAT 可互相开放映射；与对称 NAT 组合时需找到实际目标端口&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;对称 NAT（Symmetric）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;公网映射随目标变化；经典模型只允许已访问的目标 IP 和端口回包&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;两端均为此类时，需要协调两端的实际映射与过滤窗口&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="52-打洞支持速查矩阵"&gt;5.2 打洞支持速查矩阵&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;按行找本端、按列找对端，看交叉格即可。&lt;/strong&gt; 前提是两端可联系同一 Control、UDP 未被阻断、公网 IP 稳定、映射仍有效，且主机防火墙允许通信。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;🟢 常规支持&lt;/strong&gt;：常规 UDP 探测与经认证的源地址学习可建立直连路径。&lt;strong&gt;🟡 条件支持&lt;/strong&gt;：需要结合实测端口规律、过滤规则与协调探测；条件不满足时自动使用可达的 Relay。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;本端 ↓ / 对端 →&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;全锥形&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;受限锥形&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口受限锥形&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;对称 NAT&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;全锥形&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;受限锥形&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;端口受限锥形&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟡 条件&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;对称 NAT&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟢 常规&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟡 条件&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🟡 双端条件&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="53-对称-nat-不等于放弃直连"&gt;5.3 「对称 NAT 不等于放弃直连」&#10;&lt;/h3&gt;&lt;p&gt;这张矩阵里最值得读的是最后一格。&lt;strong&gt;P2WLAN 不会仅凭「对称 NAT」标签就放弃直连。&lt;/strong&gt; 对条件组合，客户端按实测能力选择不同策略：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;端口预测&lt;/strong&gt;：依据实测的端口分配规律（步长、范围、作用域）预测对端可能使用的端口&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;固定锚&lt;/strong&gt;：双方测量均支持时，使用 2、4 或 8 个 socket 建立稳定入口&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;有界生日探测（birthday probe）&lt;/strong&gt;：在有限候选预算内做概率性覆盖&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;而当&lt;strong&gt;双端高熵随机映射叠加严格过滤&lt;/strong&gt;时，项目选择优先保障 Relay 通信，并在出现新的直连证据时再尝试恢复直连。这种「&lt;strong&gt;能测就测、测不通就退、退了还继续试&lt;/strong&gt;」的策略，比简单的「对称 NAT 直接走中继」要细腻得多——工程上后者好实现，前者体验更好。&lt;/p&gt;&#10;&lt;h3 id="54-其他网络条件"&gt;5.4 其他网络条件&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;其他网络条件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;连接路径&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一端有可达公网 IPv4，UDP 与防火墙放行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;另一端可主动连接该公网入口，无需两端同时预测 NAT 端口&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;两端公网 IPv6 可达，UDP 与防火墙放行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;优先尝试 IPv6 直连，绕过 IPv4 NAT&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv4 UDP 被阻断，且无其他可用直连路径&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;🔴 无法通过该 UDP 路径打洞，使用可达的 TLS Relay&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;一个重要的口径提醒&lt;/strong&gt;：多层 NAT、CGNAT、校园网和移动网络描述的是&lt;strong&gt;部署环境&lt;/strong&gt;，不能单独决定矩阵中的类型。同一个「校园网」，在不同学校、不同出口策略下的映射与过滤行为可能完全不同。所以&lt;strong&gt;任何 NAT 类型标签都只是参考，实测才算数&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="55-怎么衡量打洞成功率"&gt;5.5 怎么衡量「打洞成功率」&#10;&lt;/h3&gt;&lt;p&gt;项目在文档里给了一个很专业的验证口径，值得单独记下来——&lt;strong&gt;别把中继连通算作打洞成功&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;指标&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;定义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;UDP 打洞成功率&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在规定时间内经 IPv4 NAT 打洞建立双向业务的轮次 / 全部打洞轮次&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;总体直连率&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;含 LAN / IPv6 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;业务可用率&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;含 Relay&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;同时应报告&lt;strong&gt;失败轮次、首次可用时间、RTT 和吞吐&lt;/strong&gt;。这个口径本身就说明了一件事：&lt;strong&gt;打洞成功率取决于两端的映射与过滤规则、UDP 可达性、端口分配、重试时间和网络负载，不存在一个放之四海皆准的「成功率数字」。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="六技术架构四个模块各管什么"&gt;六、技术架构：四个模块各管什么&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;模块&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;技术&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;职责&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GUI&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Flutter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;登录、设备 / 房间管理、连接状态与诊断&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Data Plane / Daemon&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rust&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TUN、路由、Peer、NAT traversal、加密会话与 Relay fallback&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Virtual interface&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;macOS &lt;code&gt;utun&lt;/code&gt; / Windows Wintun / Linux TUN&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;为应用提供普通的三层虚拟网络接口&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Control Plane&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Go + SQLite&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;认证、设备注册、虚拟 IP、凭据、信令和 Relay 信息&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Relay&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Go&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Relay 连接、票据校验和密文转发&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;从技术选型能读出设计意图：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;数据面用 Rust&lt;/strong&gt;——TUN 读写、包处理、加密会话对性能和内存安全要求高，这是 Rust 的强项&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;虚拟网卡复用平台原生实现&lt;/strong&gt;（Wintun / utun / TUN）——不自己造轮子，直接给应用一个标准三层接口&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;服务端用 Go + SQLite&lt;/strong&gt;——单二进制、易部署，契合「自托管」的交付形态（部署时不需要在服务器上装 Go 或 Node.js）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;客户端用 Flutter&lt;/strong&gt;——一套代码覆盖 Windows / macOS / Linux / Android&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="数据面wireguard-like-noise"&gt;数据面：WireGuard-like Noise&#10;&lt;/h3&gt;&lt;p&gt;P2WLAN 使用自包含的 &lt;strong&gt;WireGuard-like Noise&lt;/strong&gt; 数据面，密码学组件包括 &lt;strong&gt;X25519、ChaCha20-Poly1305、BLAKE2s&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;这里必须澄清一点&lt;/strong&gt;：P2WLAN &lt;strong&gt;不是官方 WireGuard 实现，也不声明 WireGuard 互操作兼容&lt;/strong&gt;。它是「类 WireGuard 的 Noise 协议」，设计思路相近（Noise 握手 + 现代 AEAD），但不能和标准 WireGuard 节点互通。选型时不要默认它能和你的 WireGuard 网络对接。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="一个有意思的设计daemon-是路径事实的唯一所有者"&gt;一个有意思的设计：daemon 是路径事实的唯一所有者&#10;&lt;/h3&gt;&lt;p&gt;在架构文档里，有一句话特别值得品味：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;daemon 是活动路径事实的唯一所有者，Control 不推断或猜测数据面路径。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;这意味着：&lt;strong&gt;Control 不会根据 RTT、候选列表或在线标记去「猜」某条路径是不是 Direct&lt;/strong&gt;，它只持久化 daemon 权威上报的状态快照。服务端的只读管理台（&lt;code&gt;server/admin-ui&lt;/code&gt;）展示的 Connections 视图，也只是「daemon 权威单向路径观测」的呈现层，而不是另一套连接状态。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;这个「不推断」的约束，本质上是把「谁说了算」这件事定死&lt;/strong&gt;——避免了控制面和服务端各自维护一份可能不一致的路径状态。对分布式系统来说，这类边界划分比功能本身更能体现工程成熟度。&lt;/p&gt;&#10;&lt;h2 id="七安全模型凭据分离与最小泄露遥测"&gt;七、安全模型：凭据分离与最小泄露遥测&#10;&lt;/h2&gt;&lt;h3 id="71-凭据各司其职"&gt;7.1 凭据各司其职&#10;&lt;/h3&gt;&lt;p&gt;安全模型文档里明确划了一条线：&lt;strong&gt;设备控制面身份、数据面会话密钥、Relay ticket、JWT、管理控制台令牌、Relay 票据签名 key、撤权 feed token 和 TLS 私钥承担不同职责，不能互相替代。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;几条具体约束：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;管理控制台令牌&lt;strong&gt;只授权同一 Control 实例的只读管理 API&lt;/strong&gt;，不授予设备身份、房间成员身份或 Relay 数据连接权限&lt;/li&gt;&#10;&lt;li&gt;ticket 必须绑定 &lt;strong&gt;audience、region、设备/网络身份和短期过期时间&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Relay 在撤权 feed 未就绪或过期时，拒绝新的认证连接&lt;/strong&gt;（即「拿不到最新撤权名单，就不放新连接进来」）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="72-数据面中继看不到明文"&gt;7.2 数据面：中继看不到明文&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;业务数据在&lt;strong&gt;端点之间&lt;/strong&gt;使用加密会话&lt;/li&gt;&#10;&lt;li&gt;Relay 看到&lt;strong&gt;节点标识、时间、连接频率和包大小&lt;/strong&gt;等元数据，但&lt;strong&gt;不应看到业务明文&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Direct 只有在当前 generation 下完成&lt;strong&gt;加密确认&lt;/strong&gt;后才能成为有效路径；旧候选、旧 peer session 和旧授权成员&lt;strong&gt;不能提升路径&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="73-路径遥测最小泄露"&gt;7.3 路径遥测：最小泄露&#10;&lt;/h3&gt;&lt;p&gt;这是最能体现「隐私设计」的一段。客户端 daemon 上报给 Control 的活动路径遥测遵循&lt;strong&gt;最小泄露与代际围栏&lt;/strong&gt;原则：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;允许传输&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;绝不传输&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;抽象路径类型（direct / relay / connecting / probing / fallback_relay / failed / none）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;任何 IP 地址、端口、候选 endpoint&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;往返 RTT&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;WireGuard 密钥、对称会话密钥&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;握手代际围栏标识、迁移原因代码&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;报文载荷&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;同时用&lt;strong&gt;五级代际围栏&lt;/strong&gt;（&lt;code&gt;registration_seq&lt;/code&gt; &amp;gt; &lt;code&gt;network_generation&lt;/code&gt; &amp;gt; &lt;code&gt;peer_session_generation&lt;/code&gt; &amp;gt; &lt;code&gt;remote_candidate_epoch&lt;/code&gt; &amp;gt; &lt;code&gt;observation_revision&lt;/code&gt;）防御陈旧、越权或重放的路径上报；只有持有 &lt;code&gt;CONTROL_ADMIN_TOKEN&lt;/code&gt; 的管理员才能通过只读 Admin Connections API 检索路径观测。&lt;/p&gt;&#10;&lt;h3 id="74-一条必须知道的限制"&gt;7.4 一条必须知道的限制&#10;&lt;/h3&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;项目尚未完成独立安全审计，不声明安全认证。&lt;/strong&gt; 测试覆盖、CI 门禁和发布 manifest 不能替代外部审计或部署者自己的风险评估。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;这是本文里最需要读者记住的一句话。&lt;/strong&gt; 一个组网工具把「网络入口」开放给你，它的安全性直接决定了你的内网安全。项目文档主动声明「未审计」，是诚实；而使用者要做的，是在把它接入生产环境前，自己评估风险。&lt;/p&gt;&#10;&lt;h2 id="八快速开始从下载到-ping-通"&gt;八、快速开始：从下载到 ping 通&#10;&lt;/h2&gt;&lt;h3 id="81-先准备-control-地址"&gt;8.1 先准备 Control 地址&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;新安装不预填项目服务器，也不会自动注册。&lt;/strong&gt; 请向管理员获取可信的 Control 地址，或先完成自托管部署。需要互联的设备应使用&lt;strong&gt;同一个 Control&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="82-下载对应平台的包"&gt;8.2 下载对应平台的包&#10;&lt;/h3&gt;&lt;p&gt;前往 &lt;a class="link" href="https://github.com/yhan-sun/p2wlan/releases" target="_blank" rel="noopener"&#10; &gt;GitHub Releases&lt;/a&gt;，客户端包标签是 &lt;code&gt;vX.Y.Z&lt;/code&gt;；服务端是&lt;strong&gt;独立发布&lt;/strong&gt;的 &lt;code&gt;server-vX.Y.Z&lt;/code&gt;，&lt;strong&gt;不是客户端安装包&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;平台&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Release 文件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;状态&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;macOS 12+ Apple Silicon&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-macos-arm64.dmg&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;macOS 12+ Intel&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-macos-x64.dmg&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows x64&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-windows-x64-setup.exe&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Linux x64&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-linux-x64.tar.gz&lt;/code&gt;（GUI）/ &lt;code&gt;p2wlan-linux-x64-cli.tar.gz&lt;/code&gt;（CLI + daemon）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Linux arm64&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-linux-arm64-cli.tar.gz&lt;/code&gt;（CLI + daemon）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Android 7.0+ (API 24+) arm64&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;p2wlan-android-arm64-release.apk&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Linux 无桌面环境选 CLI 包，也可用固定版本安装脚本：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;P2WLAN_VERSION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;vX.Y.Z&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL &lt;span style="color:#e6db74"&gt;&amp;#34;https://raw.githubusercontent.com/yhan-sun/p2wlan/&lt;/span&gt;$P2WLAN_VERSION&lt;span style="color:#e6db74"&gt;/scripts/install-linux-cli.sh&amp;#34;&lt;/span&gt; -o /tmp/p2wlan-install.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sh /tmp/p2wlan-install.sh --version &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$P2WLAN_VERSION&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="83-配置-control-并登录"&gt;8.3 配置 Control 并登录&#10;&lt;/h3&gt;&lt;p&gt;客户端在登录页的「高级选项 → 自托管服务器」里填 Control 地址；CLI 用：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan config set control https://control.example.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan login -u your-name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan account show&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;code&gt;https://control.example.com&lt;/code&gt; 是&lt;strong&gt;占位示例&lt;/strong&gt;，必须替换成实际服务器地址。配置和登录命令&lt;strong&gt;用普通用户执行，不要加 &lt;code&gt;sudo&lt;/code&gt;&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="84-连接设备"&gt;8.4 连接设备&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;自己的设备互联&lt;/strong&gt;：各设备登录同一账号，启动个人网络：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan up&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan status&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;与朋友或其他账号互联&lt;/strong&gt;：使用同一个 Control，在客户端创建房间或通过房间号/邀请加入，再点房间里的「连接本机」。CLI 流程：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 房主创建房间，按提示设置房间密码，把房间号发给成员&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan room create --name my-room&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 成员加入：将 12345678 替换为实际的 8 位房间号&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan room join --code &lt;span style="color:#ae81ff"&gt;12345678&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 房主和成员：查看房间，并连接本机&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan room list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan room connect &lt;span style="color:#ae81ff"&gt;12345678&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan room show &lt;span style="color:#ae81ff"&gt;12345678&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;💡 &lt;strong&gt;两个最容易踩的坑&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;加入房间只建立成员关系，不会自动启动本机网络&lt;/strong&gt;——必须再执行 &lt;code&gt;room connect&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;p2wlan up&lt;/code&gt; 启动的是个人网络，不能代替 &lt;code&gt;p2wlan room connect&lt;/code&gt;&lt;/strong&gt;——房间使用独立的网络和虚拟 IP&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="85-用虚拟-ip-访问业务"&gt;8.5 用虚拟 IP 访问业务&#10;&lt;/h3&gt;&lt;p&gt;等待对端连接后，从设备列表或房间详情拿到对端在当前网络中的虚拟 IP（示例 &lt;code&gt;10.21.0.5&lt;/code&gt;，请替换为实际地址）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ping 10.21.0.5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh user@10.21.0.5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;游戏服务器、NAS、Web 面板或数据库同理：连对端虚拟 IP + 对应业务端口。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;「登录成功 / 设备在线 / 出现 Direct 标签」都不能单独证明业务可达&lt;/strong&gt;，必须实际验证目标服务。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="86-出问题时的排查顺序"&gt;8.6 出问题时的排查顺序&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan status --json &lt;span style="color:#75715e"&gt;# 看路径与状态&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan doctor &lt;span style="color:#75715e"&gt;# 环境自检&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan route verify &lt;span style="color:#75715e"&gt;# 验证路由&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan logs -f &lt;span style="color:#75715e"&gt;# 跟日志&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p2wlan support-bundle &lt;span style="color:#75715e"&gt;# 生成本地诊断包&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;code&gt;support-bundle&lt;/code&gt; 默认只生成&lt;strong&gt;本地&lt;/strong&gt;诊断包；&lt;strong&gt;只有确认接收方、内容和保存期限后，才显式添加 &lt;code&gt;--upload&lt;/code&gt; 上传&lt;/strong&gt;。这是一个很好的默认值——敏感诊断数据不会被「顺手」传走。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="九房间把和谁互联独立组织"&gt;九、房间：把「和谁互联」独立组织&#10;&lt;/h2&gt;&lt;p&gt;「房间」是 P2WLAN 里体验层面的一个亮点，解决的是&lt;strong&gt;边界问题&lt;/strong&gt;：把所有设备混在一个列表里，很快就会分不清谁该看见谁。&lt;/p&gt;&#10;&lt;p&gt;房间适合需要独立边界的临时或固定网络：一个 Minecraft 生存服、一次朋友联机、一组 NAS 维护设备、一个开发测试环境。客户端可以集中查看&lt;strong&gt;房间成员、在线状态、虚拟 IP、当前连接路径和延迟&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="图：P2WLAN 客户端首页——网络状态与在线设备" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0037-002.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="图：P2WLAN 互联页面——多房间管理与连接延迟" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0037-003.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="图：P2WLAN 房间详情——虚拟 IP、连接路径与延迟" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.5616760.com/img/0037-004.jpg"&gt;&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;截图来自项目官方 README，设备名称与数据均为演示数据。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="适用场景速查"&gt;适用场景速查&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;可以怎么用&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;NAS / HomeLab&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在外网访问运行 P2WLAN 的 NAS、家庭服务器或虚拟机上的服务，不必逐个暴露公网端口&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Minecraft / Terraria 联机&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;把朋友的电脑加入同一房间，直接用虚拟 IP 访问自建服务器&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;自建服务器&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;访问 Web 应用、API、数据库、面板、游戏服，以及仅希望在私网开放的服务&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;远程开发&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SSH、RDP、数据库连接、开发测试机互联、跨地区设备调试&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;跨地域组网&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;家庭宽带、移动热点、校园网、云主机、不同云厂商之间互联&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;安装 P2WLAN 不会自动把所在家庭或办公网络中的其他设备接入虚拟网络。&lt;/strong&gt; 上面所有访问示例都以「目标设备也运行 P2WLAN」为前提。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="十自托管把基础设施握在自己手里"&gt;十、自托管：把基础设施握在自己手里&#10;&lt;/h2&gt;&lt;p&gt;Control Plane 和 Relay 都位于仓库的 &lt;code&gt;server/&lt;/code&gt; 目录，固定服务端发布包使用 &lt;code&gt;server-vX.Y.Z&lt;/code&gt; 标签，公开安装与升级路径是 &lt;strong&gt;Linux + systemd&lt;/strong&gt;；普通部署&lt;strong&gt;不需要在服务器上安装 Go 或 Node.js&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="101-服务端端口"&gt;10.1 服务端端口&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;组件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;默认内部端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;公网边界&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;18080&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通过可信 HTTPS 反代公开&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Relay TLS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;18081&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;按需公开&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Relay metrics / readyz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;18082&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;仅 loopback&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;Control 的反向代理必须支持 WebSocket Upgrade&lt;/strong&gt;（信令依赖 WSS）；&lt;strong&gt;Relay TLS 不能用 Control 的普通 HTTP 代理规则代替&lt;/strong&gt;——证书、audience、region、ticket keyring 和撤权 feed 必须同时匹配。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="102-部署需要准备什么"&gt;10.2 部署需要准备什么&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;可信的 Control HTTPS/WSS 入口&lt;/li&gt;&#10;&lt;li&gt;Relay TLS 入口&lt;/li&gt;&#10;&lt;li&gt;持久化数据库&lt;/li&gt;&#10;&lt;li&gt;匹配的认证配置&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;配套文档分三份，职责清晰：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;自托管指南&lt;/strong&gt;：固定版本安装、配置、TLS、管理台与 Docker Compose 边界&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;升级与恢复&lt;/strong&gt;：备份、升级、恢复与回滚&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;运维指南&lt;/strong&gt;：服务管理、健康检查、日志与证书&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="103-自托管的成本与责任"&gt;10.3 自托管的成本与责任&#10;&lt;/h3&gt;&lt;p&gt;README 里有一句很坦诚的话：&lt;strong&gt;自托管的服务器、带宽和域名费用由部署者承担。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;这是「掌握自己数据」的对价。对个人/小团队来说，一台低配云主机 + 一个域名通常就够了；但&lt;strong&gt;带宽&lt;/strong&gt;要留意——一旦大量连接落到 Relay 上，中继的出口带宽会直接变成账单。好消息是：&lt;strong&gt;直连优先的设计本身就在帮你省这笔带宽&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h2 id="十一与同类软件对比"&gt;十一、与同类软件对比&#10;&lt;/h2&gt;&lt;h3 id="111-功能与取舍"&gt;11.1 功能与取舍&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;软件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;主要优势&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;使用取舍&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;P2WLAN&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;房间式联机、图形客户端、直连优先与加密 Relay 一体提供；客户端和服务端均以 MIT 许可开源，适合朋友联机、NAS 与远程开发&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要管理员提供 Control 或自行部署；采用三层 TUN 网络，参与设备需安装客户端，应用使用虚拟 IP 访问，不提供以太网二层广播桥接&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Tailscale&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;托管控制面、WireGuard 数据面、访问策略与设备管理，适合个人远程访问和组织内访问控制&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用官方服务或另行部署 Headscale；Headscale 功能范围需单独核对；双端 hard NAT 无法直连时使用 Peer Relay / DERP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ZeroTier&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;虚拟以太网与二层桥接能力，适合需要二层网络语义或物理网络整合的场景；可自建网络控制器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要配置网络成员、授权和规则；桥接物理局域网需额外配置；对称 NAT、多层 NAT 与严格过滤可能使流量走中继&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;EasyTier&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;去中心化 mesh、多协议传输、子网代理和自动路由；官方说明支持 NAT4↔NAT4 打洞&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;各节点需统一网络标识和密钥，选择可达入口；多节点中继、子网与协议配置由部署者按拓扑管理&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;如果你希望用图形界面把朋友、家庭设备和开发机组织进独立房间，同时掌握自己的 Control 与 Relay，P2WLAN 很适合这类需求。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="112-连接策略横向对照"&gt;11.2 连接策略横向对照&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;网络条件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;P2WLAN&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tailscale&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ZeroTier&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;EasyTier&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;常见家庭 NAT，UDP 可双向通信&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动 UDP 打洞&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动 NAT 穿透&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动 UDP 打洞&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动 UDP 打洞&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;双端受限 NAT（目的相关映射 + 严格过滤）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;按测量选择端口预测、固定锚或生日探测；结果取决于端口规律与过滤&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官方说明双端 hard NAT 无法建立直连，使用中继&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官方指出对称 NAT 不利于 P2P，可能使用中继&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;官方声明支持 NAT4↔NAT4；具体组合需实测&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;两端公网 IPv6 可达，防火墙允许 UDP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IPv6 直连&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;UDP 被阻断，转发入口仍可达&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLS 加密 Relay&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DERP / 可达的 Peer Relay&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TCP fallback&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;按配置使用 TCP / WSS 等可达节点转发&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;⚠️ &lt;strong&gt;这张表比较的是「连接策略」，不是「成功率排名」。&lt;/strong&gt; 项目文档自己写得很清楚：&lt;strong&gt;未提供四款软件在同一组真实网络、明确版本和同一观测窗口下的横向实测数据&lt;/strong&gt;。任何声称「A 的打洞率比 B 高 X%」的说法，在缺少统一测试条件时都站不住脚。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="十二成熟度评估与适用场景"&gt;十二、成熟度评估与适用场景&#10;&lt;/h2&gt;&lt;p&gt;看完这么多文档，最后给一个&lt;strong&gt;不吹不黑&lt;/strong&gt;的判断。&lt;/p&gt;&#10;&lt;h3 id="121-值得肯定的地方"&gt;12.1 值得肯定的地方&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;工程深度&lt;/strong&gt;：NAT 穿透的文档细到「端口预测的步长覆盖、固定锚的 socket 数量、生日探测的候选预算」，这不是玩具项目的深度&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;边界清晰&lt;/strong&gt;：控制面不推断数据面路径、中继不解密、遥测不传 IP/端口/密钥——这些约束是&lt;strong&gt;写在文档里并作为设计原则的&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;交付形态诚实&lt;/strong&gt;：默认不预填官方服务器、support-bundle 默认不上传、主动声明「未完成独立安全审计」&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;文档体系完整&lt;/strong&gt;：&lt;code&gt;docs/&lt;/code&gt; 下分了 explanation / guides / reference 三层，覆盖架构、安全、网络、运维、发布契约&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="122-需要留意的地方"&gt;12.2 需要留意的地方&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;关注点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;版本阶段&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;客户端仍在 &lt;code&gt;0.1.x&lt;/code&gt;，仓库 2026-07 才创建，属于&lt;strong&gt;早期快速迭代期&lt;/strong&gt;，接口与行为可能变动&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;未独立安全审计&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;项目主动声明未审计；把它接入生产内网前请自行评估风险&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;需要 Control&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;没有「下载即用」的托管入口，必须先有 Control（自建或向管理员获取）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;非官方 WireGuard&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不能与标准 WireGuard 节点互通&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;三层网络&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不提供二层广播桥接，依赖广播发现的局域网游戏不适用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;生态规模&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;7 位贡献者、76 fork，社区规模远小于 Tailscale / ZeroTier，遇到冷门问题的可求助面较窄&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="123-建议的适用判断"&gt;12.3 建议的适用判断&#10;&lt;/h3&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD&#10; S["你需要异地组网吗？"] --&gt; A{"愿意自己部署 / 已有 Control？"}&#10; A --&gt;|"是"| B{"需要二层广播桥接？"}&#10; A --&gt;|"否"| X["先找托管方案&lt;br/&gt;或向管理员获取 Control"]&#10; B --&gt;|"否"| P1["✅ P2WLAN 值得一试"]&#10; B --&gt;|"是"| P2["❌ 选 ZeroTier 等&lt;br/&gt;支持二层的方案"]&#10; P1 --&gt; C{"要接生产内网？"}&#10; C --&gt;|"是"| P3["⚠️ 先做风险评估&lt;br/&gt;（项目未独立审计）"]&#10; C --&gt;|"否"| P4["✅ 联机 / 个人远程访问&lt;br/&gt;可以放心用"]&#10;&#10; style P1 fill:#10b981,stroke:#047857,color:#fff&#10; style P4 fill:#10b981,stroke:#047857,color:#fff&#10; style P3 fill:#f59e0b,stroke:#b45309,color:#fff&#10; style P2 fill:#ef4444,stroke:#b91c1c,color:#fff&#10; style X fill:#94a3b8,stroke:#475569,color:#fff&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;具体来说，这几类人最值得试：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;想和朋友联机，又不想折腾端口映射的玩家&lt;/li&gt;&#10;&lt;li&gt;有 NAS / HomeLab，想在外网访问又不想暴露公网端口的自建用户&lt;/li&gt;&#10;&lt;li&gt;需要跨地区连开发机、且希望&lt;strong&gt;数据掌握在自己手里&lt;/strong&gt;的开发者&lt;/li&gt;&#10;&lt;li&gt;对 NAT 穿透本身感兴趣，想读一份写得足够细的工程实现&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;这几类建议先观望：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;需要二层网络语义（广播/组播发现）的场景&lt;/li&gt;&#10;&lt;li&gt;要求「开箱即用托管服务」、不想碰服务端的团队&lt;/li&gt;&#10;&lt;li&gt;要接入生产内网、且对安全审计有硬性合规要求的组织&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="十三结语"&gt;十三、结语&#10;&lt;/h2&gt;&lt;p&gt;P2WLAN 这类工具的价值，不在于它发明了什么新协议——&lt;strong&gt;Noise 握手、UDP 打洞、加密中继，都是成熟技术的组合&lt;/strong&gt;。它真正的看点在于&lt;strong&gt;组合的方式&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;把「控制面」和「数据面」分开，让中继只做兜底&lt;/li&gt;&#10;&lt;li&gt;把「对称 NAT」当成一个待测量的条件，而不是一个放弃直连的理由&lt;/li&gt;&#10;&lt;li&gt;把「谁拥有路径事实」这件事写进架构约束，而不是靠约定&lt;/li&gt;&#10;&lt;li&gt;把「未审计」这句话明明白白写在文档里&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;对使用者来说，它给出的选择也很清楚：&lt;strong&gt;你用「自己找一台 Control」的成本，换「服务位置、账号和数据由自己掌握」的确定性。&lt;/strong&gt; 这个交换是否值得，取决于你更在意省事，还是更在意掌控。&lt;/p&gt;&#10;&lt;p&gt;项目仍在 &lt;code&gt;0.1.x&lt;/code&gt; 阶段，迭代很快——如果你打算长期使用，建议&lt;strong&gt;锁定具体版本&lt;/strong&gt;，并定期回看仓库的发布说明。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;风险提示&lt;/strong&gt;：本文为开源项目 P2WLAN 的架构与文档解读，所有功能描述、NAT 矩阵与对比数据均来自项目官方仓库与文档（数据快照 2026-10-08）。文中涉及的项目&lt;strong&gt;尚未完成独立安全审计&lt;/strong&gt;，项目方亦不声明安全认证；实际部署与使用请以仓库最新源码、测试与官方文档为准，并在接入生产环境前自行完成风险评估。与 Tailscale、ZeroTier、EasyTier 的对比仅为连接策略层面的说明，&lt;strong&gt;不构成成功率排名或性能承诺&lt;/strong&gt;，各项目功能与条件以其当前官方文档为准。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>