在OpenWrt上运行广西高校出校控制器

2018年9月更新

桂旅这个学期改成了Dr.COM的Web portal认证,直接抓包用curl发送即可。

前言

最初是想给桂林旅游学院的出校控制器做一个适用于 OpenWrt 的版本,搜索一圈发现已经有大神完成了。广西各高校基本上通用一套系统,有人已经把它解析得十分透彻了。

具体请看 GitHub 页面:https://github.com/xuzhipengnt/ipclient_gxnu

学校的宿舍宽带其实没什么特殊,只是先发一组包含MAC地址信息数据包给服务器202.193.160.123(桂林电子科大服务器地址为172.16.1.1),然后服务器再向交换机下发指令修改ACL(也有可能是firewall)将某MAC地址流量引入联通、移动或者电信的pppoe服务器,这样就可以使得多个运营商pppoe服务器存在于一个网络而不冲突,为什么是MAC地址呢,因为pppoe协议是基于MAC地址,而非ip,所以在家用宽带,即使无法获取ip地址还是可以正常拨号上网的原因。学校的出校控制器是直接用机器网卡的MAC地址,所以如果在路由器上通过MAC地址复制也是可以使用的,但是在局域网内两台相同的MAC地址会引起通信问题。而我们如果也能构造同样的数据包,但是MAC地址自己输入,就可以使得路由器正常拨号了,因此路由器预拨号工具也可以称作MAC开放工具(macopen tool)。

引用一下最核心的内容,实际上只需要在路由器上运行 MAC 开放工具即可,PPPoE 部分的账号和密码都没有特别加密,就是开户的手机号码为账号,密码如果不知道的话就是6个8。

具体使用

经过抓包之后可以得到桂林旅游学院的登陆服务器地址是 192.168.180.1 。由于原项目已经有人写出了 shell 版本的开放工具,直接在路由器上跑起来即可。

具体文件在这里: macopen.sh

需要用到的依赖很简单,都是 OpenWrt 官方源里能够安装的软件包:bash 和 socat

bash 是由于脚本中定义了数组,在 bash 中直接用括号就能定义数组,但其他 shell 连数组这种东西都没有,别的方法实现又有点太复杂了,所以直接装个 bash 就好了。

还有另一个依赖是 socat ,发送登陆用的数据包。

下载之后需要修改的部分不多,isp 变量定义了运营商,以及上方可以定义固定的 mac 和 ip 地址,或者从系统中获取。需要注意的是请自行修改代码中的 eth0.2 ,因为有的路由器默认没设置 vlan 的,网络接口名字可能是 eth1 ,不是 x.x 的形式。

发送心跳包很好解决,直接把这个脚本添加到 crontab 里面就好了。

接下来就很简单了,为了能让登陆脚本正确运行,需要使用多拨中用到了 macvlan 功能来创建虚拟网口。因为 OpenWrt 在 PPPoE 接口不获取 IP 地址,如果再添加一个 DHCP 接口在 eth1 上的话,PPPoE 拨号之后有可能 DHCP 的接口再也连不上了,不知道是什么 BUG 。用 macvlan 的设置有时候比较麻烦,装一下 luci-app-macvlan 这个包秒速解决。

接下来你应该有了两个网络接口,一个专门 PPPoE 登陆,一个专门 DHCP 获取内网 IP 。只要设定一个静态路由指定 192.168.180.0 这个网段走内网的端口即可。

PPPoE 登陆后就能愉快上网了。

后记

由于我不是广西高校的学生,所以测试起来挺复杂的。还好有人已经把分析和成品做出来了,看来有校园网的地方就有登录器的开源实现。

登陆完整之后显示应该是这个样子的。

登陆后效果

说起来真是羡慕桂林的网络,29元的50M联通宽带,39就有100M,加上校内无限流量,省内也是大量的流量。而且还有这么多运营商可选。

像我这里也是醉了,36元一个月4M宽带,加上每年200元提速费提速到20M…再配合1M的上行,无公网 IP 无 IPv6 ,简直是坑。

来仰望一下测速图。不仅如此,UDP 端口还是开放的,挂 PT 什么的也太好了。

GLTU网速测试