执行摘要“访客 WiFi 已连接但无互联网连接”是企业网络中最常见的支持工单之一。所有访客都能明显感觉到这一症状;但对大多数 IT 团队来说,在了解重定向链之前,其原因都是不可见的。Captive Portal(也称为闪屏页面或热点网关)会拦截设备的初始 HTTP 连接探测,并向登录页面发出 HTTP 302 重定向。如果该链条中的任何一步发生断裂 - 阻断的探测、HSTS 冲突、围墙花园(Walled Garden)漏洞、RADIUS 故障或 DHCP 耗尽 - 访客就只能看到已连接的 WiFi 图标,而无法访问互联网。本指南将带您了解每种故障模式、底层的协议机制以及解决这些问题的配置更改。Purple 在 80,000 多个活跃场所运营,每年处理 4.4 亿次登录(Purple 内部数据,2024 年),这里描述的模式代表了我们在酒店、零售、交通和公共部门部署中看到的最常见的根本原因。
技术深度剖析Captive Portal 检测的实际工作原理每个主流操作系统都内置了一种机制,用于在授予互联网访问权限之前检测网络是否需要身份验证。理解这些机制是解决所有 Captive Portal 问题的前提。
当设备关联到 SSID 时,OS 会向预定义的 URL 发送一个未加密的 HTTP GET 请求。下表按平台列出了探测 URL。
操作系统
探测 URL
预期响应
iOS / macOS
http://captive.apple.com/hotspot-detect.html
带有特定正文的 HTTP 200
Android (Google)
http://connectivitycheck.gstatic.com/generate_204
HTTP 204 No Content
Windows (NCSI)
http://www.msftconnecttest.com/connecttest.txt
带有正文 "Microsoft Connect Test" 的 HTTP 200
Chrome (所有平台)
http://www.gstatic.com/generate_204
HTTP 204 No Content
Firefox
http://detectportal.firefox.com/success.txt
HTTP 200
如果网关拦截了其中一个请求并返回指向 Captive Portal URL 的 HTTP 302 重定向,OS 就会识别出其处于门户网站之后,并打开一个伪浏览器(轻量级 WebView)来显示闪屏页面。如果探测被完全阻断,OS 就会报告“无互联网连接”,并且绝不会尝试打开门户网站。这是导致“访客 WiFi 已连接但无互联网连接”症状的最常见单一原因。
HSTS 问题HTTP Strict Transport Security (HSTS) 是一种在 RFC 6797 中定义的网络安全策略。它指示浏览器拒绝所有指向特定域的纯 HTTP 连接,并拒绝任何不完全匹配的证书。包括 google.com、facebook.com 和大多数银行网站在内的主要域名都已列入 Chrome、Firefox、Safari 和 Edge 内置的 HSTS 预加载列表中。
当访客打开浏览器并输入 google.com 时,浏览器会在请求离开设备之前将其升级为 HTTPS。网关无法拦截 HTTPS 请求并对其进行干净的重定向 - 因为它必须出示一个它并不拥有的 google.com 证书。浏览器会检测到证书不匹配并显示硬安全警告。访客将无法进入登录页面。
正确的架构完全依赖于上述操作系统级别的 HTTP 探测。这些探测专门对非 HSTS URL 使用纯 HTTP,以便网关可以拦截并重定向它们,而不会产生证书冲突。您的网关必须拦截这些 HTTP 探测并发出 302 重定向。请勿尝试为了 Captive Portal 的目的而拦截 HTTPS 流量。
围墙花园 (Walled garden)围墙花园是设备在身份验证之前可以访问的一组域名和 IP 地址。如果围墙花园设置得太窄,Portal 页面可能会加载,但身份验证将会失败。常见遗漏包括:
身份提供商域名:如果您使用 Microsoft Entra ID、Okta 或 Google Workspace 进行社交或 SSO 登录,其身份验证端点必须包含在围墙花园中。
CDN 和资源域名:您的 Portal 页面可能会从内容分发网络加载 CSS、JavaScript 或字体。如果这些 CDN 域名被拦截,页面渲染将会出错。
支付处理商域名:如果您通过 Stripe 或其他处理商收取访问费用,其 JavaScript SDK 域名必须预先通过身份验证。
Purple 平台域名:Purple 的云覆盖需要网关能够访问 Purple 的 RADIUS 服务器和门户端点。这些内容已在 Purple 针对每个支持平台的硬件集成指南中进行了说明。
RADIUS 与授权中断RADIUS (Remote Authentication Dial-In User Service) 是将本地网关连接到身份验证平台的协议。当访客填写完登录表单后,Captive Portal 会将凭据发送给 RADIUS 服务器。RADIUS 服务器会返回 Access-Accept 或 Access-Reject 消息。网关根据该消息通过开启或保持关闭授予互联网访问权限的防火墙规则来执行操作。
授权中断 - 即访客在 Portal 页面上成功登录但仍无法上网 - 几乎总是意味着网关没有收到或处理 Access-Accept 消息。常见原因包括共享密钥不匹配、本地防火墙拦截了 UDP 端口 1812 和 1813,或者网关上配置的 RADIUS 服务器 IP 地址不正确。
高密度环境中的 DHCP 耗尽在体育场、会议中心和交通枢纽中,DHCP 耗尽是导致连接失败的常见原因,其现象与 Captive Portal 问题完全相同。如果 DHCP 池已满,新设备会与接入点关联,但无法获取 IP 地址。在没有 IP 地址的情况下,设备无法发送 HTTP 探测包,因此永远无法到达 Captive Portal。设备显示已连接到 SSID,但无法访问互联网。
对于像曼彻斯特机场集团 (MAG) 这样旅客流量急剧飙升的场所,子网大小必须针对最大并发设备数进行规划,而不是平均值。较短的 DHCP 租约时间(针对临时访客网络,通常为 15 到 30 分钟)可以快速回收已离开设备的 IP 地址。
实施指南以下步骤适用于与 Purple 的云覆盖层集成时的任何硬件平台 - 无论是 Cisco Meraki、HPE Aruba、Ruckus、Juniper Mist、Ubiquiti UniFi、Cambium、Extreme 还是 Fortinet。
步骤 1:为外部 Captive Portal 配置 SSID。 在您的硬件控制器中,将访客 SSID 设置为将未认证的客户端重定向到 Purple 的外部门户 URL。禁用控制器本身上的任何本地 Splash 页面。
步骤 2:定义 Walled Garden(围墙花园)。 至少添加以下域名:Purple 的门户和 RADIUS 终端节点(参见您的硬件集成指南)、上面列出的操作系统检测探测 URL、您的身份提供商域名(Microsoft Entra ID、Okta 或 Google Workspace),以及您的 Splash 页面资源使用的任何 CDN 域名。
步骤 3:配置 RADIUS。 输入 Purple 的 RADIUS 服务器 IP 地址、Purple 控制面板中的共享密钥,并将认证端口设置为 1812,计费端口设置为 1813。验证您的本地防火墙是否允许在这些端口上进行出站 UDP 传输。
步骤 4:设置会话参数。 对于酒店和零售业,将会话时长设置为 24 小时,并启用 MAC 地址缓存。这可以防止访客在单次访问期间被强制重新认证。对于高安全性的环境,采用更短的会话并进行重新认证是合适的。
步骤 5:规划您的 DHCP 范围。 计算您的场所在高峰期容量下的最大并发设备数。一个拥有 500 个座位的餐厅在繁忙的服务期间可能会有 800 台设备。将 DHCP 池的大小设置为 1,000 个地址,租约时间设为 30 分钟。
步骤 6:跨操作系统进行测试。 配置完成后,在 iOS、Android 和 Windows 设备上测试完整流程。每种设备都使用不同的探测 URL 和 WebView 实现。如果一个平台失败而其他平台正常工作,这几乎总是因为 Walled Garden 配置存在遗漏。
最佳实践
以下建议反映了 Purple 在全球 80,000 多个场所部署中所积累的标准和模式。
隔离访客和员工网络。 运行至少三个 SSID:Guest WiFi、Staff WiFi 和一个物联网(IoT)网络。访客流量必须与内部系统隔离。有关架构细节,请参阅我们的指南: 三种 SSID 统领全局:访客、Passpoint 和 IoT WiFi 。
使用专用的访客 VLAN。 将访客流量细分到其专属的 VLAN 中,以防止横向移动并简化防火墙策略。如果有任何付款卡数据传输通过网络,这是 PCI-DSS 的硬性要求。
实施有意识选择的加入机制。 GDPR 要求在 Captive Portal 收集数据必须基于知情、肯定的同意。Purple 的有意识选择加入机制清晰地呈现了数据收集选项,并为每个目的提供独立的勾选框。对于在英国或欧盟运营的场所,这并非可选,而是必选项。
主动监控 Portal 健康状况。 Purple 的 WiFi Analytics 平台提供对登录成功率、会话数和身份验证失败的实时可见性。成功登录数的突然下降,是 RADIUS 或围墙花园(walled garden)出现问题的早期预警,让您在访客开始投诉之前发现问题。
应用一致的品牌形象。 欢迎页面(splash page)是访客与您的网络进行的第一次品牌互动。精心设计的门户可以提高选择加入率,并建立对 WiFi 体验的期望。设计指导请参阅 如何通过您的访客 WiFi 留下绝佳的第一印象 。
故障排查与风险缓解当收到 Captive Portal 问题报告时,在进行任何配置更改之前,请遵循以下诊断顺序。
隔离故障点。 询问访客他们使用的是哪种系统(OS)和浏览器。自己在相同的系统上测试相同的流程。如果问题特定于某种系统,原因几乎可以确定是该系统的探测 URL 缺少了围墙花园条目。
检查 DNS 解析。 在访客 VLAN 的设备上,尝试解析 Captive Portal 的主机名。如果 DNS 解析失败,即使正确发出了重定向,设备也无法访问欢迎页面。请验证您的 DHCP 服务器是否正在分发可靠的 DNS 地址,以及网关是否允许在预身份验证状态下进行 DNS 查询。
捕获重定向。 使用浏览器开发人员工具(F12)或数据包捕获来观察 HTTP 交换。您应该会看到系统探测请求,随后是包含门户 URL 的 HTTP 302 响应。如果您看到了探测请求但没有 302 响应,则网关没有正确拦截。如果您根本没有看到探测请求,则系统已判定其可以访问互联网(可能来自缓存状态)且未发送探测。
**验证 RADIUS 通信。**在网关上,检查 RADIUS 计费日志。成功验证会生成一个 Accounting-Start 记录。如果您在访客登录后未看到任何计费记录,则说明 RADIUS 通信已中断。请检查共享密钥、服务器 IP 和防火墙规则。
**检查 DHCP 租约使用情况。**在 DHCP 服务器上,查看当前租约计数与地址池大小。如果使用率超过 90%,则即将耗尽。请立即扩大地址池或缩短租约时间。
下表将最常见的故障现象与其根本原因和相应的解决方法进行了映射。
故障现象
最可能的根本原因
解决方法
任何设备上均未显示门户
OS 探测被网关 ACL 拦截
将探测 URL 添加至预认证允许列表中
门户在 iOS 上显示,在 Android 上不显示
Walled Garden 中缺少 Android 探测 URL
将 connectivitycheck.gstatic.com 添加至 Walled Garden
门户加载时出现 HTTPS 证书错误
网关拦截了 HTTPS 而非 HTTP
仅依赖 HTTP 探测拦截
门户加载成功,但登录后无法上网
网关未收到 RADIUS Access-Accept
验证共享密钥、端口 1812/1813 以及 RADIUS 服务器 IP
社交媒体登录按钮无响应失败
身份提供商域名不在 Walled Garden 中
添加 Microsoft Entra ID / Google Workspace 端点
访客每次访问都必须重新验证
会话持续时间过短或 MAC 缓存已被禁用
将会话设置为 24 小时,启用 MAC 地址缓存
高峰期出现间歇性故障
DHCP 地址池耗尽
扩大子网,缩短租约时间
投资回报率与业务影响每一次 Captive Portal 失败都是一次丢失的数据捕获事件。Purple 的 Guest WiFi 平台可将每一次成功的验证转化为第一手数据记录 - 姓名、电子邮件、人口统计数据和访问频率 - 这些数据将直接馈入营销自动化和忠诚度计划中。
对于像 Premier Inn 或 Whitbread 这样的 酒店餐饮 运营商来说,在拥有 700 家门店的物业中,门户验证成功率提升 10% 即可直接转化为每月数万条额外的主动订阅记录。这些记录可为个性化电子邮件营销活动提供支持,其打开率明显高于购买的名单。
对于 零售 运营商而言,Captive Portal 是了解顾客停留时间、重复访问频率和跨区域行为的切入点。Purple 已在其场馆网络中收集了 290 亿个数据点(Purple 内部数据)。而这些数据的价值完全取决于产生这些数据的验证率。
对于像曼彻斯特机场集团(Manchester Airports Group)这样的 交通 枢纽,可靠的访客 WiFi 是董事会层面追踪的旅客满意度指标。在起飞高峰期出现间歇性故障的门户会引发投诉并损害场馆的净推荐值(NPS)。
对于 医疗保健 环境,可靠的访客 WiFi 可以减轻临床人员应对连接投诉的压力,并提升患者体验指标。
Purple 的 99.999% 在线率 SLA 确保了云覆盖本身不会成为单点故障。当 Captive Portal 出现问题时,原因几乎总是本地配置 - 本指南将帮助您解决这些问题,而无需提交支持工单。
参考文献[1] Troubleshooting Tip: General captive portal explanation, flow and troubleshooting. Fortinet Community, November 2024. https://community.fortinet.com/fortigate-3/troubleshooting-tip-general-captive-portal-explanation-flow-and-troubleshooting-188409
[2] RFC 8910: Captive-Portal Identification in DHCP and Router Advertisements. IETF. https://www.rfc-editor.org/info/rfc8910
[3] Network Connectivity Status Indicator overview for Windows. Microsoft Learn, February 2025. https://learn.microsoft.com/en-us/windows-server/networking/ncsi/ncsi-overview
[4] 7 Captive Portal Problems That Break Guest WiFi (And Quick Fixes). Spotipo, February 2026. https://www.spotipo.com/post/troubleshooting-captive-portals-common-issues
[5] Solution for HSTS issues with captive portal. Ubiquiti Community. https://community.ui.com/questions/Solution-for-HSTS-issues-with-captive-portal/17b033e7-3dfe-4830-af8f-bf6ead23d8b0