Linux下網通、電信、教育多出口策略路由配置詳解一、處理流量分割的問題;二、解決雙線負載均衡的問題。原文如下:
1、流量分割
首先是如何保證:迴應來自某一個ISP的數據包時,仍然使用相同的ISP。
讓我們先定義一些符號。令第一塊網卡的名字叫eth1,而第二塊網卡叫做eth2;然後設置網卡1的IP地址為221.200.0.2(CNC分配網址),網卡2 的IP地址為58.56.0.2(CTC分配網址);ISP1(聯通)網關地址為221.200.0.1,ISP2(電信)網關地址為58.56.0.1;最後,ISP1(聯通)的網絡地址為211.200.0.0/30,ISP2(電信)的網絡地址為58.56.0.0/30。
額外創建兩個路由表,T1 和T2 ,加入到/etc//iproute2/rt_tables中。然後如下設置兩個路由表中的路由:
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table T1
ip route add default via 221.200.0.1 table T1
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table T2
ip route add default via 58.56.0.1 table T2
沒什麼大不了的,不過是建立了通向該網關的一台路由,並使之成為默認網關,分別負責一個單獨的上行流,並且為這兩個ISP都作這樣的配置。要指出的是,那條網絡路由是必要條件,因為它能讓我們找到那個子網內的主機,也包括上述的那台網關。
下一步,我們設置“main”路由表,把包通過網卡直接路由到與網卡相連的局域網上不失為一個好辦法。要注意“src”參數,他們能夠保證選擇正確的出口IP地址。
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table main
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table main
然後,設置你的缺省路由:
ip route add default via 221.200.0.1
接着,設置路由規則。這實際上在選擇用什麼路由表進行路由。你需要確認當你從一個給定接口路由出數據包時,是否已經有了相應的源地址:你需要保證的就是如果你已經有了相應的源地址,就應該把數據包從相應的網卡路由出去:
ip rule add from 221.200.0.2 table T1
ip rule add from 58.56.0.2 table T2
以上命令保證了所有的迴應數據都會從他們來的那塊網卡原路返回。
現在,完成了非常基本的配置。這將對於所有運行在路由器上的所有進程起作用,實現IP偽裝後,對本地局域網也將起作用。如果不進行偽裝,那麼你要麼擁有兩個ISP的地址空間,要麼你想對兩個ISP中的一個進行偽裝。無論哪種情況,你都要添加規則,基於發包的主機在局域網內的IP地址,選擇從哪個ISP路由出去。
2、負載均衡
第二個問題就是如何對通過兩個ISP流出的數據進行負責均衡。如果你已經成功地實現了流量分割。這件事不難。
與選擇兩個ISP中的一個作為缺省路由不同,這次是設置缺省路由為多線路路由。在缺省內核中,這會均衡兩個ISP的路由。像下面這樣做(基於前面的流量分割實驗):
ip route add default scope global nexthop via 221.200.0.1 dev eth1 weight 30 \
nexthop via 58.56.0.1 dev eth2 weight 70
(注意:與上面為同一行命令)
這樣可以均衡兩個ISP的路由。通過調整“weight”參數我們可以指定其中的一個ISP的優先權高於另一個。(具體:線路1的流量約佔30%,線路1佔70%)
應該指出,由於均衡是基於路由進行的,而路由是經過緩衝的,所以這樣的均衡並不是100%精確。也就是説,對於一個經常訪問的站點,總是會使用同一個ISP。
中國的現狀這樣設置是有缺陷的:因為網通和電信等的線路在溝通上存在問題,就是説從網通線路訪問電信的網址不如直接從電信訪問快,從電信訪問網通也是如此。因此對於擁有不同種線路的路由器我們需要做基於目標地址的策略路由,同種線路的可以做上面的策略路由。如果你擁有多個ISP且某個ISP有多條線路,則可以把負載均衡與基於目標的策略路由結合起來。
做這樣的策略路由來自於《QEL4.1 網吧版》,其相關説明部分如下:
從QEL4.1 版本開始,我們增加了多線路策略路由的功能。用户只需要簡單地填寫幾個配置文件即可完成。
策略路由功能由qlcm 程序實現。這個程序在QEL4.0 上為1.0,包含了內核智能優化、抗DDOS、SYN 洪水***等功能。在4.1 版上,qlcm 版本為2.0,增加了arp 綁定,多線路策略路由功能。
qlcm 服務是QEL 服務器的核心服務,您可以restart qlcm 服務,但在任何情況下您都不應該停止它。關閉它會造成無法預料的後果,比如出現大量丟包,某些服務停止等。這樣的故障不在我們技術支持的範圍內。
qlcm 2.0 支持最大8 路外網線路,根據用户定義的配置文件自動判斷工 作模式,可以為每個外網出口單獨定義路由表,也可以實現實現多條線路的負載均衡(即多鏈路帶寬捆綁)。一般的硬件路由器只能支持23路外網線路,而且價格 不菲。硬件路由器使用嵌入式CPU 和少量內存,處理性能有限,在處理過多路由時會超出處理能力。而使用PC 做路由則不受此限制。
QEL4.1 內核最大可以支持到255 路外線,我們隨時可以修改qlcm,支持32 路或者更多的外線。
我們再來看一個具體例子的實現:
3.我們有三條固定IP 線路,一條是eth0(電信),網關為202.102.14.1,一條eth1(網通),網關為60.12.5.1,一條是教育網線路,網關為 125.216.44.1,將etho(電信線路)作為默認網關,訪問網通的數據走eth1,訪問教育網的走eth2,
配置如下:
wan1.conf:
interface=eth0
gateway=202.102.14.1
defaultgw=yes
wan2.conf:
interface=eth1
gateway= 60.12.5.1
routefile=/etc/quick/IP_CNC.list
wan3.conf:
interface=eth2
gateway=125.216.44.1
routefile=/etc/quick/IP_EDU.list
這樣就OK 了。新建一個IP_EDU.list 文本文件,其中定義了教育網的IP 段。
在這樣的環境下,defaultgw=yes 只設定在某個網卡接口上。當訪問已定義的路由時,走指定的網卡出去,否則走默認網關。
routefile= 後面填該線路對應的路由表文件。在安裝時我們已經為您默認安裝了兩個文件:IP_CNC.list 和IP_CTC.list,這兩個文件都在/etc/quick 目錄下,其中IP_CNC.list 文件是網通路由表文件,IP_CTC.list 為電信路由表文件。
這兩個文件的格式也很簡單,每行一個IP 段,示例如下:
58.16.0.0/16
58.17.0.0/17
58.17.128.0/17
qlcm只能運行在《QEL4.1 網吧版》上,如果移植到其它Linux下會因為版本的不同而造成系統的崩潰。在不想更換系統的前提下,我們可以自己用IP命令來實現qlcm的功能模擬。
我們仍然以文章開始的實例來進行説明基於目的的策略路由設置。
1、首先建立通向不同ISP的路由表
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table 50
ip route add default via 221.200.0.1 table 50
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table 51
ip route add default via 58.56.0.1 table 51
沒什麼可説的,與前面相同,只是僅用數字表示路由表。
2、針對我們要訪問的目標地址,選擇不同的路由表,進行路由
因為有大量的網絡地址需要設置不同的規則,採用命令模式不便於修改,所以做了一個簡單的腳本文件,配置文件與qlcm採用相同的結構。
由於電信和網通之間互聯互通的問題,很多人選擇雙線路機房,所謂雙線路機房就是擁有兩條出口,一條電信一條網通。最近在一個雙線路機房測試一台服務器,打 算作為論壇的數據庫服務器使用,服務器操作系統為Linux。計劃配置為雙IP,雙域名,使得瀏覽者通過電信和網通兩條線路都能正常訪問服務器,而且各走 各的,互不影響。在配置網絡的時候遇到了問題,由於Linux默認只有一個網關,在網絡上查詢了很久,找到一個解決方案,因此整理了一下。感謝原文作者 jac003ke。
1. vi /etc/iproute2/rt_tables,增加網通和電信兩個路由表
251 tel 電信路由表
252 cnc 網通路由表
2. 給網卡綁定兩個地址用於電信和網通兩個線路
ip addr add 117.22.255.30/29 dev eth0
ip addr add 210.74.133.77/29 dev eth1
3、分別設置電信和網通的路由表
電信路由表:
#確保找到本地子網
ip route add 117.22.255.24/29 via 117.22.255.30 dev eth0 table tel
#內部迴環網絡
ip route add 127.0.0.0/8 dev lo table tel
#117.22.255.73為電信網絡默認網關地址
ip route add default via 117.22.255.73 dev eth0 table tel
網通線路路由表:
#確保找到本地子網
ip route add 210.74.133.72/29 via 210.74.133.77 dev eth1 table cnc
#內部迴環網絡
ip route add 127.0.0.0/8 dev lo table cnc
#210.74.133.73是網通的默認網關
ip route add default via 210.74.133.73 dev eth1 table cnc
4、電信和網通各有自己的路由表,制定策略,讓117.22.255.30的迴應數據包走電信的路由表路由,210.74.133.77的迴應數據包走網通的路由表路由
ip rule add from 117.22.255.25table tel
ip rule add from 210.74.133.73 table cnc
假設有兩個網卡,eth0 eth1,分別用兩個ISP的地址IPA,IPB,分別有自己的網關GWA,GWB。
現在,加上了靜態路由,那麼該主機訪問外網的時候,就會按照設定的路由,分別走不同的網絡接口,同時也會分別使用各自網絡接口的IP地址作為源IP。
而現在當有外網訪問該主機的時候,比如是從教育網來的主機,訪問電信的IP,那麼按照路由表,迴應的數據包就會從教育網的接口出去,但是其源IP為電信的 IP,如果這一路上沒有地址轉換,沒有路由限制(即所經過的路由器只是負責按照指定的目的IP轉發數據包,不做任何訪問控制),那麼訪迴應的數據包仍然是 可以正常到達對方的主機的。但是現在的網絡環境太複雜了,一個數據包能夠不經過任何干擾就到達對方的主機幾乎是不可能的。
因此就需要做一些策略路由,使得訪問哪個接口的時候,迴應的數據包仍然從這個接口出去。
ip route add default via GWA dev eth0 src IPA table 100
ip route add default via GWB dev eth1 src IPB table 200
ip rule add from IPA table 100
ip rule add from IPB table 200