跳至主要内容

OpenWrt 自定义固件与 Purple WiFi 的集成

本指南提供了将 OpenWrt 自定义固件与 Purple WiFi 进行部署集成的完整方案。它涵盖了 CoovaChilli Captive Portal 配置、iptables walled garden 管理、利用 hostapd 实现的 802.1X 安全员工 WiFi,以及具有动态 VLAN 分配的多租户 PPSK 细分——为 IT 团队在任何支持 OpenWrt 的硬件上构建基于身份的网络提供了所需的精确配置步骤。

📖 9 分钟阅读📝 2,146 🔧 2 应用实例4 练习题📚 10 关键定义

收听本指南

查看播客转录
[0:00 - 1:00] 介绍与背景 欢迎收看 Purple 技术简报。我是您的主持人。在接下来的十分钟里,我们将深入分析 OpenWrt 定制固件与 Purple WiFi 的集成。如果您是正在酒店、零售或公共部门环境中部署定制固件的 IT 经理、网络架构师或 CTO,那么本次简报正是为您量身打造的。我们将抛开理论,为您提供配置 CoovaChilli、使用 802.1X 保护员工网络安全以及使用专用预共享密钥(PPSK)隔离多租户环境的具体操作指南。 为什么这很重要?因为部署像 OpenWrt 这样的定制固件能为您带来极高的灵活性和硬件独立性。但如果缺乏结构化的、基于身份的访问控制层,这种灵活性就会变成安全隐患。您需要安全地获取第一方数据、强制执行 GDPR 合规性,并可靠地隔离流量。让我们开始深入探讨技术细节。 [1:00 - 6:00] 技术深挖 OpenWrt 集成的核心依赖于 CoovaChilli。CoovaChilli 是一款开源访问控制器,用于拦截未认证的客户端流量,并将其重定向到 Purple Captive Portal。当访客连接到您的开放 SSID 时,CoovaChilli 会充当看门人的角色。它通过在 tun0 接口上运行的内部 DHCP 服务器分配 IP 地址,并阻止除您在围墙花园(Walled Garden)中明确允许的流量之外的所有流量。 当访客尝试浏览网页时,CoovaChilli 会拦截 HTTP 请求并重定向到 Purple 登录页面(Splash Page)。此时围墙花园的配置至关重要。在您的 chilli.conf 文件中,必须定义 HS_UAMDOMAINS 参数。这是一个以逗号分隔的域名列表,访客在进行认证前可以访问这些域名。您必须包含 splash.purple.ai、api.purple.ai(API)以及我们用于分发 Portal 资源的各种 CDN 域名。如果遗漏了某个域名,Portal 将无法加载,或者社交登录按钮将失效。就这么简单。 一旦访客在 Purple Portal 上通过认证,Purple 的云端 RADIUS 服务器就会向 UDP 端口 1812 上的 CoovaChilli 发回一条 Access-Accept 消息。随后,CoovaChilli 会对 MAC 地址进行授权,打开该会话的防火墙规则,并开始在 UDP 端口 1813 上发送计费(Accounting)数据。计费功能是必选项。Purple 正是通过它来跟踪会话时长和数据使用量,以便在您的分析仪表板中进行展示。 现在,让我们谈谈员工 WiFi。您不应该为员工网络使用 CoovaChilli。对于员工网络,您需要使用支持 WPA2-Enterprise 或 WPA3-Enterprise 的 hostapd。这是标准的 802.1X 认证。接入点(AP)充当认证器,将 EAP 消息转发到您的 RADIUS 服务器。对于企业设备,您应该部署使用数字证书而非密码的 EAP-TLS。这可以彻底消除凭据窃取风险。您可以通过配置 hostapd.conf 指向您的 RADIUS 服务器,然后由 RADIUS 服务器决定该特定用户的 VLAN 分配。 这引出了现代 OpenWrt 部署中最强大的功能之一:私有预共享密钥(PPSK)。在多租户环境中(例如,长租公寓或联合办公空间),您不希望广播五十个不同的 SSIDs。这会破坏您的空口效率。相反,您只需广播一个 SSID。当设备连接时,hostapd 会将 MAC 地址发送到 RADIUS 服务器。RADIUS 服务器则通过 Tunnel-Password 属性,返回该设备专属的特定密码和特定 VLAN ID。 这意味着 A 商店的零售员工会被分配到 VLAN 10,而大厅里的活动参与者则会被分配到 VLAN 30,且他们连接的是完全相同的 SSID。这种方案优雅、易于扩展,并在网络边缘强制执行最小特权访问。 [6:00 - 8:00] 部署建议与常见误区 让我们讨论一下部署。在使用 Purple 部署 OpenWrt 时,您的第一步始终是从 Purple 门户网站获取您的 RADIUS 凭据。您需要主、备 RADIUS IP 地址、共享密钥以及门户网站的 URL。 在您的 OpenWrt 配置中,您将定义访客网络接口(通常为 eth1 或 wlan0),并将 CoovaChilli 绑定到该接口。确保 chilli.conf 中的 HS_RADSECRET 与 Purple 门户网站中的完全一致。单个字符不匹配都会导致无提示的认证失败。 我们遇到的最大误区是认证前的 DNS 解析。CoovaChilli 会拦截 DNS 请求。如果您的上行防火墙阻止了 OpenWrt 路由器解析外部 DNS,则 Captive Portal 重定向将失败。请确保您的 OpenWrt 路由器对 Google 或 OpenDNS 等公共解析服务器拥有无限制的 DNS 访问权限。 另一个常见问题是 iOS 和 Android 内置的 Captive Portal 检测机制。Apple 设备会访问 captive.apple.com 来检查互联网连接。如果您在围墙花园(Walled Garden)中将 captive.apple.com 设为白名单,设备就会认为它已经连接到互联网,从而不会弹出 Captive Portal 助理。如果您希望自动弹出,请不要将 Apple 的域名加入围墙花园。 [8:00 - 9:00] 快速问答 让我们进行一次快速问答。 问题一:我可以在同一个 OpenWrt 接入点上运行 CoovaChilli 和 hostapd 802.1X 吗?是的。您可以将 CoovaChilli 绑定到您的访客 SSID 接口,并在您的员工 SSID 接口上配置带有 802.1X 的 hostapd。它们彼此独立运行。 问题二:Purple 是否支持使用 OpenWrt 进行动态 VLAN 分配?是的。Purple 的 RADIUS 服务器可以返回标准的 RADIUS 属性,包括 Tunnel-Type、Tunnel-Medium-Type 和 Tunnel-Private-Group-ID,从而指示 OpenWrt 将已通过身份验证的用户分配到特定的 VLAN 中。 问题三:如果 OpenWrt 路由器与 Purple RADIUS 服务器失去连接会发生什么?CoovaChilli 将无法对新会话进行身份验证。现有的已授权会话将保持活动状态,直到其会话超时失效。请务必配置备用 Purple RADIUS 服务器以确保高可用性。 [9:00 - 10:00] 总结与后续步骤 总结:OpenWrt 为企业 WiFi 提供了一个强大且与硬件无关的平台。通过集成用于访客接入的 CoovaChilli 以及用于安全员工和多租户 PPSK 的 hostapd,您可以构建一个基于身份的网络(Identity-Based Network)。Purple 简化了 RADIUS 基础设施的复杂性,提供了一个云端管理门户,用于获取第一方数据并确保合规性。 您的下一步是审计您当前自定义固件的部署情况。确保您的围墙花园(walled gardens)已完整配置,验证您的 RADIUS 计费周期,并开始规划从共享 PSK 向动态 PPSK 分段的迁移。 感谢您收听 Purple 技术简报。欲了解更多关于 Purple 如何保护您的访客 WiFi 并实现变现的信息,请访问 purple.ai。我们下期再见。

header_image.png

执行摘要

OpenWrt 是需要硬件独立性且不牺牲企业级控制力的 IT 团队的首选固件。它部署于酒店、零售和公共场所,提供完全可配置的基于 Linux 的网络协议栈。但开箱即用的 OpenWrt 就像一张白纸。如果没有结构化的身份层,访客网络将变得无法管理,员工网络依然不安全,多租户环境则会退化为单一的扁平网络。

本指南提供了将 OpenWrt 连接到 Purple 云端 RADIUS 和 Captive Portal 平台的终极集成手册。我们涵盖了四种不同的部署场景:使用 CoovaChilli 的访客 Captive Portal 重定向、iptables 围墙花园(walled garden)配置、使用 hostapd 与 IEEE 802.1X 的安全员工 WiFi,以及使用个人预共享密钥(PPSK)和动态 VLAN 分配的多租户隔离。阅读完成后,您将获得在任何支持 OpenWrt 的硬件上部署生产就绪、符合 GDPR 规范、身份驱动型网络所需的精确配置参数、常见故障模式和决策框架。

Purple 业务遍及 80,000 多个活跃场所,并在 2024 年处理了 4.4 亿次登录(Purple 内部数据,2024 年)。此处描述的架构与在酒店连锁、零售物业和交通枢纽中大规模部署的架构完全相同。

技术深挖

CoovaChilli Captive Portal 架构

在 OpenWrt 上部署 访客 WiFi 时,CoovaChilli 是行业标准的接入控制器。它作为一个 Captive Portal 守护进程运行,拦截未授权的客户端流量,通过其在 tun0 虚拟接口上的内部 DHCP 服务器分配 IP 地址,并使用其直接管理的 iptables 规则来执行围墙花园策略。

认证流程如下。访客设备关联到开放的 SSID。CoovaChilli 从其内部地址池(通常为 10.1.0.0/24)为设备分配一个 IP 地址。当设备发送其第一个 HTTP 请求时,CoovaChilli 会拦截该请求并向 Purple 欢迎页面(splash page)URL 发出 HTTP 302 重定向。在预认证阶段,该设备是隔离的——它只能访问围墙花园中明确列出的域名。 一旦访客在 Purple 门户上完成认证,Purple 的云端 RADIUS 服务器就会向 UDP 端口 1812 上的 CoovaChilli 发送一个 Access-Accept 消息。随后,CoovaChilli 会更新其 iptables 规则,以允许该特定 MAC 地址访问互联网,并开始将计费数据(会话时长、已传输字节数)传输到 UDP 端口 1813 上的 Purple RADIUS 计费服务器。计费不是可选的——它是 Purple 用于将会话数据填充到您的 WiFi Analytics 仪表板的机制。

architecture_overview.png

围墙花园:iptables 和域名白名单

在任何 Captive Portal 部署中,围墙花园都是运营上最关键的配置元素。CoovaChilli 通过两种机制管理围墙花园:针对单个 IP 地址的 uamallowed 参数,以及用于进行 DNS 检查的基于域名的白名单的 uamdomains 参数。

对于 Purple 集成,最少所需的围墙花园条目为:

域名 用途
*.purple.ai 门户资源、API 和认证端点
*.googleapis.com Google Fonts 和 Google Sign-In
*.gstatic.com Google 连接性检查和静态资源
*.facebook.com Facebook 登录 API
*.fbcdn.net 用于登录资源的 Facebook CDN
captive.apple.com Apple CNA 检测(参见下方说明)
connectivitycheck.gstatic.com Android captive portal 检测

关于 Apple CNA 管理的说明: 如果您在围墙花园中包含 captive.apple.com,iOS 设备将在认证前检测到互联网连接,并抑制 Captive Network Assistant 弹窗。大多数酒店部署都会特意排除此域名,以触发自动门户提示。正确的选择取决于您的访客体验设计。

安全的员工 WiFi:hostapd 和 IEEE 802.1X

访客网络需要无摩擦的接入体验。员工网络则需要绝对的安全。对于内部用户,OpenWrt 使用 hostapd 来促进 IEEE 802.1X 认证。在这种架构中,OpenWrt 接入点充当认证者(Authenticator),在客户端设备(客户端 Supplicant)和 Purple RADIUS 服务器之间转发可扩展身份验证协议(EAP)消息。

对于企业设备,EAP-TLS 是强制性标准。它依赖于双向证书认证——服务器和客户端设备都出示数字证书——完全消除了密码以及相关的凭据窃取或钓鱼风险。对于尚未准备好部署完整公钥基础设施(PKI)的环境,PEAP-MSCHAPv2 提供了一个合理的过渡选项,使用加密隧道来保护用户名和密码凭据。

当员工成功通过身份验证时,RADIUS 服务器会返回授权属性。网络分段的关键属性是 Tunnel-Private-Group-ID,它指示 OpenWrt 动态地将用户分配到正确的 VLAN。这就是基于身份的网络(Identity-Based Networks)背后的机制:决定用户网络访问权限的是用户的身份,而不是其物理位置。

多租户分段:OpenWrt PPSK 配置

在多租户环境中(如联合办公空间、建设出租(BTR)物业、拥有多个商户的零售中心或设有独立赞助商区域的体育场),广播多个 SSID 的运营成本高昂且射频效率低下。每增加一个 SSID 都会增加管理帧开销,从而减少数据流量的可用空口时间。

