• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            isware

            Linux做一個(gè)功能完備的路由器

                摘要:本文主要介紹如何用Linux做一個(gè)功能完備的路由器,這里將主要介紹靜態(tài)路由器和動(dòng)態(tài)路由器的配置,但不包括IP偽裝或者說公用一個(gè)IP地址訪問外面網(wǎng)絡(luò)等問題。其已經(jīng)不屬于本主題討論的范圍,請(qǐng)參考其他如防火墻的配置等的內(nèi)容。  

                LRP(Linux Router Project) 已經(jīng)成立了有好幾年的時(shí)間了。這個(gè)計(jì)劃的目的是利用Linux操作系統(tǒng)將老舊的個(gè)人電腦如486當(dāng)成網(wǎng)絡(luò)的路由器使用。利用Linux低成本建立的路由器 可能引起企業(yè)界廣泛的注意。正如StoneFly Technology的系統(tǒng)整合工程師Bret Berger所說的,對(duì)無法負(fù)擔(dān)兩千(美元)思科 (Cisco)路由器的使用者來說,利用486加上幾張以太網(wǎng)卡,當(dāng)成路由器使用,是另一個(gè)選擇。而對(duì)于一些小型企業(yè)、小型ISP ,甚至是政府機(jī)構(gòu),這 是一個(gè)很好的解決方案。事實(shí)上目前國(guó)內(nèi)高校很多場(chǎng)合正是利用了這一解決方案。  

                由于LRP計(jì)劃已經(jīng)把Linux的源代碼精簡(jiǎn) 化,LRP軟件可以少于2MB ,同時(shí)也可以將LRP軟件放入一張軟盤內(nèi)。也就是說在沒有硬盤的情況下,LPR也可以利用軟盤,載入電腦中使用。 Virtual Design Group的軟件工程師Michael Kornegay則表示,他們已經(jīng)將Linux路由器軟件安裝在一架老舊的x86 個(gè)人電腦上,再加上兩張以太網(wǎng)卡,沒有使用硬盤的設(shè)備,只是使用軟盤啟動(dòng),便當(dāng)成陽(yáng)春型的路由器與防火墻使用。  

                我們?cè)谶@一章 里不是教大家如何制作小于2MB的LRP軟件包,而是告訴大家如何利用Linux來獲得一個(gè)性能良好、價(jià)格低廉的路由器。利用Linux構(gòu)建路由器使用的 成本雖然便宜,可是在性能與效率上與真正的路由器相比,卻還是有一段距離。對(duì)于玩家們或是一些要求不高的使用者來說,這是一個(gè)不錯(cuò)的選擇。  

            什么是路由器? 
             簡(jiǎn)單的說:路由器的功能就是尋路――給IP包尋找正確的路徑以通往目的地。下面是比較詳細(xì)的介紹:  

            原理與作用  

                路 由器(Router)用于連接多個(gè)邏輯上分開的網(wǎng)絡(luò),所謂邏輯網(wǎng)絡(luò)是代表一個(gè)單獨(dú)的網(wǎng)絡(luò)或者一個(gè)子網(wǎng)。當(dāng)數(shù)據(jù)從一個(gè)子網(wǎng)傳輸?shù)搅硪粋€(gè)子網(wǎng)時(shí),可通過路由器 來完成。因此,路由器具有判斷網(wǎng)絡(luò)地址和選擇路徑的功能,它能在多網(wǎng)絡(luò)互聯(lián)環(huán)境中,建立靈活的連接,可用完全不同的數(shù)據(jù)分組和介質(zhì)訪問方法連接各種子網(wǎng), 路由器只接受源站或其他路由器的信息,屬網(wǎng)絡(luò)層的一種互聯(lián)設(shè)備。它不關(guān)心各子網(wǎng)使用的硬件設(shè)備,但要求運(yùn)行與網(wǎng)絡(luò)層協(xié)議相一致的軟件。  

                一 般說來,異種網(wǎng)絡(luò)互聯(lián)與多個(gè)子網(wǎng)互聯(lián)都應(yīng)采用路由器來完成。 路由器的主要工作就是為經(jīng)過路由器的每個(gè)數(shù)據(jù)幀尋找一條最佳傳輸路徑,并將該數(shù)據(jù)有效地傳送 到目的站點(diǎn)。由此可見,選擇最佳路徑的策略即路由算法是路由器的關(guān)鍵所在。為了完成這項(xiàng)工作,在路由器中保存著各種傳輸路徑的相關(guān)數(shù)據(jù)--路徑表 (RoutingTable),供路由選擇時(shí)使用。路徑表中保存著子網(wǎng)的標(biāo)志信息、網(wǎng)上路由器的個(gè)數(shù)和下一個(gè)路由器的名字等內(nèi)容。路徑表可以是由系統(tǒng)管理 員固定設(shè)置好的,也可以由系統(tǒng)動(dòng)態(tài)修改,可以由路由器自動(dòng)調(diào)整,也可以由主機(jī)控制。  

            靜態(tài)路徑表  

                由系統(tǒng)管理員事先設(shè)置好固定的路徑表稱之為靜態(tài)(static)路徑表,一般是在系統(tǒng)安裝時(shí)就根據(jù)網(wǎng)絡(luò)的配置情況預(yù)先設(shè)定的,當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)的改變時(shí)需管理員手工改動(dòng)相應(yīng)的表項(xiàng)。    

            動(dòng)態(tài)路徑表  

                動(dòng)態(tài)(Dynamic)路徑表是路由器根據(jù)網(wǎng)絡(luò)系統(tǒng)的運(yùn)行情況而自動(dòng)調(diào)整的路徑表。路由器根據(jù)路由選擇協(xié)議(RoutingProtocol)提供的功能,自動(dòng)學(xué)習(xí)和記憶網(wǎng)絡(luò)運(yùn)行情況,在需要時(shí)自動(dòng)計(jì)算數(shù)據(jù)傳輸?shù)淖罴崖窂健?nbsp; 

            路由器的功能  

                (1) 協(xié)議轉(zhuǎn)換:能對(duì)網(wǎng)絡(luò)層及其以下各層的協(xié)議進(jìn)行轉(zhuǎn)換。  
                (2) 路由選擇:當(dāng)分組從互聯(lián)的網(wǎng)絡(luò)到達(dá)路由器時(shí),路由器能根據(jù)分組的目的地址按某種路由策略,選擇最佳路由,將分組轉(zhuǎn)發(fā)出去,并能隨網(wǎng)絡(luò)拓?fù)涞淖兓詣?dòng)調(diào)整路由表。 
               (3)能支持多種協(xié)議的路由選擇:路由器與協(xié)議有關(guān),不同的路由器有不同的路由器協(xié)議,支持不同的網(wǎng)絡(luò)層協(xié)議。如果互聯(lián)的局域網(wǎng)采用了兩種不同的協(xié)議,例如,一 種是TCP/IP協(xié)議,另一種是SPX/IPX協(xié)議(即Netware的傳輸層/網(wǎng)絡(luò)層協(xié)議),由于這兩種協(xié)議有許多不同之處,分布在互聯(lián)網(wǎng)中的TCP /IP(或SPX/IPX)主機(jī)上,只能通過TCP/IP(或SPX/IPX)路由器與其他互聯(lián)網(wǎng)中的TCP/IP(或SPX/IPX)主機(jī)通信,但不能 與同一局域網(wǎng)中的SPX/IP(或TCP/IP)主機(jī)通信。多協(xié)議路由器能支持多種協(xié)議,如IP,IPX及X.25協(xié)議,能為不同類型的協(xié)議建立和維護(hù)不 同的路由表。這樣不僅能連接同一類型的網(wǎng)絡(luò),還能用它連接不同類型的網(wǎng)絡(luò)。這種功能雖然使路由器的適應(yīng)性變強(qiáng),但同時(shí)也使得路由器的整體性能降低,現(xiàn)在 IP協(xié)議在網(wǎng)絡(luò)中越來越占主導(dǎo)地位,因此在下一代路由器(如交換式路由器)只需要支持IP協(xié)議。  
                (4) 流量控制:路由器不僅具有緩沖區(qū),而且還能控制收發(fā)雙方數(shù)據(jù)流量,使兩者更加匹配。  
                (5) 分 段和組裝功能:當(dāng)多個(gè)網(wǎng)絡(luò)通過路由器互聯(lián)時(shí),各網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)分組的大小可能不相同,這就需要路由器對(duì)分組進(jìn)行分段或組裝。即路由器能將接收的大分組分段 并封裝成小分組后轉(zhuǎn)發(fā),或?qū)⒔邮盏男》纸M組裝成大分組后轉(zhuǎn)發(fā)。如果路由器沒有分段組裝功能,那么整個(gè)互聯(lián)網(wǎng)就只能按照所允許的某個(gè)最短分組進(jìn)行傳輸,大大 降低了其他網(wǎng)絡(luò)的效能。  
                (6) 網(wǎng)絡(luò)管理功能:路由器是連接多種網(wǎng)絡(luò)的匯集點(diǎn),網(wǎng)間分組都要通過它,在這里對(duì)網(wǎng)絡(luò)中的分組、設(shè)備進(jìn)行監(jiān)視和管理是比較方便的。因此,高檔路由器都配置了網(wǎng)絡(luò)管理功能,以便提高網(wǎng)絡(luò)的運(yùn)行效率、可靠性和可維護(hù)行。  

                一個(gè)路由器必然有大于或者等于2的網(wǎng)絡(luò)接口,這樣它才存在路由的功能,否則,如果只有一個(gè)接口的話,也就無所謂"尋路"了!這里說的網(wǎng)絡(luò)接口不一定是物理上的接口,例如網(wǎng)卡或其他,也可以是虛擬的接口,例如隧道入口等。  

                如前面所描述的,一個(gè)路由器上運(yùn)行的路由信息可以是靜態(tài)配置的,也可以是動(dòng)態(tài)產(chǎn)生。前者通過手工配置完成、而后者則通過在路由器上運(yùn)行跑相關(guān)路由協(xié)議的程序來根據(jù)網(wǎng)絡(luò)狀態(tài)動(dòng)態(tài)改變內(nèi)核中的路由表。下面我們仔細(xì)介紹一些這兩類路由器的配置。通常,一個(gè)路由器既有靜態(tài)配置的部分,又有動(dòng)態(tài)配置的部分,二者結(jié)合起來。  

            多網(wǎng)卡的設(shè)置  

            靜態(tài)路由器的配置  

                Linux下最常用的指定路由規(guī)則的命令是route,當(dāng)然也有些圖形化的工具可以使用,我們下面一個(gè)一個(gè)介紹。  

            route命令的使用  

                route工具主要功能是管理Linux系統(tǒng)內(nèi)核中的路由表。它最大的用途就是用來設(shè)定靜態(tài)的路由表項(xiàng),通常是在系統(tǒng)用ifconfig配置網(wǎng)絡(luò)接口(例如網(wǎng)卡等)后,用它來設(shè)定主機(jī)或者一網(wǎng)段的IP地址應(yīng)該通過什么接口發(fā)送等。  

            Route工具有復(fù)雜的調(diào)用參數(shù)。  
            調(diào)用格式如下:  

            route [-CFvnee]  

            route [-v] [-A family] add [-net|-host] target [netmask  
            Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I]  
            [reject] [mod] [dyn] [reinstate] [[dev] If]  

            route [-v] [-A family] del [-net|-host] target [gw Gw]  
            [netmask Nm] [metric N] [[dev] If]  

            route [-V] [--version] [-h] [--help]  

            主要參數(shù)說明如下:  

                -v 使用冗余輸出模式。  
                -A family   指定特定的地址族(例如"inet"、"inet6")。  
                -n 使用數(shù)字顯示的地址(例如,202.38.75.75)而不是去解釋域名。  
                -e 使用與netstat相同的輸出格式。  
                -ee 參數(shù)會(huì)產(chǎn)生很長(zhǎng)的輸出,包括內(nèi)核路由表的幾乎所有信息。  
                -net 目標(biāo)(target)是一個(gè)網(wǎng)段。  
                -host 目標(biāo)(target)是一個(gè)單獨(dú)的主機(jī)。  
                -F 顯示內(nèi)核FIB路由表。結(jié)果可能被-e 和-ee參數(shù)改變。
                -C 顯示內(nèi)核中路由緩存信息。  
                del 刪除一個(gè)路由表項(xiàng)。  
                add 增加一個(gè)路由表項(xiàng)。  
                target 配置的目的網(wǎng)段或者主機(jī)。可以是IP,或者是網(wǎng)絡(luò)或主機(jī)名。  
                netmask Nm   用來指明要添加的路由表項(xiàng)的網(wǎng)絡(luò)掩碼。  
                gw Gw 任何通往目的(target )的IP分組都要通過這個(gè)網(wǎng)關(guān)。  
                metric M  設(shè)置路由表中該項(xiàng)的尺度域(metric field)為M。  
                mss M 設(shè)置TCP的最大分片長(zhǎng)度(MSS)M bytes。  系統(tǒng)缺省值是536。  
                window W  設(shè)置TCP發(fā)送窗口的尺寸為W bytes。  
                irtt I 設(shè)置TCP的初始化回路時(shí)間(irtt)I毫秒(1-12000)。缺省情況下按照RFC 1122 規(guī)定是300ms。  
                reject 安裝一個(gè)阻塞型的路由,這樣可能會(huì)有路由查找失敗。  
                mod, dyn, reinstate  添加或者修改一個(gè)動(dòng)態(tài)路由表項(xiàng)。主要用來測(cè)試和診斷。  
                dev If 強(qiáng)行使用某個(gè)特定的輸出接口(If),而不用系統(tǒng)去尋找接口。  

            下面舉幾個(gè)配置的例子:  

                route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0  
                添加一條路由表項(xiàng),網(wǎng)段192.56.76.x 應(yīng)該從接口"eth0"走。  

                route add default gw mango-gw  
                添加一條缺省路由(如果沒有其他匹配的路由項(xiàng),就使用這個(gè)路由規(guī)則)。"mango-gw"是一個(gè)主機(jī)名, 而通往這個(gè)主機(jī)的路由規(guī)則應(yīng)該事先已經(jīng)設(shè)置好了。  

                route add ipx4 sl0  
                給主機(jī)"ipx4"添加一條路由規(guī)則,使用SLIP接口sl0。  

            Route命令的輸出結(jié)果  
            輸出的格式有以下幾欄:  

                Destination  目標(biāo)網(wǎng)段或者主機(jī)。  
                Gateway  網(wǎng)關(guān)地址,如果沒有設(shè)置,則是"*"表示。  
                Genmask  網(wǎng)絡(luò)掩碼。  
                Flags 一些可能的標(biāo)記如下:  
                 U (路由是活動(dòng)的)  
                 H (目標(biāo)是一個(gè)主機(jī))  
                 G (使用網(wǎng)關(guān)(gateway))  
                 R (reinstate route 動(dòng)態(tài)路由產(chǎn)生的表項(xiàng))  
                 D (dynamically installed by daemon or redirect)  
                 M (modified from routing daemon or rederict)  
                 ! (reject route)  
                Metric 路由距離。  
                Ref 路由項(xiàng)引用次數(shù)。(linux內(nèi)核中沒有使用)  
                Use 查找路由項(xiàng)的次數(shù)。.  
                Iface 該路由表項(xiàng)對(duì)應(yīng)的輸出接口。  
                MSS 缺省的TCP最大分片尺寸。  
                Window 缺省的TCP窗口的尺寸。  
                irtt 缺省的TCP回路時(shí)間。  
                HH (cached only)  
                ARP入口的數(shù)目。  
                Arp (cached only)  該路由項(xiàng)對(duì)應(yīng)的物理地址是否過期等信息。  

            下面是route -n的輸出實(shí)例:  

            tarn:~$ /sbin/route -n  
            Kernel IP routing table  
            Destination Gateway Genmask Flags Metric Ref Use Iface  
            202.38.64.3 202.38.75.62 255.255.255.255 UGH 0 0 0 eth0  
            202.38.75.75 0.0.0.0 255.255.255.255 UH 0 0 0 eth2  
            202.38.75.0 0.0.0.0 255.255.255.128 U 0 0 0 eth0  
            192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2  
            192.168.75.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1  
            159.226.0.0 202.38.75.62 255.255.0.0 UG 0 0 0 eth0  
            127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo  
            0.0.0.0 202.38.75.62 0.0.0.0 UG 1 0 0 eth0  

                上面的輸出中我們可以看出,該路由器配置的缺省網(wǎng)關(guān)是202.38.75.62,它上面有3個(gè)以太網(wǎng)接口(eth0、eth1和eth2)。其中第一條和第二條路由規(guī)則是針對(duì)一個(gè)主機(jī)的,其他的都是針對(duì)一個(gè)網(wǎng)段的,這可以重掩碼看出。  

            動(dòng)態(tài)路由器的配置 

            基本原理介紹 

            先解釋一下什么是動(dòng)態(tài)路由。 

                從 前面的描述中我們可以看到,路由器的基本功能就是為IP分組尋找到達(dá)目的地址的路徑。我們前一節(jié)介紹的是人工手動(dòng)靜態(tài)配置路由規(guī)則,也就是人為的設(shè)定尋路 方式。但是因特網(wǎng)是個(gè)龐大的系統(tǒng),上面跑的網(wǎng)絡(luò)結(jié)構(gòu)負(fù)責(zé),而且拓?fù)浣Y(jié)構(gòu)也在隨時(shí)改變,這樣在某些復(fù)雜的范圍里我們的靜態(tài)配置就不一定能獲得最佳的尋路路徑 了。而且一旦網(wǎng)絡(luò)結(jié)構(gòu)發(fā)生改變,我們手動(dòng)的靜態(tài)配置也往往無法及時(shí)跟著改變。在這個(gè)背景下,產(chǎn)生了動(dòng)態(tài)路由配置的概念,也就是動(dòng)態(tài)路由器。 

                動(dòng) 態(tài)路由器上的路由表項(xiàng)是通過相互連接的路由器之間交換彼此信息,然后按照一定的算法優(yōu)化出來的,而這些路由信息是在一定時(shí)間間隙里不斷更新,以適應(yīng)不斷變 化的網(wǎng)絡(luò),以隨時(shí)獲得最優(yōu)的尋路效果。為了實(shí)現(xiàn)IP分組的高效尋路,IETF制定了多種尋路協(xié)議。其中用于自治系統(tǒng) (AS:Autonomous System)內(nèi)部網(wǎng)關(guān)協(xié)議有開放式最短路徑優(yōu)先(OSPF:Open Shortest Path First)協(xié)議和 尋路信息協(xié)議(RIP:Routing Information Protocol)。所謂自治系統(tǒng)是指在同一實(shí)體(如學(xué)校、企業(yè)或ISP)管理下的主 機(jī)、路由器及其他網(wǎng)絡(luò)設(shè)備的集合。還有用于自治域系統(tǒng)之間的外部網(wǎng)絡(luò)路由協(xié)議BGP-4等。 

                運(yùn)行這些路由協(xié)議的軟件就是我們通 常說的路由軟件,Linux下常見的路由軟件有g(shù)ated和zebra,。前者既有GPL版本的發(fā)行,又有收費(fèi)的版本;而后者則是日本某組織開發(fā)的完全 GPL的高效的路由軟件。Linux的發(fā)行里面一般都缺省就有g(shù)ated這個(gè)軟件,我們下面主要介紹它的配置和使用方法。 

            路由協(xié)議的介紹 

            我們這里介紹一下RIP協(xié)議。 

                RIP 是Routing Information Protocol的縮寫,直接翻譯就是"路由信息協(xié)議"。RIP計(jì)算路由時(shí)使用了"距離向量 (distance vector)"算法,因此,它也被稱作"距離向量尋路協(xié)議 (distance vector routing protocol)。 

                RIP的特點(diǎn)是路由器間定時(shí)地交換網(wǎng)絡(luò)的整體知識(shí), 并且只和相鄰路由器交換這種知識(shí)。換句話說,路由器只和相鄰路由器共享網(wǎng)絡(luò)信息。路由器一旦從相鄰路由器獲取了新的知識(shí),就將其追加到自己的數(shù)據(jù)庫(kù)中,并 將該信息傳遞給所有的相鄰的路由器。相鄰路由器做同樣的操作,經(jīng)過若干次傳遞,使自治系統(tǒng)內(nèi)的所有路由器都能獲得完整的路由信息。 

                RIP 報(bào)文用UDP數(shù)據(jù)報(bào)來傳送。為了區(qū)別于其他的UDP應(yīng)用,規(guī)定RIPng的公認(rèn)專用UDP端口號(hào)為521。主動(dòng)尋路更新報(bào)文的源/目的的端口都是 RIPng端口,應(yīng)答的更新報(bào)文送往發(fā)起請(qǐng)求的端口。應(yīng)當(dāng)注意,IPv4中RIP使用的端口號(hào)是520,與RIPng的有所不同。 

                定時(shí)器愛RIP中有著比較重要的作用。在RIP中為支持尋路操作使用了三個(gè)不同的定時(shí)器。 

                第 一個(gè)是啟動(dòng)定時(shí)進(jìn)行RIP更新操作的定時(shí)器。此定時(shí)器通常設(shè)置成30秒。在RIP標(biāo)準(zhǔn)中對(duì)其進(jìn)一步加以限制,它要求路由器對(duì)更新報(bào)文的發(fā)送間隔采用隨機(jī) 數(shù),將RIP更新報(bào)文的間隔選取在25秒到35秒之間。其目的是為了避免網(wǎng)絡(luò)上所有的路由器以相同的定時(shí)發(fā)送更新報(bào)文,大量的業(yè)務(wù)量壓迫網(wǎng)絡(luò)造成沖突。利 用隨機(jī)間隔可均衡業(yè)務(wù)量,從而減少路由器的沖突。 

                RIP在避免沖突方面還有一點(diǎn)需要注意,在觸發(fā)更新中不論何時(shí)發(fā)送了報(bào)文,不 對(duì)30秒定時(shí)器復(fù)位。如果復(fù)位,多個(gè)路由器的更新報(bào)文的發(fā)送間隔就會(huì)發(fā)生沖突。這是由于所有的路由器在發(fā)送觸發(fā)更新后同時(shí)啟動(dòng)定時(shí)器造成的。如不對(duì)該定時(shí) 器復(fù)位,即使與在數(shù)秒前剛廣播的觸發(fā)更新報(bào)文的內(nèi)容完全一樣,定時(shí)的更新報(bào)文也照發(fā)不誤。 

                RIP使用的第二個(gè)定時(shí)器時(shí)期滿 (expiration)定時(shí)器。路由器只要收到通往特定信宿的路由,就對(duì)通往該信宿的期滿定時(shí)器初始化。期滿定時(shí)器雖然被設(shè)定為180秒,但在穩(wěn)定的網(wǎng) 絡(luò)中總是每隔30秒被初始化。當(dāng)網(wǎng)絡(luò)不穩(wěn)定時(shí),此定時(shí)器的時(shí)間區(qū)間表示該路由無效。 

                RIP最后一個(gè)定時(shí)器時(shí)垃圾收集 (garbage collection)定時(shí)器。路由器對(duì)無效路由打上尺度為無窮大的無效標(biāo)記并將垃圾收集定時(shí)器置位。此時(shí),定時(shí)器在120秒的區(qū)間內(nèi) 工作。在該期間內(nèi)路由器將尺度費(fèi)用置成無窮大的同時(shí),繼續(xù)公布該信宿。以這種方法公布路由,相鄰路由表就能迅速?gòu)膶ぢ繁碇袆h除該路由。 

            RIP協(xié)議也有它的缺陷: 

                網(wǎng)絡(luò)直徑較小 

                RIP將尺度(即費(fèi)用)無窮大定義為16,這一定義對(duì)使用RIP的所有網(wǎng)絡(luò)的規(guī)模作出了嚴(yán)格的限制。因尺度必須是整數(shù),故網(wǎng)絡(luò)的費(fèi)用至少為1。在基于RIP的Internet中,所有的系統(tǒng)距其他任何系統(tǒng)不能超過15個(gè)網(wǎng)絡(luò)。這一大小被稱作網(wǎng)絡(luò)直徑。 

                這 一限制對(duì)管理員分配費(fèi)用的靈活性是一個(gè)很大的制約。管理員分配費(fèi)用最直接的方法是對(duì)各個(gè)網(wǎng)絡(luò)的費(fèi)用都設(shè)成1。但是,在這種分配方式下,RIP就會(huì)選擇費(fèi)用 最小的路徑,而不管該路徑上的信道容量的大小。因此會(huì)舍棄"較長(zhǎng)"的高速路徑而通過低效的"較短"路徑傳送數(shù)據(jù)。為了避免這種情況的發(fā)生,管理員可將大于 1的費(fèi)用分配給低效鏈路,人為地提高其費(fèi)用。其結(jié)果是最大網(wǎng)絡(luò)直徑隨之變小,進(jìn)一步限制了RIP的網(wǎng)絡(luò)規(guī)模。 

                對(duì)網(wǎng)絡(luò)變化的反應(yīng)較慢 

                RIP網(wǎng)絡(luò)中的路由器從路由失效到將其識(shí)別出來要等待180秒,而在OSPF中典型值是1~2秒。 

                不支持組播 

                在RIP中沒有公布組成員信息的方法,因此不支持組播尋路。為實(shí)現(xiàn)組播尋路需和其他協(xié)議并用。
            gated的配置 

                gated支持RIP、OSPF、IS-IS等路由協(xié)議。我們這里著重介紹RIP協(xié)議的配置方法,其他協(xié)議的配置大家可以針對(duì)協(xié)議本身然后參考相關(guān)幫助文檔做類似的配置就可以。 

                首先修改/etc/sysconfig/network文件,使得FORWARD_IPV4=yes。然后在/etc/目錄下創(chuàng)建文件名為gated.conf的文件,里面就是需要填寫的配置信息。RIP協(xié)議的配置語(yǔ)法如下: 

            rip yes | no | on | off [ { 
            broadcast ; 
            nobroadcast ; 
            nocheckzero ; 
            preference preference; 
            defaultmetric metric ; 
            query authentication [none | [[simple|md5] password]] ; 
            interface interface_list 
            [noripin] | [ripin] 
            [noripout] | [ripout] 
            [metricin metric] 
            [metricout metric] 
            [version 1]|[version 2 [multicast|broadcast]] 
            [[secondary] authentication [none | [[simple|md5] password]] ; 
            trustedgateways gateway_list ; 
            sourcegateways gateway_list ; 
            traceoptions trace_options ; 
            } ] ; 

                上面的配置語(yǔ)法用來啟動(dòng)或者禁止RIP協(xié)議的運(yùn)行,并對(duì)RIP協(xié)議某些參數(shù)進(jìn)行設(shè)置。各參數(shù)的含義如下: 

            broadcast 指明RIP分組將被廣播。當(dāng)廣播靜態(tài)路由或者由其他協(xié)議產(chǎn)生的RIP路由項(xiàng)時(shí),這很有用。 
            nobroadcast 指明當(dāng)然的接口上不廣播RIP分組。 
            nocheckzero 指明RIP不處理RIP分組中的保留域。通常RIP將拒絕保留域?yàn)榉橇愕姆纸M。 
            preference preference 設(shè)置RIP路由的preference,其缺省值是100,這個(gè)值可以被其他的給定的策略重寫。 
            metric metric 定義當(dāng)使用RIP廣告由其他路由協(xié)議獲得的路由信息時(shí)使用的尺度(metric)。其缺省值為16(不可達(dá))。 
            query authentication [none | [[simple|md5] password]] ; 設(shè)定身份認(rèn)證密碼。缺省是無需認(rèn)證。 
            interface interface_list 針對(duì)某特定的接口進(jìn)行參數(shù)設(shè)定。 
              可以有的參數(shù)如下: 
              noripin 指定該接口商接收的RIP分組無效。 
              ripin 這是缺省的參數(shù)。與noripin相反。 
              noripout 被指定的接口上將無RIP分組發(fā)出。缺省值是在所有的廣播和非廣播的接口商發(fā)送送RIP分組。 
              ripout 這是缺省值。與noripout的含義相反。 
              metricin metric 指定在新添加的路由表項(xiàng)加入內(nèi)核路由表以前增加的尺度(metric)。缺省值是1。 
              metricout metric 指定通過特定的接口發(fā)出的RIP前,對(duì)尺度的增加值。缺省值是0。 
              version 1 指定發(fā)送第一個(gè)版本的RIP協(xié)議的分組。缺省值是這個(gè)。 
              version 2 在指定的接口商發(fā)送第二個(gè)版本的RIP協(xié)議分組。如果IP組播可以使用,則缺省發(fā)送完全第二版本的分組,如果不支持組播,則使用與第一版本兼容的第二版本的RIP分組。 
              multicast 指明在特定接口上的第二版本的RIP分組使用組播發(fā)送。 
              broadcast 指明在特定的接口上使用廣播來發(fā)送與第一版本兼容的第二版本的RIP分組,即使該接口支持組播。 

            [secondary] authentication [none | [simple|md5] password] 定義身份認(rèn)證的方式。只對(duì)第二版本的RIP協(xié)議有用。缺省是無身份認(rèn)證。 
            trustedgateways gateway_list 定義RIP接收RIP更新分組的網(wǎng)關(guān)。gateway_list 是一個(gè)簡(jiǎn)單的主機(jī)名或者IP地址的列表。缺省情況下,在共享網(wǎng)絡(luò)上的所有的路由器都被認(rèn)為支持提供RIP更新信息。 
            sourcegateways gateway_list 定義RIP直接發(fā)送分組的路由器列表,而不通過組播或者廣播。 
            traceoptions trace_options 設(shè)置RIP跟蹤選項(xiàng)。詳細(xì)設(shè)置略。 

            下面是些配置示例: 
            配置1: 



            # This configuration runs RIP in quiet mode, it only listens to 
            # packets, no matter how many interfaces are configured. 


            rip yes { 
            nobroadcast ; 
            } ; 

            配置2: 

            # This configuration emulates routed. It runs RIP and only sends 
            # updates if there are more than one interfaces up and IP forwarding is 
            # enabled in the kernel. 

            # NOTE that RIP *will not* run if UDP checksums are disabled in 
            # the kernel. 


            rip yes ; 

            zebra介紹 

                這 是日本人寫的以GNU版權(quán)方式發(fā)布的軟件,開始于1996年,主要的功能是實(shí)現(xiàn)了 RIPv1,RIPv2,RIPng, OSPFv2, OSPFv3, BGP-4, and BGP-4+路由協(xié)議,目前是0.87版,目前支持 Linux和FreeBSD,將來會(huì)支持Solaris 7和GNU Hurd。 

                其中 RIPv1, RIPv2, OSPFv2是用于IPv4的自治域系統(tǒng)內(nèi)部網(wǎng)絡(luò)路由協(xié)議,最好的是OSPF,他支持VLSM(變長(zhǎng)子網(wǎng)掩碼)、收斂快,能 根據(jù)鏈路的負(fù)載等動(dòng)態(tài)調(diào)整路由,是目前最好的所有廠商都支持的內(nèi)部路由協(xié)議。跟他差不多(也許還要好)的是cisco專有的EIGRP. 

                BGP- 4是用于自治域系統(tǒng)之間的外部網(wǎng)絡(luò)路由協(xié)議,也是目前Internet主干上目前使用的協(xié)議,非常的靈活。在國(guó)外用的非常普遍,如果一個(gè)網(wǎng)絡(luò)有兩個(gè)以上出 口(連接兩個(gè)ISP)極大的可能會(huì)用他。但是在國(guó)內(nèi)好象很少使用,這也跟國(guó)內(nèi)的網(wǎng)絡(luò)比較封閉有關(guān)。假如我們跟CSTNET和CETNET使用BGP-4的 話,只要這兩個(gè)出口一個(gè)是通的,我們對(duì)外的連接不會(huì)中斷超過1分鐘。 

                RIPng OSPFv3, BGP-4+主要擴(kuò)展了對(duì)ipv6的支持。 

                這個(gè)軟件配置的很多方面跟cisco的IOS配置幾乎完全相同,我們完全可以拿一臺(tái)PC機(jī)來完成一些必須用昂貴的CISCO路由器才能完成的比較復(fù)雜的路由協(xié)議處理控制功能。 

                GNU Zebra可以到www.zebra.org去找。 

            路由器上的策略控制:IP帶寬管理(QoS) 

            為什么要管理帶寬? 

                因 特網(wǎng)的成功主要因素是IP(Internet Protocol)協(xié)議族的簡(jiǎn)單和穩(wěn)健。現(xiàn)在幾乎所有的人都在向IP靠攏,甚至傳統(tǒng)的電訊公司也在將它們的 基于電路交換的語(yǔ)音網(wǎng)絡(luò)向IP網(wǎng)絡(luò)轉(zhuǎn)。然而基于IP協(xié)議的因特網(wǎng)這時(shí)候就遇到了一個(gè)非常大的困難。它不相ATM協(xié)議,它是平等地對(duì)待任何業(yè)務(wù),也就是說所 有的通過IP網(wǎng)絡(luò)的數(shù)據(jù)都被平等地盡可能好的傳送(稱:盡力型服務(wù))。如果我愿意多付1倍的錢,我也不能讓我的主頁(yè)下載的速度提高一倍。這時(shí)候就引入了 QoS概念,也就是服務(wù)質(zhì)量保證。這種情況下,平等對(duì)待所有IP業(yè)務(wù)數(shù)據(jù)的方法就要被放棄,而試圖區(qū)分不同的用戶或業(yè)務(wù),然后分配不同的帶寬。這就是路由 器上的帶寬的分配和管理。 

                這些年來,不同的技術(shù)發(fā)展很 快,IETF(Internet Engineering Task Force)已經(jīng)發(fā)布了幾種標(biāo)準(zhǔn),包括:綜合服務(wù)、區(qū)分服務(wù)、資源預(yù)留技術(shù)。這些標(biāo) 準(zhǔn)都在Linux下有了實(shí)現(xiàn)。但它們的使用是個(gè)綜合的問題,需要網(wǎng)絡(luò)其他路由器的配合(例如資源預(yù)留),所以當(dāng)前在實(shí)踐中使用不是很廣,但隨著因特網(wǎng)業(yè)務(wù) 的不斷增加,它們會(huì)逐漸越來越多的被大家使用的。 

                Linux內(nèi)核2.1.x及后續(xù)版本里面主要是引入了traffic control代碼,來實(shí)現(xiàn)IP帶寬的分配和管理。 

            TC的特點(diǎn) 

                TC 是Traffic Control的縮寫,中文意思即為"流量控制"。TC有很大的伸縮性。作為一個(gè)提供虛擬主機(jī)服務(wù)的ISP來說,它可以利用Linux 的流量控制來給不同的客戶不供的服務(wù)質(zhì)量保證。傳統(tǒng)的出售虛擬主機(jī)或者提供主頁(yè)存放服務(wù)的ISP通常是提供不同的磁盤空間來作為不同檔次的服務(wù),例如一個(gè) 月100元可以獲得100M的空間。如果使用Linux的流量控制(TC),我們就可以多提供一種有區(qū)分的不同的服務(wù),例如你是一個(gè)提供虛擬主機(jī)服務(wù)的 ISP,你可以有如下多的不同的服務(wù)選擇: 
                · 服務(wù)水平1: 花費(fèi)¥100/月――瀏覽者獲得250Kbps的瀏覽頁(yè)面速度。 
                · 服務(wù)水平2: 花費(fèi)¥150/月--250Kbps,但是如果帶寬允許的話在午夜0點(diǎn) 到臨晨6點(diǎn)之間可以達(dá)到1Mbps。 
                · 服務(wù)水平3: 花費(fèi)¥200/月--250Kbps, 但是如果帶寬允許的話可以最大達(dá)到1Mbps,不限制時(shí)間(與服務(wù)水平2區(qū)別之處)。 
                · 服務(wù)水平4:花費(fèi)¥500/月--提供1Mbps的高速的帶寬保證。適合視頻和音頻流的服務(wù)。 

                由上面的例子,我們可以利用TC很方便的指定各種有控制的服務(wù)規(guī)則。上面提到的每天不同時(shí)段提供不同的服務(wù),我們可以很容易的用crontab來定時(shí)運(yùn)行一些腳本去改變帶寬分配規(guī)則來達(dá)到。這是一個(gè)比較好的例子,我們?cè)诤竺鎸⒔榻B一個(gè)實(shí)例。 

            TC的使用實(shí)例說明 

                下面我們提供一個(gè)利用TC來實(shí)現(xiàn)對(duì)在一個(gè)Linux服務(wù)器上的兩個(gè)虛擬主機(jī)實(shí)行不同的帶寬策略的例子。在該例中,我們將講述如何配置和測(cè)試TC。 

            編譯內(nèi)核 
                至于如何編譯一個(gè)新的內(nèi)核已經(jīng)不屬于本章節(jié)討論的范圍,我們假設(shè)你已經(jīng)知道如何重新編譯一個(gè)內(nèi)核。 
                編譯內(nèi)核時(shí)將以下幾個(gè)內(nèi)核選項(xiàng)選中:"kernel/User netlink socket"和"Netlink device emulation"。這樣TC就可以利用netlink來與內(nèi)核傳送信息。同時(shí)將所有的排隊(duì)算法選上,位于包括 

            "Fair queueing" 
            "CBQ packet scheduler" 
            "CSZ packet scheduler" 
            "the simples PRIO pseudoscheduler" 
            "RED queue" 
            "SFQ queue" 
            "TBF queue" 
            "QoS support" 
            "rate estimator" 
            "packet classifier API" 
            "routing-tables-based classifier" 
            "U32 classifier" 
            "special RSVP classifier and special RSVP classifier for IPv6"。 

                選中這些選項(xiàng)以后,按正常的編譯內(nèi)核步驟編譯內(nèi)核,然后安裝新內(nèi)核,并用新內(nèi)核重新啟動(dòng)系統(tǒng)。 

            編譯TC軟件包 

                可以在下面的地址下載到我們需要的軟件,然后按照軟件包里的說明編譯它: 
            ftp://linux.wauug.org/pub/net/ip-routing/iproute2-current.tar.gz 通常我們要做的只是簡(jiǎn)單的輸入make就可以了。 

            TC 的設(shè)定 

            圖1. CBQ 樹圖 
                圖 一是我們將配置的一個(gè)系統(tǒng)的簡(jiǎn)單的樹形圖示范。兩個(gè)葉子節(jié)點(diǎn)從父節(jié)點(diǎn)分配帶寬,IP地址10.0.0.10(標(biāo)識(shí)符1:1)和地址10.0.0.11(標(biāo) 識(shí)符1:2)是接口eth0上的IP別名,它們共同分享父節(jié)點(diǎn)(標(biāo)識(shí)符1:0)的帶寬。這個(gè)例子里面只涉及到了對(duì)一個(gè)接口上的流量控制,大家可以仿照這個(gè) 例子構(gòu)造自己感興趣的控制多個(gè)接口設(shè)備的配置。 
                配置QoS特性的第一步就是將qdisc加入到一個(gè)接口上,例如本例子: 
                qdisc add dev eth0 root handle 1: ... 

                然后定義你需要區(qū)別的類別。不同的類別對(duì)應(yīng)不同的流量控制類型。我們的例子中,使用如下的語(yǔ)句: 

                tc class add dev eth0 parent 1:0 classid X:Y ... 

                我 們的例子中只使用了一層深的類別樹。當(dāng)然,我們可以構(gòu)造多層深度的復(fù)雜的樹,基本的原則是一樣的:就是一個(gè)子節(jié)點(diǎn)(如圖1所示)繼承一個(gè)父節(jié)點(diǎn)的資源同時(shí) 進(jìn)一步根據(jù)類的定義去分配父節(jié)點(diǎn)的資源。例如,父類1:0擁有該設(shè)備的全部帶寬,那么子節(jié)點(diǎn)1:1不可能獲得超過10Mbits的帶寬,當(dāng)然本例子中是限 制為1Mbps。 
                最后定義"IP分組--類別"的映射規(guī)則,用來告訴系統(tǒng)的分類器,經(jīng)過路由器調(diào)度的某IP分組該對(duì)應(yīng)什么類型。首先,將一個(gè)分類器與輸出接口關(guān)聯(lián)起來: 

                filter add dev eth0 parent 1:0 protocol ip ... 

                然后,定義"IP分組--類別"的映射規(guī)則。本例子中,將利用IP分組的源地址來作為分類的關(guān)鍵詞。 下面的腳本完成了這個(gè)功能。關(guān)于腳本中TC等命令的參數(shù),大家可以參考隨機(jī)的文檔,這里限于篇幅,不做介紹了。 

            #! /bin/sh 
            #path to tc and the ip utilities; 
            #change to reflect yours. 
            TC=./iproute2/tc/tc 
            IP=./iproute2/ip/ip 
            ################################################## 
            #Addresses to be aliased 
            #change or add more to reflect yours 

            ALIAS1=10.0.0.10 
            ALIAS2=10.0.0.11 
            ################################################## 
            # add ip aliasing support 
            #uncomment if you want to use the ip utility to 
            #add ip-aliasing for you 

            #$IP addr add $ALIAS1 dev eth0 
            #$IP addr add $ALIAS2 dev eth0 
            ################################################## 
            # Attaching a device queue discipline to an 
            # interface a device queue discipline is 
            # equivalent almost to a device manager 

            #Attach CBQ to eth0 
            #Things you might need to change: 
            # bandwidth -- the bandwidth of the eth0 device 
            # note it must match the devices real bandwidth 
            # allot -- it is safe to leave it at the MTU of 
            # the device 
            # avpkt -- the average packet size that you 
            # suspect will be seen safe to leave at 1000 
            # for Ethernet with MTU of 1514 bytes 
            # mpu -- minimum packet size 

            $TC qdisc add dev eth0 root handle 1: cbq 
            bandwidth 10Mbit allot 1514 cell 8 avpkt 1000 
            mpu 64 
            ################################################## 
            # Attaching class queue disciplines 
            # bounded -- it is bound to the rate allocated; 
            # can borrow even if there is a lot of idle 
            # bandwidth just sitting there isolated -- cannot 
            # share its bandwidth to other classes prio is the 
            # priority assigned 0 being the highest and 7 the 
            # lowest weight -- safer to leave at 1 
            # queue discipline setup. Classid 1:1 will have a 
            # rate of 1Mbps which is bounded. 

            $TC class add dev eth0 parent 1:0 classid 1:1 cbq 
            bandwidth 10Mbit rate 1Mbit avpkt 1000 prio 5 
            bounded isolated allot 1514 weight 1 maxburst 21 
            #rate 1Mbit avpkt 1000 prio 5 bounded allot 1514 
            #weight 1 maxburst 21 
            # Classid 1:2 will have a rate of 3Mbps which is 
            # bounded. 
            $TC class add dev eth0 parent 1:0 classid 1:2 cbq 
            bandwidth 10Mbit rate 3Mbit avpkt 1000 prio 5 
            bounded allot 1514 weight 1 maxburst 21 
            ################################################## 
            # Define the filter to be attached to eth0 
            # Create with hash table of 256 slots with ID 1: 

            $TC filter add dev eth0 parent 1:0 protocol ip 
            prio 5 handle 1: u32 divisor 256 
            ################################################## 
            # define the criteria for mapping incoming packets 
            # to classes. Add to the 5th slot of hash table a 
            # rule to select virtual address ALIAS1 direct it 
            # to class 1:1 

            $TC filter add dev eth0 parent 1:0 prio 5 u32 
            ht 1:6: match ip src $ALIAS1 flowid 1:1 
            # Add to 6th slot of hash table rule to select 
            # ALIAS2 direct it to class 1:2 
            $TC filter add dev eth0 parent 1:0 prio 5 u32 
            ht 1:6: match ip src $ALIAS2 flowid 1:2 
            ## Lookup hash table, if it is not fragmented 
            ## frame. Use protocol as hash key 

            $TC filter add dev eth0 parent 1:0 prio 5 handle 
            ::1 u32 ht 800:: match ip nofrag 
            offset mask 0x0F00 shift 6 
            hashkey mask 0x00ff0000 at 8 link 1: 

            #some more examples of how to use u32 
            # Add to 4th slot of hash table rule to select 
            # tcp/telnet to 193.233.7.75 direct it to class 
            # 1:4 and prescribe to fall to best effort, 
            # if traffic violates TBF (32kbit,5K) 
            #$TC filter add dev eth1 parent 1:0 prio 5 u32 
            # ht 1:4: match ip dst 193.233.7.75 
            # match tcp dst 0x17 0xffff 
            # flowid 1:4 
            # police rate 32kbit buffer 5kb/8 mpu 64 
            # mtu 1514 index 1 
            ## Add to 1st slot of hash table rule to select 
            ## icmp to 193.233.7.75 direct it to class 1:3 
            ## and prescribe to fall to best effort, 
            ## if traffic violate TBF (10kbit,5K) 
            #$TC filter add dev eth1 parent 1:0 prio 5 u32 
            # ht 1:4: match ip dst 193.233.7.75 
            # match tcp dst 0x17 0xffff 
            # flowid 1:4 
            # police rate 32kbit buffer 5kb/8 mpu 64 
            # mtu 1514 index 1 
            ## Add to 1st slot of hash table rule to select 
            ## icmp to 193.233.7.75 direct it to class 1:3 
            ## and prescribe to fall to best effort, 
            ## if traffic violate TBF (10kbit,5K) 
            #$TC filter add dev eth1 parent 1:0 prio 5 u32 
            # ht 1:: sample ip protocol 1 0xff 
            # match ip dst 193.233.7.75 flowid 1:3 
            # police rate 10kbit buffer 5kb/8 mpu 64 
            # mtu 1514 index 2 
            ################################################## 
            #Look at all that we created: 

            echo "---- qdisc parameters ----------" 
            $TC qdisc ls dev eth0 
            echo "---- Class parameters ----------" 
            $TC class ls dev eth0 
            echo "---- filter parameters ----------" 
            $TC filter ls dev eth0 

            測(cè)試 

                我們的例子當(dāng)中,是有在同一個(gè)Linux服務(wù)器上有兩個(gè)虛擬WWW服務(wù)器,我們的設(shè)定是采用了IP別名,將兩個(gè)地址同時(shí)綁在一個(gè)接口上。我們可以用ftp來 測(cè)試。首先用ftp連接10.0.0.10服務(wù)器,我們可以獲得大概1Mbps的速率;然后ftp另外的地址10.0.0.11,我們可以獲得大概 3Mbps的速率。

            posted on 2011-06-01 14:44 艾斯維亞 閱讀(704) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久亚洲AV成人网| 久久AV高清无码| 亚洲va久久久噜噜噜久久男同| 日本人妻丰满熟妇久久久久久| 91精品国产91久久| 亚洲精品国产美女久久久| 伊人丁香狠狠色综合久久| 久久精品亚洲AV久久久无码| 国产精品久久久久久久午夜片 | 久久精品国产清高在天天线| 久久亚洲av无码精品浪潮| 成人久久综合网| 欧美牲交A欧牲交aⅴ久久 | 国产成人精品白浆久久69| 亚洲精品综合久久| 久久久久久国产精品免费免费| 精品国产一区二区三区久久久狼 | 久久精品亚洲一区二区三区浴池 | 久久精品国产亚洲AV忘忧草18| 91精品婷婷国产综合久久| 国内精品人妻无码久久久影院导航 | 久久久久久A亚洲欧洲AV冫| 久久91精品国产91久久麻豆| 亚洲午夜久久久久久噜噜噜| 久久天天躁夜夜躁狠狠躁2022| 久久露脸国产精品| 久久久久黑人强伦姧人妻| 国产香蕉97碰碰久久人人| 久久精品视频网| 色综合久久中文色婷婷| 久久国产免费观看精品| 久久久精品午夜免费不卡| 国产99精品久久| 久久精品男人影院| 国产精品日韩深夜福利久久| 91精品国产91热久久久久福利| 久久精品国产91久久麻豆自制 | 狠狠狠色丁香婷婷综合久久五月 | 成人a毛片久久免费播放| 国产三级精品久久| 久久久久亚洲av成人无码电影|