小记——GTMD校园网

时间:2021-08-06 06:40:17

前言

学校一年前开通了校园网,然鹅信号未覆盖我们住的公寓,又多忍受了一年的小破宽带(10M带宽,100块300个小时)

上个星期,架设了一年的校园网终于通了,然后我们发现——校园网69元一个月,一个用户只能同时登陆两个终端,带宽是无线4M,有线20M(套餐不同带宽不同)。

好的,我不生气。

GTMD

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(自己设置了其他密码就用你设置的那个)

小记——GTMD校园网

4、查看系统信息,记录一下内核版本(本人路由器使用系统是潘多拉,一个基于openwrt的发行版)

小记——GTMD校园网

5、自行设置路由器,保证在非校园网环境下可以正常使用(随便在哪拽根能上网的网线,插路由器上设置一下看看有没有wifi能不能上网)

确认可用之后我们就可以关闭控制台了

 

认证工具

要背刺校园网,我们首先需要一款认证工具,本校使用的是锐捷认证(802.1X),在github上可以找到两款替代工具,一个是mentohust,还有一个是minieap

从软件工程角度来说,两款工具比较起来明显是minieap设计更加优雅

然而,我懒

所以本文中使用mentohust认证,对minieap感兴趣的同学可以自行学习使用

 

本节后面的内容需要一定linux基础,如果你实在不会搞,百度mentohust说不定能找到别人编好的二进制文件,注意他们的系统内核版本和你的是否一致(未知来源的二进制文件可能有安全风险,请谨慎使用)

发现有的openwrt版本控制台自带mentohust软件,这样的用户可以跳过本节甚至本教程(想要多拨的童鞋不要使用控制台配置mentohust,参照后面的方法远程连接后配置。只想单账号使用的话可以尝试使用控制台配置,不好使再参考本教程)

 

我们可以从github上获得mentohust源码。

https://github.com/hyrathb/mentohust

需要注意的是,我们上文给出的mentohust是hyrathb 修改后的版本(添加了新版锐捷v4支持),想要阅读源码了解mentohust工作流程的童鞋可以参考该项目的早期版本

获得源码以后,我们需要将其编译为二进制文件,放到路由器上。

过程大体如下:

1、在本地搭建交叉编译环境

2、根据你实际的系统内核,编译mentohust,得到二进制文件(这里附上一个mentohust交叉编译教程,请根据实际情况参考使用)。

3、使用scp工具(windows下可以用winscp)将二进制文件上传到路由器的/bin/文件夹下(或其他文件夹)

4、运行二进制文件,此处先不必做配置,仅查看程序能否运行,然后关闭程序,进行路由器相关配置

编译成功后交叉编译环境不要删除,后面可能还需要用到

 

设置网卡

(此处系统版本不同可能有较大差异,如果看不懂,可自行上网寻找配置方法)

锐捷认证使用DHCP,需要设置网卡(入户线接哪个网口就设置哪个)

打开192.168.1.1,找到接口选项(这个地方不同系统版本界面可能不同),选择你要使用的网卡,点“修改”

小记——GTMD校园网

找到协议选项,选择DHCP,确认保存

小记——GTMD校园网

 

锐捷认证

网卡设置完成后,接下来就可以设置mentohust客户端了

随意使用一个ssh工具(没有的话就下个putty,体积小、不用配置),连接ip:192.168.1.1,port:23(不确定是不是所有发行版都是23端口……不是的话就自己查怎么连吧)

小记——GTMD校园网

用户名密码为192.168.1.1里使用的用户名密码(不同发行版登录信息不同,登陆后和我截图不一样是正常的)

小记——GTMD校园网

 登陆之后,命令行输入mentohust -h获取帮助

小记——GTMD校园网

按照帮助填写你自己的信息,不同学校需要的参数不同。大多选项有默认值,请按照实际情况修改(可参考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函数:

小记——GTMD校园网

查看其实现:

小记——GTMD校园网

可以发现,这里进程锁的原理是:

在程序运行时,生成一个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控制台,找到“负载均衡”,查看是否所有你使用了的网卡均为绿色(下面的图是盗的,它使用了两个网卡)

小记——GTMD校园网

6、下载一些东西,让网络运行一段时间,并有一定的流量产生

7、打开控制台的“接口”页面,看使用的接口流量是否相近,如果相近则表示成功(盗的图)

 小记——GTMD校园网

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文件中间的延时时间可以按实际情况更改,但不建议不加延时。

注意不要使用重复网卡!!!