私有预共享密钥(PPSK,有时也称为动态 PSK)解决了这个问题。您只需广播单个 SSID。当设备尝试连接时,hostapd 会通过标准的 Access-Request 将设备的 MAC 地址发送到 RADIUS 服务器。RADIUS 服务器根据其数据库验证 MAC 地址,并返回包含两个关键属性的 Access-AcceptTunnel-Password 属性(该设备的唯一密码)和 Tunnel-Private-Group-ID 属性(VLAN 分配)。设备使用其唯一的密码进行连接,并直接置于其分配的 VLAN 中。

这意味着零售经理和活动参与者可以连接到完全相同的 SSID,但根据其独特的身份被路由到完全独立、隔离的网络。

ppsk_multitenant_diagram.png

实施指南

第 1 步:获取 Purple RADIUS 凭据

在修改 OpenWrt 配置之前,请从 Purple 门户管理控制台获取以下信息:

  • 主 RADIUS 服务器 IP 地址
  • 备 RADIUS 服务器 IP 地址(用于故障转移)
  • RADIUS 共享密钥(Shared Secret)
  • Captive Portal 登录页面 URL
  • 验证后重定向 URL

第 2 步:安装并配置 CoovaChilli 以提供访客 WiFi

通过 opkg 安装 coova-chilli 软件包:

opkg update && opkg install coova-chilli

主配置文件为 /etc/chilli/defaults。定义核心网络参数:

# 核心网络接口
HS_WANIF=eth0           # 上行互联网接口
HS_LANIF=wlan0          # 访客 WiFi 接口(或 VLAN 子接口)

# 访客子网
HS_NETWORK=10.10.20.0
HS_NETMASK=255.255.255.0
HS_UAMLISTEN=10.10.20.1 # CoovaChilli 在访客网络上的 IP
HS_UAMPORT=3990

# Purple RADIUS 集成
HS_RADIUS=
HS_RADIUS2=
HS_RADSECRET=
HS_NASID=venue-openwrt-01

# Purple 登录页面
HS_UAMSERVER=

# 围墙花园(Walled garden) - 基于域名的白名单
HS_UAMDOMAINS=".purple.ai,.googleapis.com,.gstatic.com,.facebook.com,.fbcdn.net"

启用并启动服务:

/etc/init.d/chilli enable
/etc/init.d/chilli start

步骤 3:为访客 SSID 配置 OpenWrt 无线接口

/etc/config/wireless 中,将访客 SSID 定义为一个绑定到 CoovaChilli 将管理的接口的开放网络:

config wifi-iface 'guest_wifi'
    option device 'radio0'
    option network 'guest'
    option mode 'ap'
    option ssid 'Venue_Guest'
    option encryption 'none'
    option isolate '1'

客户端隔离(isolate '1')可防止访客设备之间相互通信 - 这是任何共享网络强制性的安全控制。

步骤 4:为 802.1X 员工 WiFi 配置 hostapd

对于员工 SSID,在 /etc/config/wireless 中配置 WPA2-Enterprise

config wifi-iface 'staff_wifi'
    option device 'radio0'
    option network 'staff_vlan10'
    option mode 'ap'
    option ssid 'Venue_Staff'
    option encryption 'wpa2'
    option server ''
    option port '1812'
    option key ''
    option dynamic_vlan '2'
    option vlan_tagged_interface 'eth0'
    option vlan_bridge 'br-vlan'
    option vlan_naming '0'

设置 dynamic_vlan '2' 指示 hostapd 强制执行 RADIUS 服务器返回的 VLAN 分配,并在没有返回 VLAN 时拒绝身份验证。

软件包要求: 标准的 wpad-mini 软件包不支持 WPA2-Enterprise。您必须安装 wpadwpad-openssl

opkg remove wpad-mini && opkg install wpad-openssl

步骤 5:为多租户隔离配置 PPSK

PPSK 需要 hostapd 针对 RADIUS 服务器执行 MAC 地址身份验证,然后该服务器返回每个设备的密码。在 /etc/config/wireless 中:

config wifi-iface 'ppsk_ssid'
    option device 'radio0'
    option mode 'ap'
    option ssid 'Venue_Connect'
    option encryption 'psk2'
    option key 'default_fallback_key'
    option macfilter 'radius'
    option server ''
    option port '1812'
    option key ''
    option dynamic_vlan '2'
    option vlan_tagged_interface 'eth0'
    option wpa_psk_radius '2'

wpa_psk_radius '2' 参数指示 hostapd 要求来自 RADIUS 响应的 Tunnel-Password 属性。如果 RADIUS 服务器未返回密码,则身份验证将被拒绝。

