微信关注即可使用 Wi-Fi,取消关注即断网的路由器是怎样实现的

01-08

1、AC、AP以及ACL
做WIFI实施部署,涉及几个概念:AP、AC、无线路由器、认证,简单说来:
AP就是无线接入点。
无线路由器大致可以理解为:AP+路由
AC是用来管理AP用的,可以对AP进行集中式管理。这在诸如连锁店、大公司部署需要支撑上百个接入点以及复杂的控制措施(例如多级认证,微·商白皮书中提到的全国漫游)等就需要AC。
AC最重要的职能是完成对接入设备的认证、授权、计费(AAA),一般采用Radius协议来完成。认证、授权的凭证包括终端的MAC地址等等信息(Radius系统一般放在云端,大家常用的宽带拨号上网的认证都是基于Radius认证)。

终端设备要接入网络,必须在AC的ACL(访问控制列表中)有对应的匹配项,对终端的标识包括MAC地址、IP等信息。
一个粗略的通过微信认证上网的操作流程:
a、用户连接wifi,AC查看ACL列表中是否有对应的信息(主要是MAC地址),如果有效,则直接让用户上网;如果无,则给用户在ACL中临时增加一条有时间限制的记录,以便于在未经认证情况下,能够上微信完成对公众号的关注。
值得注意的是:ACL列表不一定是AC本地的,有可能是从中央Radius服务器获取的,例如在允许漫游的情况下。
b、用户关注公众号,完成认证和授权过程,AC获取用户的MAC地址等信息,从ACL中删掉用户未授权认证的临时上网记录并新增一条经过认证授权的记录,用户可以正常上网。
c、用户取消关注公众号,则从ACL中删除掉对应的记录
ACL的信息属于7层协议的网络层,并没有应用层的OpenID等信息。

2、公众平台“开发模式”
如果在微信公众平台中将高级功能设置为“开发模式”,则在用户执行关注公众号、取消关注等操作时候,公众平台都会以事件方式通知“开发模式”定义的接口。
公众平台接口标识一个微信用户并不是使用用户微信号,而是用类似o0geNuJmbuDIwnMMCOhF6hFFLEqU这样的字符串,实际上就是OpenID(接口协议中的fromusername)。
而OpenID之类的信息在7层协议中是在应用层(第7层)

3、OpenWRT以及管理系统
目前各种智能路由器(极路由、果壳、小米等)都是基于OpenWRT系统。而对OpenWRT系统本身的管理都是基于wifidog等管理系统,可以与外部系统(例如微信公众平台)直接对接。

因此回到话题,最本质的问题其实就是:
AC是怎样来匹配ACL列表中的MAC和OpenID的呢?

由于不知道“必智微信关注即登录上网”是否需要商家在公众平台中配置指向无线路由器(AC或AP)的接口地址,因此分成两种情况讨论:
1、如果需要配置,则:
由于有关注、取消关注等事件时候,都会有url地址通知AC的服务器,由于是TCP链接,在关注、取消关注的报文的TCP报文中本身就有MAC信息,在HTTP报文中有OpenID信息,因此只需要在同一个报文中就能获得MAC和OpenID的对应关系。

2、如果不需要配置,则:
由于要识别用户关注、取消关注事件的报文,在应用层并无明确的特征(url回调),此时后可以通过抓包获取关注、取消关注事件的报文,然后对符合符合特征的报文进行处理,并不难,但采用此种方式在维护较为麻烦,可能性不大。

与其他支持微信认证的智能WIFI(例如rippleos之类)解决方案的差异(个人感觉):
1、AC+AP一体化方案:其他厂商一般是根据用户接入规模大小,分为AP、AC+AP的方案,如果接入终端数少,则直接采用AP方案,如果规模较大,则采用AC+AP方式(AC和AP是独立的终端)。而必智的方案算是AC+AP一体化方案。
2、集中认证:应该采用了独立Radius系统,其他厂商较少提供多店集中认证、漫游的方案。
3、宣传策略更貌似高大上,技术上其他有OpenWRT自主研发能力的厂商也能做,但其方案在简化接入、面向多店集中认证上出发点确实不错,另外在整体解决方案上包装得更高大上。