很多园区WiFi认证上线后,IT接到最多的投诉不是"连不上",而是"连上了但页面弹不出来"。用户连上WiFi,打开浏览器想上百度,结果转半天圈,或者浏览器报"无法访问此网站",或者直接进入一个空白页。这不是AP信号问题,是Portal重定向和HTTPS兼容性的问题。手机系统、浏览器版本、HTTPS证书、DNS配置,任何一个环节没配对,弹页就失败。这个问题的发生率很高,但排查思路清楚,大部分是几个固定原因。
为什么Portal弹页会失败
Portal认证的原理是:用户连上WiFi后访问任意HTTP网站,AC或认证网关把这个请求拦截下来,重定向到Portal认证页面。整个过程有几个前提:用户访问的必须是HTTP网站,HTTPS网站因为证书校验不能被中间人拦截;DNS必须能解析,否则浏览器连重定向都发不出去;认证服务器的证书要被手机系统信任,否则浏览器报安全警告。这三个前提任何一个不满足,弹页就失败。
第一个原因:用户访问的全是HTTPS网站
现在手机浏览器默认打开百度、淘宝、微信内置浏览器,全都是HTTPS。HTTPS请求在TLS握手阶段就会校验证书,AC重定向时出示的是自己的证书,和用户要访问的域名不匹配,浏览器直接报"您的连接不是私密连接",用户看到红色警告就关掉了。这是最常见的弹页失败原因。解决办法不是让用户访问HTTP网站,而是启用Captive Portal检测:手机系统在连上WiFi后会自动访问一个官方的探测URL(比如苹果的captive.apple.com,安卓的connectivitycheck.gstatic.com),这个探测走的是HTTP,AC拦截后重定向到Portal页面,手机系统会弹出"登录网络"的小窗口。正确配置是让AC对这些探测URL放行重定向,让手机系统自己触发登录窗口,不要靠用户手动开浏览器。
第二个原因:证书没配好,浏览器报红
就算Captive Portal窗口弹出来了,点进去如果Portal页面是HTTPS但证书是自签的,手机会报"证书不受信任"。用户看到警告就不敢点了,以为是钓鱼网站。解决办法是给Portal页面配一个正规CA颁发的证书,域名和Portal访问地址一致。如果园区暂时没有正规证书,至少让认证服务器支持HTTP重定向到HTTPS页面,HTTP那一步不报错,HTTPS这一步的警告用户能接受。不要用过期证书或者域名不匹配的证书,那会让用户直接放弃认证。
第三个原因:DNS解析慢或不通
用户连上WiFi后手机要先通过DHCP拿到IP和DNS,DNS服务器如果配错,或者DNS服务器响应慢,浏览器就一直在转圈。常见问题是:DNS指向了内网的老服务器,认证前用户还没权限访问;或者DNS指向了运营商的公网DNS,但AC的重定向规则只对内网IP段生效。正确做法是认证前阶段(未认证用户)的DNS必须指向公网DNS,比如114.114.114.114或8.8.8.8,让用户能解析出探测URL,AC才能拦截重定向。认证通过后再把DNS切回内网DNS或智能DNS。这个DNS切换是认证网关通过RADIUS下发属性实现的,配置时要明确区分认证前和认证后两套DNS。
第四个原因:不同手机系统和浏览器的差异
苹果手机和安卓手机的Captive Portal机制不一样,微信内置浏览器和系统浏览器也不一样。苹果手机连上WiFi后会自动弹"登录网络"窗口,体验最好;安卓部分国产ROM会静默探测不弹窗口,需要用户手动打开浏览器;微信内置浏览器对重定向更敏感,经常停留在空白页。解决办法是在Portal页面上做兼容性适配:页面要响应式,手机屏幕上能完整显示认证按钮;按钮不要放在iframe里,否则部分手机点不动;验证码输入框要能唤起系统键盘;页面加载要快,超过3秒手机就超时退出。上线前要拿苹果、华为、小米、OPPO、vivo各一台真机测试,不能只在自己手机上测。
第五个原因:认证成功后页面不跳转
用户输入账号密码点登录,后端认证成功了,但浏览器停留在Portal页面,没有跳转到目标网站。这是因为认证成功后的跳转URL没有配,或者跳转URL是内网地址用户访问不了。正确配置是认证成功后跳转到园区门户网站,或者跳转到用户最初想访问的那个HTTP网站。跳转URL要在认证服务器上配置,不要用相对路径,要用完整的http://开头地址。还要测一下:认证成功后关掉浏览器重新打开一个网页,能不能直接上网,不要再弹Portal。
第六个原因:部分应用绕过浏览器不走HTTP
用户认证完了,但微信消息发不出去、App Store刷不出来。这些App不是走浏览器HTTP请求,是直接走长连接或私有协议,Captive Portal拦截不到。这种情况下用户必须先打开一次浏览器访问网页,触发重定向完成认证,之后再用App才能上网。这是Portal认证的固有限制,不是bug。园区IT要在用户告知里写清楚:连上WiFi后先打开浏览器随便访问一个网页,完成认证后再用其他App。不要让用户以为是WiFi坏了。
排障的快速定位方法
接到"页面弹不出"的投诉,按顺序问三个问题:第一,手机连上WiFi后系统有没有弹"登录网络"的小窗口?有,说明Captive Portal正常,问题在页面本身;没有,说明手机探测URL没被拦截,查AC重定向规则。第二,手动打开浏览器输入一个HTTP地址(比如http://1.1.1.1)能不能跳转到Portal?能,说明用户之前访问的是HTTPS网站的问题;不能,查DNS和AC配置。第三,其他用户能不能弹页?都不能,是认证服务器或AC整体故障;只有这一个用户不能,是手机兼容性问题,让他换浏览器或开关WiFi重连。
Portal弹页问题本质是手机系统、浏览器、HTTPS、DNS之间的兼容性问题,不是某一个设备坏了。上线前拿真机测一遍主流机型,把证书、DNS、重定向URL配好,大部分投诉就不会出现。出现投诉时按三个问题快速定位,不用每次都跑现场。