在 Purple RADIUS 端,FreeRADIUS 配置(或等效配置)的 authorize 部分会将 MAC 地址映射到密码和 VLAN ID:

# PPSK 的 RADIUS 授权条目示例
AA:BB:CC:DD:EE:FF   Auth-Type := Accept
    Tunnel-Password = "GuestPass2024",
    Tunnel-Type = VLAN,
    Tunnel-Medium-Type = IEEE-802,
    Tunnel-Private-Group-ID = "20"

步骤 6:配置动态 VLAN 分配

要使动态 VLAN 分配正常工作,您的 OpenWrt 交换机必须配置为在连接到核心交换机的 Trunk 端口上将相关 VLAN 作为 Tagged 流量进行传输。在 /etc/config/network 中:

config interface 'vlan10'
    option ifname 'eth0.10'
    option proto 'dhcp'

config interface 'vlan20'
    option ifname 'eth0.20'
    option proto 'dhcp'

config interface 'vlan30'
    option ifname 'eth0.30'
    option proto 'dhcp'

确保您的核心交换机端口已配置为 Trunk,并允许 VLAN 10、20 和 30 以 Tagged 方式通过。

最佳实践

绝对的网络隔离。 切勿将访客接口与内部网络桥接。访客流量必须隔离在专用的 VLAN 上,并直接路由到互联网防火墙。这是满足 PCI DSS 4.0 合规性的硬性要求,该合规性强制要求访客 WiFi 网络必须与处理持卡人数据的任何网络段完全隔离。

精准配置围墙花园(Walled garden)。 围墙花园配置不完整是导致 Captive Portal 故障的主要原因。在连接到访客 SSID 的测试设备上使用浏览器的开发者工具,识别哪些请求在认证前被拦截。每一个被拦截的域名都是潜在的 Portal 故障点。

RADIUS 计费间隔。 将 CoovaChilli 的计费中期时间间隔(interim interval)配置为 120 秒。这可以在不产生过多元数据流量的情况下,在 Purple 分析仪表板中提供近乎实时的会话数据。

备用 RADIUS 服务器。 务必在 CoovaChilli 配置中配置 HS_RADIUS2。如果主要的 Purple RADIUS 服务器无法访问,CoovaChilli 将无法对新会话进行身份验证。备用服务器可提供自动故障转移,且无需在接入点进行任何配置更改。

软件包选择。 许多 OpenWrt 构建版本中自带的 wpad-mini 软件包不支持 WPA2-Enterprise 或动态 VLAN 分配。对于任何需要 802.1X 或 PPSK 的部署,请务必安装 wpad-openssl

有关企业级 WiFi 安全架构的更多指导,请参阅我们的 Enterprise WiFi Security: A Complete Guide for 2026

问题排查与风险缓解

故障现象 常见原因 解决方法
重定向后 Portal 无法加载 围墙花园配置不完整 将缺失的 CDN/API 域名添加到 HS_UAMDOMAINS
身份验证无提示失败 RADIUS 共享密钥不匹配 验证 CoovaChilli 和 Purple Portal 中的 HS_RADSECRET 是否完全一致
Purple 分析中没有数据 RADIUS 计费被拦截 验证是否允许出站 UDP 1813;检查 HS_RADIUS2 计费配置
iOS 未弹出 Portal 窗口 围墙花园中包含 captive.apple.com HS_UAMDOMAINS 中移除 Apple 探测域名
PPSK 客户端分配到错误的 VLAN vlan_tagged_interface 配置错误 验证 OpenWrt 和核心交换机上的 Trunk 端口配置
802.1X 认证因 wpad 错误失败 安装了 wpad-mini 卸载 wpad-mini 并安装 wpad-openssl
Dynamic VLAN fails on ath10k Known driver issue in older builds Update to OpenWrt 21.02 or later; use non-CT ath10k firmware

GDPR 合规性说明: CoovaChilli 本身不捕获或存储个人数据。所有同意捕获、数据处理和 GDPR 合规机制均由 Purple 平台在门户层处理。在上线前,请确保您的 Purple 门户已配置您场所的服务条款和数据处理通知。

有关相关硬件集成模式,请参阅我们的指南: EnGenius Cloud 接入点与 Purple WiFi 集成DrayTek Vigor 路由器和接入点与 Purple WiFi 集成

投资回报率 (ROI) 与业务影响

从基础 PSK 网络过渡到由 Purple 管理的 OpenWrt 架构,可在三个维度上带来可衡量的影响。

