iNVAiN

博客园 首页 新随笔 联系 订阅 管理

学校一直用H3C客户端上网,因此无法直接使用无线路由器。后来去一些论坛时常看见DD-WRT和OpenWrt这两个词,也初步了解到wpa_supplicant、njit-client、mentohust、OH3C等等,知道它们经过配置能够通过Wan口实现H3C、锐捷、港湾等802.1x认证,然后Wlan发射WiFi信号,于是就能实现多机无线上网,但因种种原因一直没有尝试。

这两天终于有机会好好折腾,经过一晚上奋战,解决了家里无线上网的问题。而且学校表面上需要H3C客户端,好像用的是华为和3com搞出来的非标准802.1x认证,实际上在学校的教工区却能兼容标准的802.1x认证,因为在Ubuntu 12.04的网络管理器里勾上”802.1x安全性“,填上用户名密码,加密方式选"EAP-MD5",无需客户端直接就能连上。下面写写过程。

802.1x认证到底是个什么东西?我也说不清,本人《计算机网络》刚刚看到网络层,什么IP数据包,什么RIP路由选择协议,刚有点模糊的概念,懵懵懂懂。但是以下的阅读材料推荐你去看看,相信会有更多的认识(有一点就足够了,我们的目标只是让无线路由连上校园网):无证程序员PT桑的技术博客吵吵博客Ubuntu技术支持

既然Ubuntu可以直接连上,那么DD-WRT和OpenWrt这些定制版的Linux经过配置,相信也是能连上的。

具体怎么做呢?

我一开始看到的是这篇文章,作者用的设备是TL-WR703N,刷的是DD-WRT系统,因为它写的比较清楚,操作难度低,如果能一步一步照着做,相对比较轻松。一开始还比较顺利,但是到“将DD-WRT的网页再解包”那一步时,firmware-mod-kit出现了"Bad file size/offset"错误,估计是由于软件不支持Buffalo的固件(Buffalo的固件是经过特殊加密的,DD-WRT的wiki有写)。如果忽略删除多余语言这一步,强行打包,要么固件太大无法生成,要么加了“-min”参数后生成的固件刷入路由器使路由变砖,最后只能作罢。(我用的路由器是Buffalo WHR-G300N-CH,根据销售地区不同,这款路由器又叫WHR-G300N V2、WHR-G301,其实硬件都是一样的。选择这款路由器的原因在于,它是公认的”刷不死“,任何情况下都是一根网线直接救活,要不然保守估计昨天晚上我这个路由器就得返厂维修10次8次的。缺点是内置天线,信号一般。 内置天线并不代表信号一般,调高发射功率之后信号非常好。功率大不一定信号好,关键还是信噪比。)

后来我在一个帖子里发现了点线索(4楼):大多数Linux都有wpa_supplicant,看起来很眼熟,另一篇博文则告诉我更多:刷OpenWrt是可以实现目标的,而且方法也更明确了:“主要是把wpad-mini卸载换成wpad,mini版本的不支持802.1x认证。其实wpad就是wpa_supplicant和hostapd的集合。”

于是转向OpenWrt。OpenWrt实际上就是一个开源的Linux系统,针对无线路由器开发,它最大的特点是:刷入路由器后,文件系统是可写的,所以后期能随心所欲进行配置。那么道路就明确了:1、刷OpenWrt;2、装wpad。

你可以自己定制OpenWrt固件:配置好交叉编译环境后,从源代码编译自己所需的系统,也可以直接使用官方或第三方做好的固件。

交叉编译什么的太麻烦,没有特殊需要就直接拿现成的用吧。

Buffalo WHR-G300N-CH 的CPU是Atheros7240,对应的OpenWrt固件就是”ar71xx“系列,可以在这里找到

OpenWrt的固件有两个分类,jffs2和squashfs,这两个分类的区别我没有细究,似乎squashfs有failsafe机制,也不管了,直接选squashfs。然后固件又有factory / sysupdate / tftp之分,直接选择tftp。(factory版本可以通过原厂固件的web升级界面刷机,sysupdate版本可以通过原有的OpenWrt升级界面刷机,tftp版本用来通过网线刷机)

刷固件的话,用Linux系统很方便,因为各种工具都可以用命令行直接输命令运行,临时要下载新工具也很简单,命令都是一样的,另外由于Ubuntu相对比较普及,能找到的帮助信息比较多,因此推荐使用Ubuntu。

一根网线连上路由器Lan口,就可以开始了。

