專利名稱::一種多wan口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,具體與Iinux網(wǎng)絡(luò)協(xié)議棧、Netfilter/Iptables的編譯安裝與修改、策略路由和高級(jí)路由的使用有關(guān)。
背景技術(shù):
:在現(xiàn)有技術(shù)中,有很多WAN口設(shè)備,把原本“一對(duì)多”的WAN接入方式變成“多對(duì)多”的方式,滿足了用戶更多帶寬等需求。多WAN口設(shè)備主要用于增加帶寬、線路備份等方面。允許用戶以更經(jīng)濟(jì)的成本成倍增加帶寬。而當(dāng)前很多WAN口設(shè)備不具備按比例進(jìn)行自動(dòng)負(fù)載均衡的功能,正常情況下只使用一個(gè)WAN口進(jìn)行數(shù)據(jù)傳輸,其他WAN口單純作為備用。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,實(shí)現(xiàn)基于LINUX系統(tǒng)的多WAN口設(shè)備按比例進(jìn)行負(fù)載均衡的功能。為達(dá)到發(fā)明目的,本發(fā)明采用如下技術(shù)方案一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,首先,為每個(gè)WAN口創(chuàng)建路由表;然后,在路由查找之前將數(shù)據(jù)包送到連接跟蹤標(biāo)記模塊,得到該數(shù)據(jù)包的MARK值,并賦值給數(shù)據(jù)包的mark字段;之后,在路由查找模塊中,根據(jù)mark字段,使用不同的路由表為數(shù)據(jù)包進(jìn)行路由判斷;最后,根據(jù)上一步驟的路由判斷,處理數(shù)據(jù)包,轉(zhuǎn)發(fā)或本地接收等。進(jìn)一步地,連接跟蹤標(biāo)記模塊按如下步驟完成工作步驟A,判斷數(shù)據(jù)包所屬的連接是否已經(jīng)被標(biāo)記,如果被標(biāo)記,則取出該標(biāo)記值,賦給數(shù)據(jù)包的mark字段;否則,轉(zhuǎn)入步驟B;步驟B,進(jìn)入到該步驟的數(shù)據(jù)包按如下方式被標(biāo)記假設(shè)有η個(gè)WAN口,負(fù)載比例為NIΝ2…Νη,則每連續(xù)Ν1+Ν2+…+Nn個(gè)數(shù)據(jù)包中,其中NI個(gè)數(shù)據(jù)包被標(biāo)記為Ml,Ν2個(gè)數(shù)據(jù)包被標(biāo)記為M2,…,Nn個(gè)數(shù)據(jù)包被標(biāo)記為Mn(注NI,Ν2,…,Νη,Μ1,M2,...,Mn均為自然數(shù));步驟C,將數(shù)據(jù)包的標(biāo)記值保存到連接跟蹤表中。進(jìn)一步地,路由查找的時(shí)候,根據(jù)數(shù)據(jù)包中標(biāo)記值(即mark字段),使用不同的路由表進(jìn)行路由判斷,從而將數(shù)據(jù)包導(dǎo)向不同的WAN口。采用上述技術(shù)方案,本發(fā)明能夠?qū)崿F(xiàn)基于LINUX系統(tǒng)的多WAN口設(shè)備按比例進(jìn)行負(fù)載均衡的功能。此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中圖I為本發(fā)明方法的流程框圖。具體實(shí)施例方式為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖I所示的本發(fā)明的實(shí)施方式,Netfilter/Iptables是LINUX2.4.x/2.6.x內(nèi)核集成的IP信息包過濾系統(tǒng),分為Netfilter與Iptables兩部分。其中Netfilter是LINUX內(nèi)核IP協(xié)議棧中的一系列函數(shù)調(diào)用入口,設(shè)置在報(bào)文處理的路徑上,它會(huì)在路由查找之前執(zhí)行處理過程。LINUX網(wǎng)絡(luò)協(xié)議棧是一個(gè)層次架構(gòu)的軟件架構(gòu),層與層之間通過預(yù)定的接口傳遞報(bào)文,網(wǎng)絡(luò)報(bào)文中包含了協(xié)議各層使用到的各種信息,在LINUX的2.4與2.6版本中采用結(jié)構(gòu)sk_buff來存儲(chǔ)報(bào)文數(shù)據(jù)。在該結(jié)構(gòu)里有一個(gè)變量mark。該變量不是包本身的一部分,而是包在穿越系統(tǒng)過程中由內(nèi)核分配的與包相關(guān)聯(lián)的一個(gè)字段。該字段只能在本地的mangle表里使用,可以與本地的高級(jí)路由功能聯(lián)用,以使不同的包應(yīng)用不同的策略。連接跟蹤即跟蹤并記錄連接狀態(tài),Linux為每一個(gè)經(jīng)過網(wǎng)絡(luò)協(xié)議棧的數(shù)據(jù)包,生成一個(gè)新的連接記錄項(xiàng),此后所有屬于該連接的數(shù)據(jù)包都被唯一地分配給這個(gè)連接,并標(biāo)識(shí)連接狀態(tài)。連接跟蹤是防火墻模塊的狀態(tài)檢測的基礎(chǔ),同時(shí)也是地址轉(zhuǎn)換中實(shí)現(xiàn)SNAT與DNAT的前提。C0NNMARK是netfilter/iptables中的一個(gè)特性,實(shí)現(xiàn)了往連接跟蹤記錄上打標(biāo)記的方法(即sk_buff中的mark字段)。從2.2版本開始,Linux加入了高級(jí)路由機(jī)制,基于該機(jī)制Linux系統(tǒng)可以有多達(dá)256個(gè)路由表,且每個(gè)路由表都各自獨(dú)立。同時(shí)Linux內(nèi)包含一個(gè)路由策略數(shù)據(jù)庫,我們可以在該庫里添加一些路由規(guī)則來確定“哪類數(shù)據(jù)包”應(yīng)該“根據(jù)哪個(gè)路由表”來傳輸。在此,我們可以使用數(shù)據(jù)包中的mark字段作為匹配條件。下面一個(gè)雙WAN口的實(shí)施實(shí)例,其按21分配負(fù)載(1)使用ip工具為兩個(gè)wan口建立各自的獨(dú)立路由表,編號(hào)分別為150與151;(2)修改iptables中的MARK模塊,到達(dá)該模塊處理的數(shù)據(jù)包,第一個(gè)標(biāo)記為150,第二個(gè)標(biāo)記為150,第三個(gè)標(biāo)記為151,第四個(gè)150,第五個(gè)標(biāo)記為150,第六個(gè)標(biāo)記為151,如此循環(huán);(3)應(yīng)用如下兩條策略路由,標(biāo)記(MARK值)為150的連接使用路由表150,標(biāo)記為151的使用路由表151ipruleaddfwmark150table150ipruleaddfwmark151table151;(4)按如下添加數(shù)據(jù)包處理規(guī)則,第一條規(guī)則從連接跟蹤記錄表中取出當(dāng)前數(shù)據(jù)包所屬連接的MARK值,并記錄在該數(shù)據(jù)包中;第二條規(guī)則則判斷當(dāng)前數(shù)據(jù)包所處的連接是否已打上標(biāo)記,是則將數(shù)據(jù)包直接放回協(xié)議棧,否則繼續(xù)執(zhí)行第三條規(guī)則;第三條規(guī)則將數(shù)據(jù)包放入步驟(I)所述的MARK模塊,對(duì)數(shù)據(jù)包進(jìn)行循環(huán)標(biāo)記;第四條規(guī)則用于保存該數(shù)據(jù)包所處連接記錄信息,包括MARK值iptables_tmangle-APREROUTING-jCONNMARK-restore-markiptables_tmangle-APREROUTING_mmark!—mark0-jRETURNiptables_tmangle-APREROUTING-jMARK—set-mark150iptables_tmangle-APREROUTING-jCONNMARK—save-mark。本發(fā)明能夠?qū)崿F(xiàn)基于LINUX系統(tǒng)的多WAN口設(shè)備按比例進(jìn)行負(fù)載均衡的功能。上述說明示出并描述了本發(fā)明的優(yōu)選實(shí)施例,如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí)進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。權(quán)利要求1.一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,其特征在于首先,為每個(gè)WAN口創(chuàng)建路由表;然后,在路由查找之前將數(shù)據(jù)包送到連接跟蹤標(biāo)記模塊,得到該數(shù)據(jù)包的MARK值,并賦值給數(shù)據(jù)包的mark字段;之后,在路由查找模塊中,根據(jù)mark字段,使用不同的路由表為數(shù)據(jù)包進(jìn)行路由判斷;最后,根據(jù)上一步驟的路由判斷,處理數(shù)據(jù)包,轉(zhuǎn)發(fā)或本地接收。2.如權(quán)利要求I所述的一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,其特征在于連接跟蹤標(biāo)記模塊按如下步驟完成工作步驟A,判斷數(shù)據(jù)包所屬的連接是否已經(jīng)被標(biāo)記,如果被標(biāo)記,則取出該標(biāo)記值,賦給數(shù)據(jù)包的mark字段;否則,轉(zhuǎn)入步驟B;步驟B,進(jìn)入到該步驟的數(shù)據(jù)包按如下方式被標(biāo)記假設(shè)有η個(gè)WAN口,負(fù)載比例為NIΝ2…Νη,則每連續(xù)Ν1+Ν2+…+Nn個(gè)數(shù)據(jù)包中,其中NI個(gè)數(shù)據(jù)包被標(biāo)記為Ml,Ν2個(gè)數(shù)據(jù)包被標(biāo)記為M2,…,Nn個(gè)數(shù)據(jù)包被標(biāo)記為Mn,其中,NI,Ν2,…,Nn,Ml,M2,…,Mn均為自然數(shù);步驟C,將數(shù)據(jù)包的標(biāo)記值保存到連接跟蹤表中。3.如權(quán)利要求I所述的一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,其特征在于路由查找的時(shí)候,根據(jù)數(shù)據(jù)包中標(biāo)記值,即mark字段,使用不同的路由表進(jìn)行路由判斷,從而將數(shù)據(jù)包導(dǎo)向不同的WAN口。全文摘要一種多WAN口設(shè)備負(fù)載均衡的實(shí)現(xiàn)方法,首先,為每個(gè)WAN口創(chuàng)建路由表;然后,在路由查找之前將數(shù)據(jù)包送到連接跟蹤標(biāo)記模塊,得到該數(shù)據(jù)包的MARK值,并賦值給數(shù)據(jù)包的mark字段;之后,在路由查找模塊中,根據(jù)mark字段,使用不同的路由表為數(shù)據(jù)包進(jìn)行路由判斷;最后,根據(jù)上一步驟的路由判斷,處理數(shù)據(jù)包,轉(zhuǎn)發(fā)或本地接收等;本發(fā)明能夠?qū)崿F(xiàn)基于LINUX系統(tǒng)的多WAN口設(shè)備按比例進(jìn)行負(fù)載均衡的功能。文檔編號(hào)H04L12/757GK102882802SQ20121040632公開日2013年1月16日申請(qǐng)日期2012年10月23日優(yōu)先權(quán)日2012年10月23日發(fā)明者許財(cái)義申請(qǐng)人:廈門四信通信科技有限公司