数据捕获与营销。 通过强制执行 Captive Portal 认证,场所可在连接 WiFi 的那一刻捕获合规的第一方人口统计数据(姓名、电子邮件地址、社交媒体资料)。这些数据可直接接入 CRM 和电子邮件营销平台,从而推动忠诚度计划的注册并实现精准营销。Purple 在 2024 年处理了 4.4 亿次登录(Purple 内部数据),这展示了在网络边缘进行第一方数据捕获的巨大规模。

运营效率。 实施 PPSK 可减少 SSID 开销,从而提高密集环境中的 WiFi 性能。对于拥有 200 个分店的零售连锁店,通过 Purple 的云 RADIUS 进行集中身份管理,而不是在每个站点更新本地路由器配置,每年可节省数百个工程小时。单个 RADIUS 策略的更改会立即传播到所有 200 个位置。

安全与合规。 动态 VLAN 分配在边缘强制执行最小特权访问。员工与访客隔离。IoT 设备与员工隔离。POS 终端与所有其他流量隔离。这种隔离满足了 PCI DSS 4.0 网络隔离要求,并为 GDPR 合规性审查提供了清晰、可审计的网络拓扑结构。

有关特定垂直行业的部署模式,请参阅我们针对 零售酒店医疗保健 以及 交通 环境的指南。您可能还会发现我们的指南 什么是无线显示:协议与 2026 年最佳实践 对于了解场所部署中互补的无线技术非常有用。

关键定义

CoovaChilli

一种开源的软件接入控制器,使用 RADIUS 进行身份验证和计费,为无线网络提供 Captive Portal 和 walled-garden 环境。

IT 团队在 OpenWrt 上部署 CoovaChilli,以拦截宾客的 HTTP 流量并将其重定向到 Purple 展示页面。它管理着用于执行 walled garden 并授予身份验证后互联网访问权限的 iptables 规则。

Walled garden

一个严格的 IP 地址或域名白名单,未经身份验证的用户在完成 Captive Portal 认证之前可以访问这些地址或域名。

这对于允许访客设备加载 Purple 门户图形并访问社交媒体登录 API,同时阻止普通互联网访问至关重要。围墙花园配置不完整是导致 Captive Portal 故障最常见的原因。

PPSK (Private Pre-Shared Key)

一种安全机制,其中单个用户或设备被分配用于相同 WiFi SSID 的唯一密码,RADIUS 会根据每个设备的 MAC 地址返回正确的密码和 VLAN 分配。

用于在不广播多个 SSID 的情况下细分多租户环境。在 OpenWrt 中通过 hostapd 中的 wpa_psk_radius 参数提供支持。

动态 VLAN 分配

RADIUS 服务器使用 Tunnel-Type、Tunnel-Medium-Type 和 Tunnel-Private-Group-ID 等 RADIUS 属性,指示接入点将特定已认证用户划分到特定虚拟 LAN 的过程。

基于身份的网络(Identity-Based Networks)的核心机制。决定网络段和访问权限的是用户的身份,而不是其物理端口。

IEEE 802.1X

基于端口的网络访问控制的 IEEE 标准,定义了企业级 WiFi 认证中的认证系统(接入点)、申请者(客户端设备)和认证服务器(RADIUS)的角色。

OpenWrt 上安全员工 WiFi 的底层协议。需要完整的 wpad 或 wpad-openssl 软件包 - wpad-mini 不支持此协议。

EAP-TLS (Extensible Authentication Protocol - Transport Layer Security)

一种使用双向证书认证的 802.1X 认证方法,要求 RADIUS 服务器和客户端设备都出示有效的数字证书。

企业设备认证的金本位。完全消除了密码,从而杜绝了凭据窃取和网络钓鱼攻击。需要 PKI 基础设施来颁发客户端证书。

Captive Network Assistant (CNA)

当 iOS 和 Android 设备根据探测特定的检测 URL,检测到自身处于 Captive Portal 之后时,自动显示的伪浏览器。

网络工程师必须仔细管理其围墙花园,以控制是否自动触发 CNA。大多数酒店部署都会排除 Apple 和 Google 的检测域名,以强制弹出 CNA 窗口。

RADIUS 计费

AAA(认证、授权、计费)框架的第三大支柱,通过在 UDP 端口 1813 上记录会话开始、临时更新和会话停止事件,来跟踪网络资源消耗。

Purple 需要此功能来使用会话时长和带宽数据填充分析仪表板。在 CoovaChilli 中通过 HS_RADIUS2 和 radiusacctport 参数进行配置。

hostapd

