前言
學校一年前開通了校園網,然鵝信號未覆蓋我們住的公寓,又多忍受了一年的小破寬帶(10M帶寬,100塊300個小時)
上個星期,架設了一年的校園網終於通了,然后我們發現——校園網69元一個月,一個用戶只能同時登陸兩個終端,帶寬是無線4M,有線20M(套餐不同帶寬不同)。
好的,我不生氣。
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(自己設置了其他密碼就用你設置的那個)
4、查看系統信息,記錄一下內核版本(本人路由器使用系統是潘多拉,一個基於openwrt的發行版)
5、自行設置路由器,保證在非校園網環境下可以正常使用(隨便在哪拽根能上網的網線,插路由器上設置一下看看有沒有wifi能不能上網)。
確認可用之后我們就可以關閉控制台了
認證工具
要背刺校園網,我們首先需要一款認證工具,本校使用的是銳捷認證(802.1X),在github上可以找到兩款替代工具,一個是mentohust,還有一個是minieap
從軟件工程角度來說,兩款工具比較起來明顯是minieap設計更加優雅
然而,我懶
所以本文中使用mentohust認證,對minieap感興趣的同學可以自行學習使用
本節后面的內容需要一定linux基礎,如果你實在不會搞,百度mentohust說不定能找到別人編好的二進制文件,注意他們的系統內核版本和你的是否一致(未知來源的二進制文件可能有安全風險,請謹慎使用)
發現有的openwrt版本控制台自帶mentohust軟件,這樣的用戶可以跳過本節甚至本教程(想要多撥的童鞋不要使用控制台配置mentohust,參照后面的方法遠程連接后配置。只想單賬號使用的話可以嘗試使用控制台配置,不好使再參考本教程)
我們可以從github上獲得mentohust源碼。
https://github.com/hyrathb/mentohust
需要注意的是,我們上文給出的mentohust是
獲得源碼以后,我們需要將其編譯為二進制文件,放到路由器上。
過程大體如下:
1、在本地搭建交叉編譯環境
2、根據你實際的系統內核,編譯mentohust,得到二進制文件(這里附上一個mentohust交叉編譯教程,請根據實際情況參考使用)。
3、使用scp工具(windows下可以用winscp)將二進制文件上傳到路由器的/bin/文件夾下(或其他文件夾)
4、運行二進制文件,此處先不必做配置,僅查看程序能否運行,然后關閉程序,進行路由器相關配置
編譯成功后交叉編譯環境不要刪除,后面可能還需要用到
設置網卡
(此處系統版本不同可能有較大差異,如果看不懂,可自行上網尋找配置方法)
銳捷認證使用DHCP,需要設置網卡(入戶線接哪個網口就設置哪個)
打開192.168.1.1,找到接口選項(這個地方不同系統版本界面可能不同),選擇你要使用的網卡,點“修改”
找到協議選項,選擇DHCP,確認保存
銳捷認證
網卡設置完成后,接下來就可以設置mentohust客戶端了
隨意使用一個ssh工具(沒有的話就下個putty,體積小、不用配置),連接ip:192.168.1.1,port:23(不確定是不是所有發行版都是23端口……不是的話就自己查怎么連吧)
用戶名密碼為192.168.1.1里使用的用戶名密碼(不同發行版登錄信息不同,登陸后和我截圖不一樣是正常的)
登陸之后,命令行輸入mentohust -h獲取幫助
按照幫助填寫你自己的信息,不同學校需要的參數不同。大多選項有默認值,請按照實際情況修改(可參考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函數:
查看其實現:
可以發現,這里進程鎖的原理是:
在程序運行時,生成一個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控制台,找到“負載均衡”,查看是否所有你使用了的網卡均為綠色(下面的圖是盜的,它使用了兩個網卡)
6、下載一些東西,讓網絡運行一段時間,並有一定的流量產生
7、打開控制台的“接口”頁面,看使用的接口流量是否相近,如果相近則表示成功(盜的圖)
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文件中間的延時時間可以按實際情況更改,但不建議不加延時。
注意不要使用重復網卡!!!