小記——GTMD校園網


前言

學校一年前開通了校園網,然鵝信號未覆蓋我們住的公寓,又多忍受了一年的小破寬帶(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是hyrathb 修改后的版本(添加了新版銳捷v4支持),想要閱讀源碼了解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文件中間的延時時間可以按實際情況更改,但不建議不加延時。

注意不要使用重復網卡!!!


免責聲明!

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



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