OpenWrt 用于管理无线接口的开源 IEEE 802.11 接入点守护进程,支持 WPA2/WPA3-Enterprise、802.1X 和 PPSK 认证模式。

OpenWrt 上用于员工和 PPSK WiFi 的核心守护进程。wpad-openssl 软件包提供了企业认证所需的全功能 hostapd 构建版本。

Tunnel-Password 属性

在 PPSK 部署中使用的 RADIUS 属性(属性 69),用于在 MAC 认证期间从 RADIUS 服务器向接入点返回每个设备的密码。

Purple 的 RADIUS 服务器通过该机制将唯一的 PSK 交付给 OpenWrt 的 hostapd 守护进程,以进行基于 PPSK 的多租户细分。

应用实例

一家拥有 200 间客房的酒店需要提供分层的 WiFi 接入:为普通宾客提供免费的基础互联网接入,为忠诚度会员提供高速接入,并为员工的 POS 销售终端设备提供安全接入。IT 团队希望将 SSID 开销降至最低,并在 POS 终端与宾客流量之间强制执行 PCI DSS 网络隔离。

部署 OpenWrt 接入点并广播两个 SSID:“Hotel_Guest”(开放式,由 CoovaChilli 管理)和“Hotel_Secure”(通过 hostapd 进行 PPSK 管理)。在“Hotel_Guest”上,CoovaChilli 会将所有未授权的流量重定向到 Purple 的展示页面。宾客通过该 Portal 进行身份验证并接入 VLAN 20(仅限互联网)。在“Hotel_Secure”上,将 hostapd 配置为 wpa_psk_radius=2。当忠诚度会员的设备连接时,RADIUS 服务器会返回其唯一的 PSK 和 VLAN 21(更高带宽层)。当 POS 终端连接时,RADIUS 服务器会返回 POS 设备的 PSK 和 VLAN 10(内部网络访问,禁止连接互联网)。这种 VLAN 细分在接入点层级强制执行了持卡人数据(VLAN 10)与宾客流量(VLAN 20 和 21)之间的 PCI DSS 隔离。

考官评语: 此架构使用两个 SSID 而不是一个,旨在将 Captive Portal 流程(宾客)与 PPSK 流程(员工和忠诚度会员)分开。这是正确的方法,因为 CoovaChilli 和 hostapd PPSK 服务于根本不同的身份验证模型。将它们合并到单个 SSID 上需要配置 RADIUS 代理,这会增加不必要的复杂性。双 SSID 模型更简单、更可靠,且更易于进行 PCI DSS 合规性审计。

一家连锁零售店正在向 50 个网点部署 OpenWrt 路由器。在第一个站点的用户验收测试(UAT)期间,Purple 展示页面在重定向后可以正常加载,但点击 Facebook 登录按钮却导致连接超时。Google 登录按钮则工作正常。

该问题是由于 CoovaChilli walled garden 配置不完整导致的。Facebook 的身份验证流程需要访问多个域名:facebook.com、connect.facebook.net 和 fbcdn.net(Facebook 用于登录资源的 CDN)。Google 登录之所以能够正常工作,是因为 googleapis.com 和 gstatic.com 已经存在于 walled garden 中。更新 /etc/chilli/defaults 中的 HS_UAMDOMAINS 参数,添加 '.facebook.com,.connect.facebook.net,.fbcdn.net'。使用 '/etc/init.d/chilli restart' 重新加载 chilli 守护进程并重新测试。为了系统地诊断未来的 walled garden 问题,可将测试设备连接到宾客 SSID,并使用浏览器开发者工具(Network 标签页)来识别在身份验证之前哪些请求返回了连接错误。

考官评语: 现代社交登录流程会从多个 CDN 和 API 域名加载资源。仅 Facebook SDK 就至少引用了三个不同的域名。在调试 walled garden 时,采用系统的方法——利用浏览器开发者工具来识别被拦截的预验证请求——比凭空猜测域名列表要可靠得多。在全部 50 个站点正式上线之前,工程师应当测试每一种配置好的身份验证方法(Facebook、Google、电子邮件、短信)并验证每一项均能成功完成。

练习题

Q1. 您在 Premier Inn 酒店部署了带有 CoovaChilli 的 OpenWrt。宾客反映,当他们连接到宾客 WiFi 时,他们的 iPhone 不会自动提示登录。他们必须手动打开 Safari 并访问一个 HTTP 网站才能触发门户。是什么配置变化导致了这个问题,您该如何解决?

