無線路由器上安裝OpenWRT,在需要標准802.1x認證的網絡中無線上網


學校一直用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM