事情追溯到前一段时间,从东校区先传来mentohust被禁的消息,意味着装有mentohust的openwrt路由器不能用了,这就意味着电脑上网要用很不友好的锐捷客户端,开机都要连接一下,还要被弹广告。手机就只能用流量了。更不用说其他需要联网的设备了,根本就不能上网。

幸亏我现在不住东校区,所以根本不用在意这个问题,在实验室还能用mentohust路由器,爽哉。不过几个月后,实验室装上了新的交换机,据说可以告别之前总是断网的时代,但是新的交换机一换上,就发现mentohust不可用了。
传说锐捷加密算法从V2升级到了V3,导致不能用mentohust来认证。
接下来我花了一周时间来研究锐捷认证的原理。
使用抓包软件进行包分析。锐捷使用的是EAP协议来认证,EAP是一种常见的认证协议。
1 客户机广播来寻找认证服务器
2 认证服务器收到认证请求信号后返回一段种子
3 客户机发送帐号名,以及经过种子加密后的密码
4 服务器进行认证,然后把成功与否的信息发给客户机,此外还发送额外的扩展信息
5 客户机发送用特定算法加密的额外的扩展信息
6 服务器再次认证这个扩展信息,如果这个信息错误,而帐号密码正确,则报错“非指定的客户端”。
7 认证成功后,客户机每半分钟向服务器发送一个心跳包,表示自己的在线状态。
8 当关闭锐捷的时候,客户端会向锐捷发送一个下线命令。
知道这个原理后,“使用非指定的客户端”是发生在校验扩展信息的时候,那么这个扩展的加密算法是我们学校锐捷私有的。
考虑绕过这个扩展认证,发现服务器强制需要认证。尝试反编译锐捷,花了几天时间,发现锐捷不好被反编译。
试试能不能使用电脑连接路由器,路由器的MAC克隆客户机的MAC,用路由器来伪装成客户机,发现也不行。
近乎绝望了。。
官方公布了linux版本,用ubuntu试了试,一开始以为不能用,后来知道用法后觉得还是比较好用的,但是只有可执行文件,没有源码包,所以只能在x86和x64架构下运行,找了个ARM开发板,装了个ubuntu发现锐捷跑不了。
最近看到有人用x86的小型主机来作为路由器,在我们学校还成功认证了。
顿时觉得花一周的时间来研究锐捷的反编译确实不划算,还不如买一个x86的软路由来认证。
说到x86的主机,旧电脑不错,把电子垃圾废物利用,但是旧的主机不但慢,而且功耗高。淘宝上有一些x86的小主板,有一些是银行,超市用的小型机淘汰下来的主板,有一些是工控机的主板,还有一些是大路由器的主板,网上掏了一个G945主板,板载Intel凌动N270,主板带有两个网卡。配上512M DDR2 内存,硬盘的话我自己有,不用去淘宝买了。 此外还要一个电源。
主板到后,装好内存,插一个可以启动的U盘,连接显示器,按下开机键,测试一下主板是否完好,电源灯点亮,蜂鸣器响一声,显示器显示了U盘里的系统。说明主板内存是好的。
接下来找一个8G的U盘作为硬盘,用一个大于1G的U盘烧个ubuntu12.04-desktop LTS系统映像。
选用linux操作系统是因为它比较灵活,适合做服务器。ubuntu是linux发行版中不错的系统,安装ubuntu12.04-desktop LTS版,因为server板的需要在线安装,没有图形界面对新人不友好。
在安装过程中选英文做语言,把系统装在8g大的u盘里。等候片刻,系统装好了。
安装好系统后需要对网卡进行配置,需要两张网卡
1.eth0 用来连接外网,锐捷认证就是针对这个端口
这个网卡配置成自动获取ip,配置开机自启动
2.eth1 来连接内网的路由器或交换机
配置为静态ip 192.168.0.1 开机自启动
sudo ip addr add 192.168.0.1/24 dev eth1
可以改interface文件。。。
在学校网站上下载锐捷linux版,用windows的rar解压后得到targz文件,选其中的x86目录下文件,用u盘拷到路由器中。
认证成功,打开浏览器,可以正常上网。
认证的过程中network-manager被无辜杀害。
接下来设置网络共享。
本来可以用network-manager来使用图形化的软件管理网络的,可惜万恶的锐捷在认证之前把network-manager杀掉了,只能用命令行来配置了。
安装DHCP软件dnsmasq
sudo apt-get install dnsmasq
配置dnsmasq
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf-backup
interface=eth1
dhcp-range=192.168.0.100,192.168.0.250,72h
启动dnsmasq
sudo /etc/init.d/dnsmasq start
设置网络转发
sudo iptables -A FORWARD -o eth0 -i eth1 -s 192.168.0.0/24 -m conntrack –ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
设置NAT
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
最后用锐捷认证,成功!
设置锐捷开机启动
重启发现可以联网。
把eth1的网口连接到无线路由器的wan口,设置路由器为自动获取ip,即可上网。
最后给这块裸板子做一个亚克力外壳,可酷!
========后记==========
之前使用了一个8G的USB3.0的U盘,但是只用了3G多一点,对于一个自己刚做出来的硬盘的确有些浪费,不如换个4G的U盘来装系统,于是一番折腾……
使用泸州老窖的广告U盘来装系统于是走上了不归路,先是那个U盘容量4G,不够ubuntu最小标准,所以插入一个比较大的U盘保证能验证通过,然后不装在这个U盘上。但是这个垃圾U盘太不问题,有时不能引导系统,在一个这个垃圾U盘本来就是用黑片制成的,读速度超慢,开机极其缓慢。
后来放弃了,还是改回老系统盘吧。
因为只用来做锐捷认证,看能不能找个精简版的系统装上,发现有些miniLinux系统不像一个系统了,用精简版的GhostXP刚开机就蓝屏了,折腾了一圈,还是换回UBUNTU12.04LTS吧。
系统装好以后,我知道network-manager要被杀掉,然后就不如装个wicd来替代他,网上说两者有冲突,于是把network-manager卸载了,在装wicd之前不小心重启了,然后,然后就上不了网了。然后下了deb包考过来,发现一堆依赖问题,还是重装吧!
其实这次折腾为了是为了使网络里的主机不使用路由器的DHCP服务,而使用软路由的DHCP服务,这样在软路由的机器里就有dhcp的lease日志,分析日志文件,即可得到某个MAC何时第一次申请租约,进而得到这个MAC所有者来到实验室的时间,变相的一种签到方式。
我就把路由器设置为透明网桥,然后,然后就进不去管理页面了。于是又重新给路由器刷机。瞎折腾害死人!!!
终于装好了新的路由器系统,自己做了一些精简,把libreoffice卸载掉,把firefox换成midori,卸载掉系统中的一些不用的软件。
设置关机按钮的功能是直接关机,改/etc/acpi/events/powerbtn.sh的内容
设置自动开机,在BIOS里找到自动开机选项,然后设置为格林威治时间。
设置自动关机,在crontab里设置shutdown +1 这样1分钟后关机
想让在关机的时候发出警告声,要取消被禁用的pcspkr驱动,安装一个叫beep的软件,可以在命令行用beep来控制蜂鸣器。
虽然软路由可以自动开关机,但是无线路由器在软路由不工作的时候也同样不能上网,手机就比较麻烦,脸上无线网,还上不了网,能不能无线路由器和软路由一起开机一起关机呢,就从软路由的主板上找到12V和地两个端,用导线连接至机箱外面的无线路由器的电源上,开机即可使路由器一起开机,关机后也会切断无线路由器的电源。这样就保证了在有无线信号的时候就能上网,而且低碳环保。
开机脚本不能用root的方式执行,导致锐捷不能开机运行,而是crontab驱动,这样不好,于是研究得到在rc.local中使用su – root -c “command” 的方式来开机启动,开机运行锐捷以后,要动态的设置eth1的IP地址,设置防火墙,这些设置要在认证之后。
有时候锐捷会抽风,认证的时候找不到服务器,而且只尝试3次,然后就永远死掉了。如果启动一个新的锐捷程序,那会告诉你已经有个在运行了,所以需要跑一个后台监控程序,监控锐捷认证的日志,一旦发现日志中有“找不到服务器”的信息,立即把锐捷杀掉,删除日志并启动一个新的锐捷。
参考

One thought on “软路由配置ubuntu共享无线上网

  1. 写的很好,尤其是使用非指定的客户端这一部分,我曾经也琢磨过为什么会有这个问题。这么一理解,很是明白。另外,可以上些图片嘛

Leave a reply