任何一套校园网认证计费系统上线,前两周是最难熬的。不是系统本身有问题,而是真实用户在真实网络环境中产生的各种边界情况,测试环境根本测不出来。我们做过好几个高校项目的交付,总结下来,上线初期的用户投诉几乎集中在几个固定的技术痛点上。
第一个高发投诉点是Portal页面弹不出来。这是所有认证计费系统上线初期最典型的问题。原理上不复杂:用户终端连接WiFi后发起HTTP请求,AC检测到未认证终端,通过Portal协议把请求重定向到认证服务器的Portal页面。但在真实环境里,这个流程要经过至少五个环节:终端→AP→AC→核心交换机→Portal服务器,任何一环出问题都会导致Portal弹不出来。最常见的原因有三个:一是终端DNS缓存导致重定向失败——用户手机之前连过别的WiFi,DNS缓存了旧的解析结果;二是AC和Portal服务器之间的Portal协议版本不兼容,某些厂商的AC在Portal协议实现上有自己的扩展字段,跟标准协议不完全一致;三是HTTPS请求的处理——现在很多手机浏览器默认走HTTPS,但Portal重定向对HTTPS的处理比HTTP复杂得多,如果AC没有正确配置HTTPS劫持或者SSL证书,用户打开的第一个网页如果是HTTPS的,跳转就会失败。
第二个高频投诉是认证成功之后还是上不了网。这个问题比Portal弹不出来更让运维人员头疼,因为用户看到的是"认证成功了",但实际上流量没通。排查下来,根因往往在权限下发环节。认证计费系统在认证成功后需要向AC下发用户权限——包括VLAN、QoS策略、允许访问的IP段等。如果AC和认证服务器之间的RADIUS CoA(Change of Authorization)报文没发出去,或者发了但AC没正确执行,用户的状态在认证服务器上是"在线",在AC上还是"未认证"。另外还有一种情况:代拨模式下,认证成功后代拨网关向运营商BRAS发起PPPoE拨号,这个拨号本身需要几秒钟,如果代拨网关的拨号超时设置太短或者运营商BRAS响应慢,就会导致用户端显示认证成功但是浏览器打不开网页。
第三个问题特别容易被忽略:某些老旧终端设备无法完成认证流程。高校网络环境里终端类型极其复杂——学生手里的手机从几百块的安卓机到最新款iPhone都有,系统版本跨度可能有三四年。曾经有一个项目,上线后发现一批2018年前后出厂的安卓手机在Portal认证页面输入账号密码后点击提交,页面没反应。排查了很久才发现是Portal页面使用的前端框架对那个版本安卓系统自带的WebView内核不兼容,导致JavaScript事件没有正确触发。最后的解决办法是让Portal服务器做终端类型检测,对低版本WebView走降级页面模板,去掉JS交互逻辑改成纯表单提交。
第四个投诉集中在MAC无感知认证失效。无感知认证的原理是首次认证通过后,认证服务器记录用户的MAC地址和账号的绑定关系,下次同一终端连上WiFi时AC自动发起认证请求,用户无需再次输入账号密码。但在实际运行中,无感知认证的失效概率远比想象中高。手机端的随机MAC地址功能(iOS和Android近年都默认开启)是一个主要原因——每次连WiFi产生的MAC地址都不一样,认证服务器记录的绑定自然就失效了。更隐蔽的一个原因是某些老旧AP在频繁漫游切换时上报给AC的MAC地址会延迟或不准确,导致AC在发起无感知认证请求时携带的MAC地址跟实际终端MAC不一致。
第五个投诉领域是套餐计费异常。包月套餐的用户在月底被提前停机、流量套餐的用户发现实际消耗的流量比手机系统统计的多出不少、充值之后余额没有实时到账。这些问题背后往往不是计费逻辑本身的bug,而是对账机制和数据同步延迟。比如包月套餐的每日停机检查脚本在凌晨2点执行,如果某个月末(比如30号)正好是休息日,脚本执行失败但没告警,到31号用户就被误停了。流量统计方面,计费系统统计的是网络层流量(含协议开销),而手机端统计的是应用层流量,两者天然就有10%-15%的差异——这个差异如果不提前告知用户,一定会引发大量投诉。
处理这些上线初期投诉,最有效的不是技术方案改得多快,而是信息透明和快速响应。给每个投诉用户一个明确的答复——不管是问题确实存在正在修复、还是用户配置问题、还是暂时不支持的功能——都比沉默要好得多。很多学校信息中心上线前没有准备FAQ页面和自助排障指引,导致学生一遇到问题就往信息中心打电话,值班人员根本接不过来,最后产生大量的重复投诉和情绪升级。
判断一个认证计费系统的交付质量,不能只看上线那天系统跑没跑起来。前面两周的用户投诉类型分布和响应处理效率,才是一面最真实的镜子。如果一个项目团队在上线前能针对这五类高发问题逐项做好预案——Portal兼容性测试覆盖主流终端型号、RADIUS CoA下发做完整的端到端验证、MAC无感知认证做跨AP漫游场景的压力测试、计费逻辑做边界日期的全流程演练、自助FAQ页面提前准备好——那么上线初期的震荡期可以从两周压缩到两三天。
最后还有一个小建议:上线第一周不要开全量用户。找一两个宿舍楼或者一两个学院的师生先做灰度发布,观察三五天,把暴露出来的问题修好之后再全量开放。这个做法看起来慢了几天,但实际上比全量上线后再手忙脚乱到处救火要省时间得多。很多项目就是太急了——领导要求某天必须上线,结果全量一开,第一天就接了四五百个投诉电话,整个信息中心的人一个礼拜没睡好觉。