话说软路由这次折腾的差不多到最后,是无线路由器出了问题。正为之发愁,师兄拿来一个USB无线网卡想试一下,插上去可以直接用,其实和有线网差不多,只是多了一步,就是安装hostapd,把无线网卡当作AP发射信号。

但是发现了一个问题,就是wlan0和eth1两个设备发生了冲突,用单无线的时候很好,速度也很快,单用有线的时候也很好,但是两者一起用就出现问题了,先打开的那个设备有效,后打开的设备不能使用。
原因应该是NAT转发的时候出了问题,应该是iptables配置的问题,联想到路由器,和这个情况差不多,一个wan,几个lan,一个wlan,于是翻开openwrt路由器的网络表,里面有个br的网络设备,就是网桥,的确,利用网桥可以把eth1和wlan0连接到一起,然后NAT把包转发到这个网桥上去,再由网桥去继续转发包,这样子,有线网和无线网就成了一个局域网,正式想要的结果。
在网上搜罗了一些关于网桥的资料,验证通过。
1安装网桥控制程序 sudo apt-get install bridge-utils
2新建网桥 sudo brctl addbr br0
3设置网桥地址并开启 sudo ifconfig br0 192.168.0.1/24 up
4向网桥里添加接口 sudo brctl addif br0 eth1
5开启无线开关 sudo hostapd -d /etc/hostapd/hostapd.conf -B
6向网桥里添加接口 sudo brctl addif br0 wlan0
然后把dnsmasq的dhcp interface改为 br0
配置NAT转发到br0网桥上
sudo iptables -A FORWARD -s 192.168.0.0/24 -i br0 -o eth0 -m conntrack –ctstate NEW -j ACCEPT
sudo iptables -A FORWARD conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A POSTROUTING -o eth0 -j MASQUERADE
接下来又研究了开机启动的问题
开机需要按步骤做以下事情
1启动无线信号发射hostapd
2建立网桥br0
3设置iptables
4启动锐捷
其实用interfaces文件即可实现前3个步骤,最后一个步骤因为经常失效,所以需要一个后台程序监听运行
在interfaces文件里声明br0
auto br0
iface br0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    gateway 192.168.0.1
    network 192.168.0.0
    boardcast 192.168.0.255
    bridge_ports eth1 wlan0
    pre-up sudo hostapd ……
    post-up sudo iptables-restore < ……
    pre-down sudo iptables -F || sudo iptables -F -t nat
    post-down sudo kill `cat …`
锐捷监听程序
检查日志文件,里面是否有“Success”字样,若没有,则杀掉锐捷,然后重启认证,把认证日志写到文件里。
#!/bin/sh
rjsucc=`cat /tmp/rj.log | grep “Success”`
if [ -z "$rjsucc" ] ;then
    date “+%H:%M:%S Auth” >> /tmp/rj.log
    sudo …… -q
    sudo …… >> /tmp/rj.log &
fi
用了一段时间发现无线信号不太稳定,手机基本上连不上去,看看hostapd.conf文件
模式改了一下
country_code=CN
ieee80211d=1
hw_mode=g
channel=3
dtim_period=2
信号稍微稳定了一点,也不知道是什么原因
想把自己的常用的设备DHCP分配地址时设置为静态IP,这个是可以由dnsmasq实现的,打开dnsmasq的配置文件,找到
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.5
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.6
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.7
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.0.8
然后给装上php,以及解析cgi脚本,修改/etc/apache2/sites-available/default
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
AddHandler cgi-script .cgi
</Directory>
暂时就折腾到这里吧~~~
 祝2014新年快乐!
参考

事情追溯到前一段时间,从东校区先传来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次,然后就永远死掉了。如果启动一个新的锐捷程序,那会告诉你已经有个在运行了,所以需要跑一个后台监控程序,监控锐捷认证的日志,一旦发现日志中有“找不到服务器”的信息,立即把锐捷杀掉,删除日志并启动一个新的锐捷。
参考