首先你可以把固件的名字在图形界面里改短一点,而且固件文件的扩展名也是可以删掉的,不然命令行敲着累。

以下引用别人的文章。对Buffalo WHR-G300N-CH这个路由器来说,不论之前刷的是什么固件,只要按照下面的方法操作,就能刷入新固件,不用先刷回官方固件,再刷别的固件。(嫌sudo敲得累可以先sudo -s,这样当前终端窗口就一直是root权限)

在终端输入: 
sudo service networking stop                                              Ubuntu 9.10用户用这个命令、 
sudo service network-manager stop                                    Ubuntu 10.4或以上系统用这个命令、 
 
  
sudo ifconfig eth0 192.168.11.2                                     必须是这个IP段、(即使你现在刷入的是DD-WRT)即使你已经改了路由的IP、这里你还是必须要配置本地网卡为192.168.11.?、eth0是本地网卡、上文有提到要注意、 
sudo ifconfig eth0 netmask 255.255.255.0                       (此步可以省略) 
sudo arp -s 192.168.11.1  AABBCCDDEE5F                     ‘AABBCCDDEEFF’改为你的路由器mac地址(在路由器背面有标签,就是SSID)、可加冒号也可不加、
  
拔掉路由电源、 
在终端输入 
tftp 
tftp> verbose 
提示Verbose mode on. 
tftp> binary 
提示 mode set to octet. 
tftp> trace 
提示 Packet tracing on. 
tftp> rexmt 1 
tftp> timeout 60 
tftp> connect 192.168.11.1 
tftp> put 1.bin                                //1.bin就是你想刷入的固件文件名,自己改,别无脑照着这个输
这时立即插上路由器电源、待ubuntu显示正在推送固件(速度很快,几秒就结束了,然后路由器的DIAG灯会亮,等它熄灭,ROUTER灯亮,路由器就启动完毕了)
然后推送完成、会等待输入、 输入 quit 退出tftp 输入 exit 退出终端、 等待路由重启完成、亮起power与router、刷机完成、

此时第一步完成了。注意OpenWrt没有自带GUI配置界面(我当时下载的trunk版(即开发版)是不带LuCi web界面的,但后来发布的Attitude Adjustment12.09版是自带的,trunk版未知),就是说你想像控制其他路由器一样,在浏览器里输入"192.168.1.1"来配置,办不到!不信你试试,你会得到一个“连接被关闭”的出错页面。OpenWrt只能用ssh登入后,用linux的命令行配置。

引用别人的文章(这篇非常好,值得细读):

第一次登录需要用telnet来设置初始密码:telnet root@192.168.1.1,设置完成之后,就可以用ssh登录了:ssh root@192.168.1.1
默认无线没有打开,需要修改/etc/config/wireless,在wifi-device radio0的设置中,把最后一行option disabled 1删掉。
锐捷绑定了网卡的MAC地址,因此需要将路由器的外网网卡的MAC地址改成你的机器的MAC地址。修改/etc/config/network,在wan的配置后面加上这么一行option macaddr xx:xx:xx:xx:xx:xx,其中xx:xx:xx:xx:xx:xx是你的机器的网卡的MAC地址。
完成上面两步修改后,重启网络:/etc/init.d/network restart

第二步就是要安装wpad了,安装包依然是去OpenWrt的服务器下载,注意不要下载wpad-mini,OpenWRT已经自带了mini版,等会要先卸载掉mini版,安装完整版。我在这里犯过错误,卸载wpad-mini后,装了wpa_supplicant,结果路由器的无线功能没有了……还纠结老半天,才想起这一句“主要是把wpad-mini卸载换成wpad,mini版本的不支持802.1x认证。其实wpad就是wpa_supplicant和hostapd的集合。”(新的Attitude Adjustment版本已经可以在web界面直接管理软件,更加方便)

在电脑终端里(注意不是在ssh打开的那个窗口继续输命令了,要么exit退出,要么开一个新的终端窗口)用scp命令可以传文件到路由器的/tmp文件夹,或者参考这个:pscp -scp xxx.ipk root@192.168.1.1:/tmp

然后继续ssh到路由器,首先卸载wpad-mini。因为你是root登陆的,所以不会有权限问题,命令是:opkg remove wpad-mini

然后cd /tmp

opkg install xxx(xxx是你下载的wpad安装包的文件名)

安装完以后准备802.1x认证的配置文件,一般把文件放在/etc/config/ 目录下,比如叫802.conf,那么就在命令行直接输入命令vi /etc/config/802.conf

vi是一个很有趣的编辑器,我本来按照习惯想用nano,结果OpenWrt没装……只好硬着头皮用vi。vi打开以后不能直接输入,要先按一下“i”键,转换成插入模式,在窗口的左下角能看到状态的转换。然后输入如下内容:

ctrl_interface=/var/run/wpa_supplicant
# ctrl_interface_group=wheel
ap_scan=0
network={
key_mgmt=IEEE8021X
eap=MD5
identity="username"                      # 这里的username换成你的认证用户名
password="password"                     # 这里的password换成密码
eapol_flags=0
}

 

退出vi编辑器时,先按一下“esc”,然后输入“:wq”,(:是命令头,w表示写入,q表示退出)

这个时候就万事俱备啦,很激动,于是我犯了个很二的错误:网线没有接就开始认证,能认证上我看就要到庙里去烧烧香了。

记得把网线接入路由器的WAN口。

继续在ssh窗口里输入:wpa_supplicant -B -i eth1 -c /etc/config/802.conf -D wired

如果一切顺利,这时你的路由应该能正常工作了。OpenWrt默认的WiFi热点就叫这个名字,无密码,你先试试能否上网,测试好再添加密码。

修改/etc/config/wireless文件就能添加密码,详细设置可以看官方wiki

注意这一段,如果你的路由是300M的,按照以下设置才会发挥全部功力,电脑网卡也要相应设置,自己google。

40 MHz channel (300 Mbps)
Stuck at 130Mbps? Get 300Mbps! Note: this violates regulatory requirements.

Edit the file /etc/config/wireless, and restart the wifi AP by executing the following commands…

  uci set wireless.radio0.htmode=HT40+  # or: HT40- if using channel 11
  uci set wireless.radio0.noscan=1
  uci commit wireless; wifi
Note that option 'htmode' should be set to either HT40+ (for channels 1-7) or HT40- (for channels 5-11). You have to use WPA2 encryption with AES.

这一段它在命令行下吭哧吭哧用uci来修改配置文件,其实可以直接编辑配置文件:vi /etc/config/wireless

config wifi-device  radio0
        option type     mac80211
        option channel  11
        option hwmode   11ng
        option path     'pci0000:00/0000:00:00.0'
        option htmode   HT40-
        option noscan   1
        list ht_capab   SHORT-GI-40
        list ht_capab   TX-STBC
        list ht_capab   RX-STBC1
        list ht_capab   DSSS_CCK-40
        # REMOVE THIS LINE TO ENABLE WIFI:
        #option disabled 1

config wifi-iface
        option device   radio0
        option network  lan
        option mode     ap
        option ssid     你的网络名         //自己改
        option encryption psk2+aes              
        option key      你的密码          //自己改

最后解决脚本的问题,让路由器开机自动认证。脚本可以参考这个人的,还有这个OpenWrt论坛技术帖,详细的Linux指令也有。别无脑照着输,把路径变量替换成自己环境下的。

 #!/bin/ash  
killall wpa_supplicant 2>/dev/null  
wpa_supplicant -B -D wired -i eth0 -c /etc/802.1x.conf 
 sleep 5  
udhcpc -i eth0 
nano /etc/init.d/wpa #opens text editor copy paste code in it
#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
START=99

start() {
echo start
wpa_supplicant -D wired -i eth1 -c /etc/config/wpa.conf &
}


#ctrl-x save yes and exit
chmod +x /etc/init.d/wpa
chmod 755 /etc/init.d/wpa
/etc/init.d/wpa enable
reboot

从我这里的经验来看,和后一个帖子一样,手动运行udhcpc是不必要的,但各单位的设置可能不一样。还有WAN口到底是eth0还是eth1需要你用ifconfig看清楚,比如我这里的WAN口就是eth1,所以记得自己改一下,“wpa_supplicant -B -D wired -i eth1 -c /etc/config/802.conf ”

 

至此路由器终于配置完毕。连上WiFi速度杠杠的。

如果你是H3C、锐捷、港湾等非标准802.1x认证,资料也很多,安装相应的第三方软件就行。

以下链接汇总供参考

http://sfjblog.7yue7.net/?p=239

http://ghtt.hitwh.edu.cn/thread-1946615-1-1.html

http://www.chaochaoblog.com/archives/1116

http://apt-blog.net/802-1x_support_macos_freebsd

posted on 2013-03-16 00:58  iNVAiN  阅读(15297)  评论(2编辑  收藏  举报