隨著ISP開始向用戶提供高速的Internet連接,普通小型企業及計算機用戶要建立自己的Web服務器、FTP服務器或者Mail服務器,就變得非常的容易。但是,如果ISP出現錯誤的話,我們將怎麼辦呢?一個最常用的解決方法就是進行另外一個ISP的冗余連接。本文將介紹使用一個Linux主機來完成Internet冗余連接,主要有以下內容: 1.配置主機,使其可以處理多個ISP的流入信息。 2.網絡流出連接的負載平衡。 3.配置各種服務以實現冗余。 4.使用ipchains或者iptables配置防火牆。 圖1描述了小型企業或家庭計算機網絡的結構。在圖中,Linux是作為Internet和內部局域網兩個部分之間的防火牆。在本例中,網卡eth1使用的DSL,網卡eht2使用的是線纜modem。Linux主機通過和兩個ISP的連接實現負載平衡,這種方法不僅僅適用於高速網絡連接。同樣的技術也可以用於在兩個撥號連接間實現負載平衡。 圖1 實現Internet冗余連接的Linux主機 在圖1中測試用的主機使用的是CPU為Intel Celeron 533MHz的計算機,操作系統使用的是Red Hat 6.2,內核為2.2.18。本文所述方法在內核為 2.4.13的Red Hat 7.2中也測試通過。不過,讀者在實際應用中,不一定非得使用533MHz的CPU,事實上,在本例中,用一台老的配置有32M內存的Pentium 100機器作為防火牆也完全可以。此外,本文中一些例子雖然是針對Red Hat的,不過,只需稍加修改,就可用於其它Linux發行版。 在本文中,我沒有提供網卡配置、Linux內核編譯以及DNS配置等內容。因為這方面的信息在網上或者書店裡都有大量的資料。此外,讀者也可以到http://www.linuxdoc.org去查找一些相關的資料。
1. 配置內核 Linux內核2.2以及更高版本支持高級路由技術,它可以在一個Linux主機中實現負載平衡和多個缺省的路由。為了支持多個Internet連接,在編譯時必需加入下面幾個內核網絡選項: CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_MULTIPATH=y 如果要想使用新內核中的高級路由功能,那麼就必需要安裝ip路由工具包(在Red Hat 7.1以上版本中均帶有該工具包),如果沒有該工具包,可以從以下地址下載: ftp://ftp.inr.ac.ru/ip-routing/ ip路由工具包提供了兩個專門的命令:ip和tc用於實現高級的路由功能,有關ip命令的文文件可查看以下地址:http://snafu.freedom.org/linux2.2/docs/ip-cref/ip-cref.Html。
2. 源IP路由 缺省情況下,TCP/IP數據包是通過檢測目的IP地址,然後在路由表中查找一個到達目的地的路徑。路由表可以通過netstat -r command命令來查看。如果發現了一個路徑,數據包就會被送到網卡,否則,數據包就會被送到缺省的網關。對於大多數直接連入Internet的主機來說,缺省網關一般是某一個ISP。在本例中,這就意味著所有向外的Internet連接都通過DSL接口。這不是一個冗余Internet連接所希望發生的。很顯然,當你在系統中加入一個線纜Modem後,你並不希望由DSL連接來響應你的線纜Modem連接。 要解決這個問題,我們使用ip命令建立一個多路由表。而路由表的選擇是基於流出數據包的IP地址的。這可以通過以下的命令來實現: # Setup source IP routing rules for DSL ip rule add from 63.89.102.157 lookup 1 ip route add 10.0.0.0/24 via 10.0.0.1 table 1 ip route add 0/0 via 63.89.102.1 table 1 # Setup source IP routing rules for cable modem ip rule add from 65.3.17.133 lookup 2 ip route add 10.0.0.0/24 via 10.0.0.1 table 2 ip route add 0/0 via 65.3.17.1 table 2 如果一個流出的數據包的源IP地址為63.89.102.157 (DSL),那麼就在路由表1中選擇,它有兩條路徑: > ip route list table 1 10.0.0.0/24 via 10.0.0.1 dev eth0 default via 63.89.102.1 dev eth1 第一行把本地數據流路由到內部網,第二行則捕獲所有剩下的數據包並通過DSL接口將其送到ISP。線纜Modem的路由表2使用的也是同樣的方法。
3. 負載平衡 在內部網中實現流出負載平衡,使用的是CONFIG_IP_ROUTE_MULTIPATH內核選項,它可以讓系統有多個默認的網關。可以使用以下命令從/etc/sysconfig/network文件中刪除默認網關,然後再使用高級路由功能設置缺省網關: # ip route add default equalize nexthop via 63.89.102.1 dev eth1 nexthop via 65.3.17.1 dev eth2 要查看高級路由表,使用以下命令: > ip route list 255.255.255.255 dev eth0 scope link 255.255.255.255 dev eth2 scope link 255.255.255.255 dev eth1 scope link 10.0.0.1 dev eth0 scope link 63.89.102.157 dev eth1 scope link 65.3.17.133 dev eth2 scope link 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 63.89.102.0/24 dev eth1 proto kernel scope link src 63.89.102.157 65.3.17.0/24 dev eth2 proto kernel scope link src 65.3.17.133 127.0.0.0/8 dev lo scope link default equalize nexthop via 63.89.102.1 dev eth1 weight 1 nexthop via 65.3.17.1 dev eth2 weight 1 CONFIG_IP_ROUTE_MULTIPATH內核選項將把所有這些路徑(缺省路由)等同看待,然後再根據/usr/src/linux/Documentation/Configure.help來選擇其特定的方式。Ip route命令的equalize選項,會讓Linux內核基於IP地址平衡外部連接。對於一個特定的IP地址,內核會選擇一個接口用於傳輸流出的數據包,然後內核會為該IP地址在路由緩沖中建一個記錄。這樣,其它到達的有相同IP地址的數據包就會使用同一個接口,直到該記錄從路由緩沖中刪除。我們可以使用ip route list cache命令來查看路由緩沖。
4. 配置服務 各種不同的服務(DNS、SMTP、HTTP、LDAP、SSH等) 可以通過DNS循環來實現。減少每一個DNS記錄裡的TTL(存活時間),讓遠程系統只能緩沖IP信息30分鐘。這樣流入的信息就會分散在兩個IP地址上。對於流入的SMTP連接,在DNS中添加了兩個MX記錄,這樣如果一個接口關閉了,電子郵件將從另外一個接口傳送。 你可以使用如下所示的dig命令來檢查你的DNS配置: > dig alphapager.org any ; DiG 8.2 alphapager.org any ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER