用Linux打造路由器

字號:

LINUX作為一種新近崛起的操作系統(tǒng),由于其性能穩(wěn)定,源碼開放及價格方面的優(yōu)勢而逐漸被廣大用戶所接受?,F(xiàn)在Linux的主要用武之地在于服務器領域,但是,經過適當?shù)呐渲弥?,它還可以擔當互聯(lián)網(wǎng)的物理基石——路由器這一重要角色。
    路由器是通信子網(wǎng)中的通信節(jié)點,每個路由器都計算并維護一張路由表,并據(jù)此指導數(shù)據(jù)報前往路徑中的下一站,這便是所謂的路由。這樣,經過互聯(lián)網(wǎng)上所有路由器的通力合作,數(shù)據(jù)報就能夠沿著一條“”路徑到達目的地。在GNU軟件Zebra的協(xié)助下,我們可以將Linux機器打造成一臺功能完備的路由器,它能夠同時支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和BGP-4+等諸多TCP/IP協(xié)議?,F(xiàn)在我們首先了解一下 OSPF 和 BGP 協(xié)議的運行模式和基本原理,然后介紹 Zebra 的安裝配置方法,讓你的 Linux 機器變成支持 OSPF 與 BGP 的路由器。
    BGP/OSPF 概述
    如今,許多公司都建有多個網(wǎng)絡,如果這些網(wǎng)絡的類型不盡相同,則需要用路由器進行互聯(lián)。路由器是與兩個或兩個以上的網(wǎng)絡連接的計算機,它根據(jù)路由協(xié)議生成并維護一個路由表,并按照該路由表中的信息轉發(fā)包。這些路由器對公司內部的網(wǎng)絡結構了如指掌,知道將分組送到目的地的全部細節(jié),但對于其他公司的網(wǎng)絡結構并不了解。像這樣"在同一機構下管理的一系列路由器和網(wǎng)絡"被稱為自治系統(tǒng)(AS)。由不同機構掌管的自治系統(tǒng),可以采用不同的路由選擇算法;但同一自治系統(tǒng)內的所有路由器都使用同一路由協(xié)議,以便于自治系統(tǒng)內部各個路由器互換路由信息來維持相互的連通性。每一個自治系統(tǒng)都有一個16位的"自治系統(tǒng)(AS)編號"作為標志,就像 IP 地址一樣,它是由專門機構來分配的。
    自治系統(tǒng)內的路由器稱為"內部網(wǎng)關",所用的協(xié)議稱為"內部網(wǎng)關協(xié)議"。內部網(wǎng)關協(xié)議大體上分為兩類,一類是距離向量協(xié)議,如 RIP,EIGRP 協(xié)議;另一類是鏈路狀態(tài)協(xié)議如 OSPF 協(xié)議。鏈路狀態(tài)路由協(xié)議與距離向量協(xié)議的不同之處在于,采用鏈路狀態(tài)路由協(xié)議的路由器不是交換到達目的地的距離,而是維護一張網(wǎng)絡拓撲結構圖。然后用數(shù)據(jù)庫表示該圖,其中的表項對應網(wǎng)絡的一條鏈路。路由器根據(jù)數(shù)據(jù)庫的信息計算出"路由",由此指導包的轉發(fā)。當網(wǎng)絡拓撲結構發(fā)生變化時,只需將相應紀錄而非整個數(shù)據(jù)庫通知其他節(jié)點。各路由器做出相應修改并重新計算路由后,就可以繼續(xù)正常工作。
    因為"開放式最短路徑優(yōu)先協(xié)議"的文檔必須公開發(fā)表,所以它是"開放式的"(Open);又因為它采用"最短路徑優(yōu)先"(SPF)算法來計算一個節(jié)點到所有其它節(jié)點間的最短路徑,故名為 OSPF。OSPF 具有支持多重度量制式和多重路徑等諸多優(yōu)點,因此成為因特網(wǎng)上推薦使用的內部網(wǎng)關協(xié)議,RIP 卻由于自身的局限性而被打入冷宮?,F(xiàn)在,在性能上能夠與 OSPF 相匹敵的內部網(wǎng)關協(xié)議便是 EIGRP--Cisco 的一個專有協(xié)議,但 OSPF 的“開放”本身就是一個響亮的招牌,因為誰也不想受制于某家供應商。
    前面提到,自治系統(tǒng)內的路由器不必知道其他自治系統(tǒng)的內部結構細節(jié),從而有效地節(jié)約了路由器的內存和 CPU 時間,并提高了網(wǎng)絡帶寬的利用率。但是,如果想與其他公司(自治系統(tǒng))通信時該怎么辦呢?很簡單,我們可以在自治系統(tǒng)內指定一個與其他自治系統(tǒng)相連的路由器為"外部網(wǎng)關",通過它進入其他自治系統(tǒng)。該路由器使用的協(xié)議叫做"外部網(wǎng)關協(xié)議",如邊界網(wǎng)關協(xié)議(BGP)。相鄰的兩個網(wǎng)關必須首先互換"鄰機探測"報文,協(xié)商是否愿意成為"鄰機"。成為鄰機則意味著兩個自治系統(tǒng)同意中轉雙方的通信流。同意后,兩個鄰機互換"鄰機可達性報文",來監(jiān)督他們之間的鏈路的工作情況。接下來便是最重要的工作,用"網(wǎng)絡可達性報文"來交換通過各鄰機所能到達的網(wǎng)絡的信息,從而實現(xiàn)自治系統(tǒng)之間的連通性。在外部網(wǎng)關的眼里只由外部網(wǎng)關和連接他們的鏈路,如此以來,自治系統(tǒng)內的通信由內部網(wǎng)關處理,自治系統(tǒng)之間的通信交由外部網(wǎng)關處理--一個分級路由的景象已經展現(xiàn)在我們面前,實際上,因特網(wǎng)正是由大量自治系統(tǒng)組成的。
    建立一個高級路由器
    許多人對路由器感到比較陌生,事實上作為一個防火墻使用的 Linux 系統(tǒng)已經是一個路由器了,只不過還有點"簡陋"而已。然而,我們的目標是用 Linux 打造一個"高級"路由器,它必須能夠利用動態(tài)路由協(xié)議(上文提到的協(xié)議皆為動態(tài)路由協(xié)議)工作。這些協(xié)議能夠使路由器互換相關信息,從而共享穿越網(wǎng)絡時所用的那些路徑--路由。這一點對于大型網(wǎng)絡(比如 Internet)而言是"異常"重要的,因為此時再用靜態(tài)路由(也就是人工計算設置路由)是根本不現(xiàn)實的。
    舉例來說,即使在比較理想--即不考慮路由的變化的情況下,一個邊界網(wǎng)關協(xié)議(BGP)路由表也至少包含 100,000 條以上的表項。這時,手工建立這樣的靜態(tài)路由是難以忍受的。很明顯,即使我們的網(wǎng)絡小于 Internet--比如一個大型公司網(wǎng)絡,我們還是更加喜歡動態(tài)路由協(xié)議。
    外部網(wǎng)關協(xié)議 BGP 通常作為 Internet 的骨干使用,而其它的協(xié)議(如 OSPF)則適于小型的互連網(wǎng)絡。開放式最短路徑優(yōu)先(OSPF)協(xié)議是一個應用最廣的內部網(wǎng)關協(xié)議(IGP)。Zebra 是一個開放源代碼程序包,通過它你可以在 Linux 上運行 BGP 與 / 或 OSPF。
    安裝 Zebra
    你既可以從 Zebra.org 網(wǎng)站下載 Zebra 的最新源程序,也能從 Redhat 和 Debian 中獲得它,但不一定是最新版的。從源代碼中進行軟件安裝,你就會發(fā)現(xiàn)使用的是一些普通的安裝過程。簡介如下:
    ./configure
    make
    make install
    配置腳本會搜索系統(tǒng)上已經安裝的 IP 棧并且自動地設置成支持他們。當前,IP 棧很可能僅僅是指 IPv4,但是 IPv6 用戶也不用擔心,因為 Zebra 也會發(fā)現(xiàn)并且支持它。
    程序安裝之后,還可能必須在 /etc/services 中增加一些命令行。Zebra 的守護程序在他們自己的虛擬終端連接(VTY)下運行,所以你的系統(tǒng)必須知道這些虛擬終端連接。這里是你應該增加的一些連接∶
    zebrasrv 2600/tcp # zebra service
    zebra 2601/tcp # zebra vty
    ripd 2602/tcp # RIPd vty
    ripngd 2603/tcp # RIPngd vty
    ospfd 2604/tcp # OSPFd vty
    bgpd 2605/tcp # BGPd vty
    ospf6d 2606/tcp # OSPF6d vty