前言
学校一年前开通了校园网,然鹅信号未覆盖我们住的公寓,又多忍受了一年的小破宽带(10M带宽,100块300个小时)
上个星期,架设了一年的校园网终于通了,然后我们发现——校园网69元一个月,一个用户只能同时登陆两个终端,带宽是无线4M,有线20M(套餐不同带宽不同)。
好的,我不生气。
GTMD
GTMD
GTMD
校园网!!!
嗯,那么接下来,让我们来背刺校园网吧~
(本文最早写于刚架设校园网时,然而由于本人较懒和本着闷声发大财的原则,在大四即将毕业之际放出,造福四方)
本文并非小白手把手教学文章,适合有一定linux基础或有一定钻研能力的童鞋,我相信在金钱与网络面前,人的潜力是无限的(你们觉得上门装配,路由器刷系统¥150,网络配置¥50 有没有可行性?)
郑重声明:本人写此教程为技术分享,它人使用本文提及的技术造成的一切问题,本人不负任何责任
背刺校园网有风险,使用不当可能造成封号等问题,请慎重使用
简介
我们想要实现的目标有如下两个:
1、可以使用路由器连接校园网,达到一人办网全寝可用的目的
2、实现校园网多拨,可在一台路由器上使用多账号登录,带宽叠加
大致的实施流程如下:
1、使用一个工具,模拟锐捷网络协议,实现校园网登录认证
2、对设备进行配置,实现校园网转发(此时能够实现目标1)
3、配置多个虚拟网卡,实现多拨(达成目标2)
前期准备
1、一个能刷openwrt(或其他基于openwrt系统)的路由器(如果手上没有这样的路由器,可以上网上搜一下相关推荐,在这里就不多介绍了)
2、把路由器刷上openwrt(烦请自行搜索,此处省略一万字)
3、浏览器输入192.168.1.1进入控制台,用户名是root,默认密码是admin(自己设置了其他密码就用你设置的那个)
4、查看系统信息,记录一下内核版本(本人路由器使用系统是潘多拉,一个基于openwrt的发行版)
5、自行设置路由器,保证在非校园网环境下可以正常使用(随便在哪拽根能上网的网线,插路由器上设置一下看看有没有wifi能不能上网)。
确认可用之后我们就可以关闭控制台了
认证工具
要背刺校园网,我们首先需要一款认证工具,本校使用的是锐捷认证(802.1X),在github上可以找到两款替代工具,一个是mentohust,还有一个是minieap
从软件工程角度来说,两款工具比较起来明显是minieap设计更加优雅
然而,我懒
所以本文中使用mentohust认证,对minieap感兴趣的同学可以自行学习使用
本节后面的内容需要一定linux基础,如果你实在不会搞,百度mentohust说不定能找到别人编好的二进制文件,注意他们的系统内核版本和你的是否一致(未知来源的二进制文件可能有安全风险,请谨慎使用)
发现有的openwrt版本控制台自带mentohust软件,这样的用户可以跳过本节甚至本教程(想要多拨的童鞋不要使用控制台配置mentohust,参照后面的方法远程连接后配置。只想单账号使用的话可以尝试使用控制台配置,不好使再参考本教程)
我们可以从github上获得mentohust源码。
https://github.com/hyrathb/mentohust
需要注意的是,我们上文给出的mentohust是
获得源码以后,我们需要将其编译为二进制文件,放到路由器上。
过程大体如下:
1、在本地搭建交叉编译环境
2、根据你实际的系统内核,编译mentohust,得到二进制文件(这里附上一个mentohust交叉编译教程,请根据实际情况参考使用)。
3、使用scp工具(windows下可以用winscp)将二进制文件上传到路由器的/bin/文件夹下(或其他文件夹)
4、运行二进制文件,此处先不必做配置,仅查看程序能否运行,然后关闭程序,进行路由器相关配置
编译成功后交叉编译环境不要删除,后面可能还需要用到
设置网卡
(此处系统版本不同可能有较大差异,如果看不懂,可自行上网寻找配置方法)
锐捷认证使用DHCP,需要设置网卡(入户线接哪个网口就设置哪个)
打开192.168.1.1,找到接口选项(这个地方不同系统版本界面可能不同),选择你要使用的网卡,点“修改”
找到协议选项,选择DHCP,确认保存
锐捷认证
网卡设置完成后,接下来就可以设置mentohust客户端了
随意使用一个ssh工具(没有的话就下个putty,体积小、不用配置),连接ip:192.168.1.1,port:23(不确定是不是所有发行版都是23端口……不是的话就自己查怎么连吧)
用户名密码为192.168.1.1里使用的用户名密码(不同发行版登录信息不同,登陆后和我截图不一样是正常的)
登陆之后,命令行输入mentohust -h获取帮助
按照帮助填写你自己的信息,不同学校需要的参数不同。大多选项有默认值,请按照实际情况修改(可参考WIKI)
HRBUST同学可参考我的方案:
仅配置用户名,密码,网卡名,组播方式和DHCP方式,即-u -p -n -a -d(-a和-d两个选项hrbust均设置为1)
配置完成后,前台运行mentohust,查看是否认证成功,连接路由器WIFI,查看是否可以连接外网(如果认证有问题或wifi连不上请自行更改设置调试)
如果前台运行成功,实际使用时在启动命令中加上-b1选项,让其后台运行,不保留输出
开机运行
如果你成功进行过了上面的全部步骤,那么恭喜你已经实现了目标1,可以使用路由器登录校园网。
最简单的开机运行方式:在/etc/rc.local中添加运行脚本
只需要将你的运行命令写入/etc/rc.local,便可实现开机运行(啥?你不会用VIM???)
注意:
1、/etc/rc.local中使用绝对路径。
2、最好在该命令前加个延迟,防止因路由设备初始化导致认证失败
sleep 180 #延迟180秒(180秒长了点,没事插拔路由器试个合适延时就完事了) /bin/mentohust -uxxxxx -pxxxxx -nxxxxx -a1 -d1 -b1 #启动命令(路径视实际情况而定)
多拨
请详细阅读完此章节(最好是本文章全文)后再进行操作
如果你有一个正在后台运行的mentohust,再次启动一个mentohust进程,它会提示你MentoHUST已经运行,并给出PID
正常情况下,进程锁可以保证进程的唯一性,防止资源冲突。但是当我们想要使用多拨时,这道保护措施就会成为我们的阻碍。
所以,实现多拨的第一步便是:搞掉进程锁
我们简单看一下它的运行机制:
在源码中找到src/myconfig.c,打开
可以看到在第88行定义了一个checkRunning函数:
查看其实现:
可以发现,这里进程锁的原理是:
在程序运行时,生成一个PID文件,将其加锁。再次有进程开启时,读取锁状态,如果有锁,读取加锁进程PID,打印到控制台并返回
知道了进程锁原理,想要搞掉它便有了两种方案:
1、从源码下手,注释相关代码并重新编译
2、不修改源码,每次运行后手动删除生成的PID文件(小白/懒人福音)
方案一:
想要使用第一种方案,需要注释掉checkRunning内和锁文件相关的代码,然后使用上面的交叉编译环境,重新编译二进制文件,放入路由器
checkRunning里面功能主要有三部分:
一、文件锁相关
二、-k参数相关(关闭重启等操作)
三、开启守护进程相关
在这里我们主要是想去除文件锁的部分,但是软件关闭重启等操作是基于文件锁的,简单去除文件锁会导致-k参数的功能不可用,这里并不想浪费时间修改代码来维护这一功能,所以最后我们直接删除前两部分的代码,只保留下守护进程相关操作
将checkRunning多余代码删除,留下以下代码:
static void checkRunning(int exitFlag, int daemonMode) { if (daemonMode) { printf(_(">> 进入后台运行模式,使用参数-k可退出认证。\n")); if (daemon(0, (daemonMode+1)%2)) perror(_("!! 后台运行失败")); else if (daemonMode == 3) { freopen(LOG_FILE, "w", stdout); setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); freopen(LOG_FILE, "a", stderr); } } return; }
方案二:
想要使用第二种方案,需要在每次运行mentohust之后,执行以下命令,删掉PID文件(rm -f牛逼!!!)
rm /var/run/mentohust.pid -f
使用两种方法都可以绕过进程锁,开启多个mentohust进程
注意:去除进程锁后,可能会引起一些问题:
1、程序进入后台运行后,你不再可以直接使用-k参数来关闭程序,而是需要手动ps出全部进程并手动kill掉mentohust
2、多个mentohust进程可能造成资源冲突(为了避免此现象,每个mentohust进程使用的网卡不可重复,用户名不可重复,后台运行时不要保留输出)。
可以多开进程以后,实现多拨只需开启多个进程,分别使用不同的账号并绑定不同的网卡即可(哦,对了,你没有多个网卡)
开启多个虚拟网卡
一般来说,入户插到路由器上只有一条线,所以也就只会使用一个网卡。那么,如何才能实现一根线使用多个网卡呢?
这里我们使用了openwrt的macvlan和mwan3两个软件(这两个一般是自带的并且可以直接在控制台配置)
macvlan可以创建多个虚拟网卡链接到eth0,也是就WAN口,然后可以在这些虚拟网卡上创建多个虚拟WAN口,每个虚拟WAN口拨一个账号,这样便可以实现一个单线多拨功能。
mwan3的作用,就是把你路由器的流量,做路由表级别的负载均衡,按照设置的优先级和权重分配到不同的WAN口上,从而起到网速叠加作用。
如果你的openwrt没有这两个软件,可以使用下面的命令安装(安装的都是自带控制台界面的版本)
opkg update
opkg install kmod-macvlan mwan3 luci-app-mwan3
(我叒懒了)配置方法可自行百度 openwrt多拨 或者参考此教程(也是我百度的)
开启多个网卡,配置好负载均衡,并且将需要使用的网卡配置为DHCP后,就可以多拨啦:
1、先测试你能不能用一个账号认证联网(前台操作)
2、ctrl+c停掉上一个进程,记录下来账号和网卡的对应关系。换一个账号和网卡,继续尝试(记录对应关系是因为每个虚拟网卡有自己的MAC地址,如果你换了虚拟网卡,对锐捷来说相当于你使用了一台新机器登录)
3、循环12步骤,直到你测试成功所有你想要使用的账号,注意每个账号绑定的网卡要不同
4、打开多个进程,都使用后台运行
5、进入192.168.1.1控制台,找到“负载均衡”,查看是否所有你使用了的网卡均为绿色(下面的图是盗的,它使用了两个网卡)
6、下载一些东西,让网络运行一段时间,并有一定的流量产生
7、打开控制台的“接口”页面,看使用的接口流量是否相近,如果相近则表示成功(盗的图)
8、如果不成功,有某个使用了的接口几乎没流量,或者负载均衡里面直接红了,查看你的设置,检查启动方式、网卡配置、负载均衡配置、以及所有我提到过的你设置过得东西。。。(慢慢查吧,帮不了你了)
9、如果成功了,恭喜你,将你的启动命令记录下来,设置成开机启动即可
多拨开机运行
开机运行的方法是一样的,写入/etc/rc.local
两种去进程锁方式的启动脚本略有差别(以开3个进程为例)
使用注释重新编译的童鞋如下:
sleep 180 #延时180S /bin/mentohust -uaaaaa -paaaaa -naaaaa -a1 -d1 -b1 #启动进程1 sleep 60 #延时60S /bin/mentohust -ubbbbb -pbbbbb -nbbbbb -a1 -d1 -b1 #启动进程2 sleep 60 #延时60S /bin/mentohust -uccccc -pccccc -nccccc -a1 -d1 -b1 #启动进程3
没有改源码的童鞋如下:
sleep 180 #延时180S /bin/mentohust -uaaaaa -paaaaa -naaaaa -a1 -d1 -b1 #启动进程1 sleep 60 #延时60S rm /var/run/mentohust.pid -f #删了pid文件 /bin/mentohust -ubbbbb -pbbbbb -nbbbbb -a1 -d1 -b1 #启动进程2 sleep 60 #延时60S rm /var/run/mentohust.pid -f #删了pid文件 /bin/mentohust -uccccc -pccccc -nccccc -a1 -d1 -b1 #启动进程3(最后一个进程删不删无所谓)
启动进程和删除pid文件中间的延时时间可以按实际情况更改,但不建议不加延时。
注意不要使用重复网卡!!!