易實現(xiàn)的ISP負(fù)載平衡設(shè)置
很多朋友都會發(fā)現(xiàn),我們的一些列關(guān)于負(fù)載平衡的文章都是比較專業(yè)的。一般不學(xué)習(xí)技術(shù)的人感覺都用不上負(fù)載平衡這個技術(shù)。但是,最簡單的,我們在家里面可以對我們的寬帶網(wǎng)絡(luò)進(jìn)行負(fù)載平衡設(shè)置。這也是最容易理解和調(diào)控的一種負(fù)載平衡技術(shù)實現(xiàn)。那么現(xiàn)在我們就為大家演示一下如何進(jìn)行ISP負(fù)載平衡的設(shè)置。
將兩個ISP綁定,并做負(fù)載平衡,可以實現(xiàn)帶寬加倍。 也就是說,假如我們有兩條ADSL包月線路,可以使帶寬變?yōu)?M!
做這個工作,涉及到兩個工作
1、流量分割
首先是如何保證:回應(yīng)來自某一個ISP的數(shù)據(jù)包時,仍然使用相同的ISP。 讓我們先定義一些符號。
令第一塊網(wǎng)卡的名字叫 $IF1,而第二塊網(wǎng)卡叫做 $IF2 。
然后設(shè)置 $IF1 的IP地址為 $IP1,$IF2 的IP地址為 $IP2。
并且,令I(lǐng)SP1 的網(wǎng)關(guān)地址為 $P1,ISP2 的網(wǎng)關(guān)地址為 $P2。
最后,令$P1的網(wǎng)絡(luò)地址為 $P1_NET ,令$P2的網(wǎng)絡(luò)地址為 $P2_NET。
額外創(chuàng)建兩個路由表, T1 和 T2。 加入到 /etc/iproute2/rt_tables 中。
然后如下設(shè)置兩個路由表中的路由:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
沒什么大不了的,不過是建立了通向該網(wǎng)關(guān)的一條路由,并使之成為默認(rèn)網(wǎng)關(guān),分別負(fù)責(zé)一個單獨的上行流,并且為這兩個ISP都作這樣的配置。
要指出的是,那條網(wǎng)絡(luò)路由是必要條件,因為它能夠讓我們找到那個子網(wǎng)內(nèi)的主機,也包括上述那臺網(wǎng)關(guān)。
下一步,我們設(shè)置“main"路由表。把包通過網(wǎng)卡直接路由到與網(wǎng)卡相連的局域網(wǎng)上不失為一個好辦法。要注意“src" 參數(shù),他們能夠保證選擇正確的出口IP地址。
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
然后,設(shè)置你的缺省路由:
ip route add default via $P1
接著,設(shè)置路由規(guī)則。這實際上在選擇用什么路由表進(jìn)行路由。你需要確認(rèn)當(dāng)你從一個給定接口路由出數(shù)據(jù)包時,是否已經(jīng)有了相應(yīng)的源地址:你需要保證的就是如果你已經(jīng)有了相應(yīng)的源地址,就應(yīng)該把數(shù)據(jù)包從相應(yīng)的網(wǎng)卡路由出去:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
以上命令保證了所有的回應(yīng)數(shù)據(jù)都會從他們來的那塊網(wǎng)卡原路返回。 現(xiàn)在,完成了非常基本的配置。這將對于所有運行在路由器上所有的進(jìn)程起作用,實現(xiàn)IP偽裝以后,對本地局域網(wǎng)也將起作用。如果不進(jìn)行偽裝,那么你要么擁有兩個ISP的地址空間,要么你想對兩個ISP中的一個進(jìn)行偽裝。無論哪種情況,你都要添加規(guī)則,基于發(fā)包的主機在局域網(wǎng)內(nèi)的IP地址,選擇從哪個ISP路由出去。
2、負(fù)載平衡
第二個問題是如何對于通過兩個ISP流出的數(shù)據(jù)進(jìn)行負(fù)載平衡。
如果你已經(jīng)成功地實現(xiàn)了流量分割,這件事并不難。
與選擇兩個ISP中的一個作為缺省路由不同,這次是設(shè)置缺省路由為多路路由。
在缺省內(nèi)核中,這會均衡兩個ISP的路由。
象下面這樣做(基于前面的流量分割實驗):
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
這樣就可以均衡兩個ISP的路由。通過調(diào)整“weight"參數(shù)我們可以指定其中一個ISP的優(yōu)先權(quán)高于另一個。
應(yīng)該指出,由于均衡是基于路由進(jìn)行的,而路由是經(jīng)過緩沖的,所以這樣的均衡并不是100%精確。也就是說,對于一個經(jīng)常訪問的站點,總是會使用同一個ISP。