提示:考虑 iOS 在关联时如何确定网络是否具有完整的互联网访问权限。

查看标准答案

该工程师通过 HS_UAMDOMAINS 将 Apple 的 Captive Portal 检测域名(captive.apple.com)添加到了 CoovaChilli 的围墙花园(walled garden)中。当 iPhone 连接时,iOS 会向 captive.apple.com 发送探测请求。由于该域名在围墙花园内,探测在身份验证前就会成功,iOS 因而判定其拥有完整的互联网访问权限,从而阻止了 Captive Network Assistant 弹窗。要解决此问题,请从 HS_UAMDOMAINS 中移除 captive.apple.com 并重启 chilli 守护进程。这样,iOS 设备将收到探测失败的响应,从而正确识别 Captive Portal 并自动显示登录提示。

Q2. 联合办公空间运营商希望在其园区内部署 IoT 智能温控器。他们已经广播了“Cowork_Guest” SSID (CoovaChilli) 和“Cowork_Staff” SSID (802.1X)。这些温控器不支持 WPA2-Enterprise。如何在不增加第三个 SSID 的情况下安全地接入它们?

提示:IoT 设备通常仅支持 WPA2-PSK。考虑可以扩展哪个现有的 SSID 来支持单设备密钥(per-device passphrases)。

查看标准答案

通过在 hostapd 配置中启用 wpa_psk_radius=2,在“Cowork_Staff” SSID 上配置 PPSK。在 Purple RADIUS 服务器中注册每个温控器的 MAC 地址,配置唯一的密钥,并将 VLAN 40 (IoT VLAN) 作为 Tunnel-Private-Group-ID。当温控器连接时,hostapd 会使用设备 MAC 查询 RADIUS 服务器,接收唯一的 PSK 和 VLAN 分配,并将温控器放入 VLAN 40 中——这与 VLAN 10 上的员工流量完全隔离。此方法避免了第三个 SSID,保持了射频效率,并在不需要 802.1X 证书基础设施的情况下对 IoT 设备实施了最小权限访问。

Q3. 在零售场所部署了带有 CoovaChilli 的 OpenWrt 后,尽管访客成功连接并浏览互联网,但 Purple 分析仪表板显示活跃会话为零且无带宽数据。最可能的原因是什么?诊断此问题的两个步骤是什么?

提示:认证(端口 1812)和计费(端口 1813)是独立的 RADIUS 功能。

查看标准答案

RADIUS 计费(accounting)配置丢失或被拦截。步骤 1:验证 CoovaChilli 配置。检查 /etc/chilli/defaults 中是否正确设置了 HS_RADIUS 和 HS_RADIUS2,并确认 radiusacctport 已设置为 1813。如果未配置 HS_RADIUS2,则未定义计费服务器。步骤 2:验证防火墙规则。确认该场所的出口防火墙允许从 OpenWrt 路由器到 Purple RADIUS 服务器 IP 地址的出站 UDP 1813 端口流量。在 OpenWrt 设备上使用 “tcpdump -i eth0 udp port 1813” 来确认是否正在发送计费数据包。如果 tcpdump 中出现了数据包,但仪表板仍然为空,则问题在于防火墙拦截了路由器与 Purple 云端 RADIUS 服务器之间的流量。

Q4. 体育场部署的 OpenWrt 使用通过 RADIUS 动态分配 VLAN 来细分球迷 WiFi(VLAN 30)、媒体(VLAN 40)和运营(VLAN 50)。将接入点升级到运行带有 ath10k 驱动程序的 OpenWrt 19.07 的新硬件后,VLAN 分配停止工作。无论 RADIUS 属性如何,通过身份验证的用户都会进入默认 VLAN。已知的起因是什么?

提示:考虑 ath10k 中对 AP/VLAN 模式的驱动级支持。

查看标准答案

这是 OpenWrt 19.07 中包含的 ath10k-ct (Candela Technologies) 固件中一个已知的回退问题(regression)。此版本中的 ath10k-ct 驱动程序存在一个 Bug,会破坏 AP/VLAN 模式,导致动态 VLAN 分配无法正常工作。解决方法是升级到 OpenWrt 21.02 或更高版本,该版本中更新了 ath10k-ct 驱动程序以恢复 AP/VLAN 功能。或者,在 19.07 构建版本上用标准 ath10k 固件(非 CT 变体)替换 ath10k-ct 固件。此问题不影响基于 ath9k 的硬件,这类硬件在所有 OpenWrt 版本中都能正确处理 AP/VLAN 模式。