查看單個文章
舊 2004-07-07, 08:02 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 多重上連ISP的路由設定

作者latinum 作者:白金 網名:platinum(chinaunix)



如果你有兩個ISP,那麼,通過下面的方法,可以將兩個ISP綁定,並做負載均衡,可以實現帶寬加倍。
也就是說,假如我們有兩條ADSL包月線路,可以使帶寬變為1M!
做這個工作,涉及到兩個工作
1、流量分割
首先是如何保證:回應來自某一個ISP的資料包時,仍然使用相同的ISP。 讓我們先定義一些符號。


令第一塊網路卡(上圖的if1)的名字叫 $IF1,而第二塊網路卡叫做 $IF2 。


然後設定 $IF1 的IP位址為 $IP1,$IF2 的IP位址為 $IP2。


並且,令ISP1 的網關位址為 $P1,ISP2 的網關位址為 $P2。


最後,令$P1的網路位址為 $P1_NET ,令$P2的網路位址為 $P2_NET。
額外新增兩個路由表, T1 和 T2。 加入到 /etc/iproute2/rt_tables 中。
然後如下設定兩個路由表中的路由:


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

沒什麼大不了的,不過是建立了通向該網關的一條路由,並使之成為預設網關,分別負責一個單獨的上行流,並且為這兩個ISP都作這樣的配置。

要指出的是,那條網路路由是必要條件,因為它能夠讓我們找到那個子網內的主機,也包括上述那台網關。


下一步,我們設定「main」路由表。把包通過網路卡直接路由到與網路卡相連的區域網路上不失為一個好辦法。要注意「src」 參數,他們能夠保證選項正確的出口IP位址。



ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
然後,設定你的預設路由:
ip route add default via $P1
接著,設定路由規則。這實際上在選項用什麼路由表進行路由。你需要驗證當你從一個給定接頭路由出資料包時,是否已經有了相應的源位址:你需要保證的就是如果你已經有了相應的源位址,就應該把資料包從相應的網路卡路由出去:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

以上指令保證了所有的回應資料都會從他們來的那塊網路卡原路返回。

現在,完成了非常基本的配置。這將對於所有執行在路由器上所有的行程起作用,實現IP偽裝以後,對本機區域網路也將起作用。


如果不進行偽裝,那麼你要麼擁有兩個ISP的位址空間,要麼你想對兩個ISP中的一個進行偽裝。無論哪種情況,你都要增加規則,關於發包的主機在區域網路內的IP位址,選項從哪個ISP路由出去。

2、負載均衡

第二個問題是如何對於通過兩個ISP流出的資料進行負載均衡。

如果你已經成功地實現了流量分割,這件事並不難。

與選項兩個ISP中的一個作為預設路由不同,這次是設定預設路由為多路路由。
在預設內核中,這會均衡兩個ISP的路由。

象下面這樣做(關於前面的流量分割實驗):

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
這樣就可以均衡兩個ISP的路由。


通過調整「weight」參數我們可以指定其中一個ISP的優先權高於另一個。



應該指出,由於均衡是關於路由進行的,而路由是經過緩衝的,所以這樣的均衡並不是100%精確。也就是說,對於一個經常訪問的站點,總是會使用同一個ISP。
進而,如果你對此不滿意,你可能需要參考以下Julian Anastasov的內核修正檔:
http://www.ssi.bg/~ja/
Julian的路由修正檔會彌補上述缺陷。(好像要重新編譯內核,我沒敢PATCH)

上圖是很一般的配置,同一個區域網路(甚至是同一台電腦)通過兩個ISP連線到網際網路上
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次