ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

EASYMESH-11-接入安全与扩展类

2026/8/24 14:53:29 拓冰建站 浏览量
EASYMESH-11-接入安全与扩展类 EasyMesh 核心模块深挖笔记(模块 9-17:接入安全与 R2/R3/R6 扩展类)学习目标:通过 EasyMesh R6 认证。本篇覆盖 9 个"接入安全 + R2/R3/R6 扩展类"模块。方法:协议原理为主线,prplMesh 源码作佐证(代码只用来印证"协议字段长这样、怎么处理")。代码路径:prplMesh/agent/src/beerocks/slave/tasks/、prplMesh/controller/src/beerocks/master/、prplMesh/framework/tlvf/风格沿用notes/EASYMESH-02-ieee1905-1-协议详解.md:每模块五段式 = 协议原理 → 关键 TLV/消息 → 抓包验证 → 实现要点(代码佐证) → 认证 Test Case(⚠️待核对)模块 9 Onboarding(PBC + DPP/EasyConnect)9.1 协议原理Onboarding 是"新设备入网"流程,EasyMesh 提供两条路径:PBC(Push Button Configuration):EasyMesh R1 即支持,源自 WPS 思路。用户在 Controller 与 Enrollee(待入网设备)上各按一次物理/虚拟按键,双方通过 1905.1 多播PUSH_BUTTON_EVENT/JOIN互相通告,再走 WSC M1-M8 完成配置。R6 仍保留作为兼容路径。DPP/EasyConnect(Wi-Fi Easy Connect):R2 引入,R4 标准化,R6 进一步强化(新增 DPP AKM)。用 QR 码/URI 引导密钥,做公钥认证 + 加密配置下发,安全性远高于 PBC。EasyMesh 在 DPP 中定义三个角色:Enrollee:待入网设备(带 DPP URI,可显示 QR 码)Configurator:通常是 Controller,签发 Connector、下发网络配置Proxy Agent:通常是 Agent,把 Enrollee 的 DPP 帧通过 1905.1 隧道转发给 Controller(Enrollee 不一定能直接够到 Controller)DPP 帧本身是 802.11 公共动作帧/GAS 帧,EasyMesh 用ENCAP_DPP把它封装进 1905.1 CMDU,让 DPP 能跨多跳网络跑。9.2 关键 TLV / 消息值消息/TLV用途0x000bPUSH_BUTTON_EVENT_NOTIFICATIONEnrollee 按键后多播,宣告"我要入网"0x000cPUSH_BUTTON_JOIN_NOTIFICATIONController 侧按键后多播,回应"我来配你"0x801dDPP_CCE_INDICATIONConfigurator/Proxy 通告 CCE(Configurator/Controller/Enrollee)能力0x8029PROXIED_ENCAP_DPPProxy Agent 把 DPP 帧隧道转发给 Controller0x802aDIRECT_ENCAP_DPP直连场景下 DPP 帧封装(不经 Proxy)0x8031DPP_BOOTSTRAPPING_URI_NOTIFICATION把 Enrollee 的 DPP URI 上报给 Controller0xd2TLV_DPP_CCE_INDICATIONCCE 能力位(ENABLE/DISABLE)0xcdTLV_1905_ENCAP_DPP封装 DPP 帧(含 frame_flags/dest_sta_mac/frame_type/encapsulated_frame)0xcfTLV_DPP_BOOTSTRAPPING_URI_NOTIFICATIONruid + bssid + backhaul_sta_addr + dpp_uri0xd3TLV_DPP_CHIRP_VALUEChirp 通知(Enrollee 发的 DPP 发现 chirp 帧)TLV_1905_ENCAP_DPP的frame_type区分两类 DPP 帧:DPP_PUBLIC_ACTION_FRAME(0)、GAS_FRAME(1)。9.3 抓包验证过滤:ieee1905 (msg.type == 0x801d || msg.type == 0x8029 || msg.type == 0x802a || msg.type == 0x8031),PBC 路径另加msg.type == 0x000b/0x000c。时序要点:Enrollee 按键 → 多播PUSH_BUTTON_EVENT(0x000b)(带 media_type 列表)Controller 按键 → 多播PUSH_BUTTON_JOIN(0x000c)DPP 路径:Enrollee 发 chirp → Proxy Agent 用CHIRP_NOTIFICATION(0x802f)上报 → Controller 与 Enrollee 通过PROXIED_ENCAP_DPP(0x8029)交换 DPP Auth/Config 帧Enrollee 把自己的 DPP URI 通过DPP_BOOTSTRAPPING_URI_NOTIFICATION(0x8031)上报(含 ruid/bssid/backhaul_sta_addr/dpp_uri)9.4 实现要点(代码佐证)prplMesh 在 Agent 侧用proxy_agent_dpp_task处理 DPP 三类入站消息,体现 Proxy Agent 的"转发器"角色:代码佐证:prplMesh/agent/src/beerocks/slave/tasks/proxy_agent_dpp_task.cppswitch(cmdu_rx.getMessageType()){caseieee1905_1::eMessageType::DPP_CCE_INDICATION_MESSAGE:handle_dpp_cce_indication(cmdu_rx);returntrue;caseieee1905_1::eMessageType::CHIRP_NOTIFICATION_MESSAGE:handle_chirp_notification(cmdu_rx);returntrue;caseieee1905_1::eMessageType::PROXIED_ENCAP_DPP_MESSAGE:handle_proxied_encap_dpp(fd,src_mac,cmdu_rx);returntrue;}handle_proxied_encap_dpp按src_mac判向:来自 Controller 的转发给 ap_manager,来自 ap_manager 的转发给 Controller,并按frame_type区分 DPP Auth Request(0) 与 GAS(1):代码佐证:同文件if(src_mac==db-controller_info.bridge_mac){if(encap_1905_dpp_tlv-frame_type()==0){// DPP authentication request → 转给所有 radio 的 ap_managerfor(autoradio:db-get_radios_list()){...forward_cmdu_to_uds(ap_manager_fd,cmdu_rx);}}...}elseif(src_mac==net::network_utils::ZERO_MAC){// 来自 ap_manager(无线侧 chirp 上来),保存 fd 并转发给 Controllerif(encap_1905_dpp_tlv-frame_type()==1)active_onboarding_ap_manager_fd=fd;m_btl_ctx.forward_cmdu_to_controller(cmdu_rx);}DPP URI 上报 TLV 的字段定义(YAML 即协议线格式):代码佐证:prplMesh/framework/tlvf/yaml/tlvf/wfa_map/tlvDppBootstrappingUriNotification.yamltlvDppBootstrappingUriNotification:ruid:sMacAddrbssid:sMacAddr# 收到 URI 的本地接口(= BSSID)backhaul_sta_address:sMacAddr# 收到 URI 的 backhaul STA 地址dpp_uri:char# DPP URI(格式见 Wi-Fi Easy Connect 5.2.1)PBC 的PUSH_BUTTON_EVENT_NOTIFICATIONTLV:代码佐证:prplMesh/framework/tlvf/yaml/tlvf/ieee_1905_1/tlvPushButtonEventNotification.yamltlvPushButtonEventNotification:media_type_list_length:uint8_tmedia_type_list:sMediaType# 含 media_type + 802.11 specific info9.5 认证 Test Case(⚠️待核对)MAP-5.x 系列(R5/R6 Onboarding):⚠️待核对官方 Test Plan 中 PBC 与 DPP 的具体 case 编号重点:DPP Configurator/Proxy/Enrollee 三角色交互、URI 传递、CCE Indication 通告R6 新增 DPP AKM(0x0080)相关 case:⚠️待核对模块 10 Backhaul Management(回程链路管理)10.1 协议原理回程(Backhaul)是 Agent 上联 Controller 的上行链路。EasyMesh 支持三类回程:Wired:以太网回程(最优先,无无线开销)Wireless:Wi-Fi 回程(Agent 的 backhaul STA 关联到上游 AP)1905.1 secure:跨 1905.1 汇聚层的加密回程(用于异构链路安全互通)回程管理包括:链路选择(优先级 Wired Wireless)、回程切换(BACKHAUL_STEERING_REQUEST/RESPONSE)、回程能力查询(BACKHAUL_STA_CAPABILITY_QUERY/REPORT)。R2 起回程安全强制 SAE(见模块 11)。10.2 关键 TLV / 消息值消息用途0x8019BACKHAUL_STEERING_REQUESTController 要求 Agent 把 backhaul STA 引导到指定 BSSID0x801aBACKHAUL_STEERING_RESPONSEAgent 回应引导结果0x8027BACKHAUL_STA_CAPABILITY_QUERY查询 backhaul STA 能力0x8028BACKHAUL_STA_CAPABILITY_REPORT上报 backhaul STA 能力0xcbTLV_BACKHAUL_STA_RADIO_CAPABILITIESbackhaul STA 无线能力0xd0TLV_BACKHAUL_BSS_CONFIGURATION回程 BSS 配置10.3 抓包验证过滤:ieee1905 msg.type in {0x8019, 0x801a, 0x8027, 0x8028}关注:回程切换时 Agent 的 backhaul STA 是否完成"断开旧 BSSID → 关联新 BSSID → 1905.1 拓扑更新"全流程10.4 实现要点(代码佐证)Agent 侧backhaul_manager维护回程 FSM,回程引导有 10s 超时:代码佐证:prplMesh/agent/src/beerocks/slave/backhaul_manager/backhaul_manager.cppconstexprautobackhaul_steering_timeout=std::chrono::milliseconds(10000);conststd::string dev_set_config_backhaul_param="backhaul";// 主 FSM:backhaul_fsm_main() 处理回程连接、切换、断开if(!backhaul_fsm_main(continue_processing)){...}// 注册 BACKHAUL_STEERING_REQUEST 处理ieee1905_1::eMessageType::BACKHAUL_STEERING_REQUEST_MESSAGE,10.5 认证 Test Case(⚠️待核对)回程引导(Wired ↔ Wireless 切换):⚠️待核对 MAP-3.x / MAP-4.x 编号R2 SAE 回程:见模块 11模块 11 Security(SAE / PMF)11.1 协议原理R2 起回程安全强制使用SAE(Simultaneous Authentication of Equals),即 WPA3-Personal 的密钥协商协议。SAE 替代了 WPS/PSK 在回程中的角色,抗离线字典攻击。PMF(Protected Management Frames,IEEE 802.11w):保护单播/组播管理帧(如 dea