16 一月 2013

Linux Zebra/Quagga與Cisco設備動態路由交換

實作 Cisco 路由器與 Linux 的動態路由 文◎奇科電腦資深網路技術顧問 – Ben 哥

經由實際操作深入體驗Cisco路由的強大效能!

technum_02前言

西元2000年,Ben哥辭去在美國的高薪工作,帶著豐富的美國IT經驗以及報國熱忱,,毅然決然的返國發展;在當時,Ben哥已經有豐富的UNIX(Solaris)系統管理以及程式設計(PERL及C語言)的經驗,服務的公司居於全球前五百大企業,公司遍及全球三大洲 (美、歐、亞洲) 及數十個國家,其軟體開發的伺服器全是以UNIX為基礎的超大型機器 (每台動輒64顆以上CPU及數百GB的記憶體),在全球幾個重點國家共有將近一百台左右上述的機器設備,其規模之大,就算是各位耳熟能詳的全球大型公司也望其項背。

Ben哥五年前因工作需要,精研了許多LINUX HOWTO和進階的網路路由文件,用C語言寫過TCP/IP,也曾自己構思撰寫過網路通訊協定,對於網路自覺有相當程度的把握。某天有一家外商的網路公司找Ben哥去應徵工作,Ben哥便帶著滿滿的自信去面試,結果完全出乎Ben哥的意料之外,當時面試官給我76道題,Ben哥『只答對了15題』,其中還有幾題是用猜的,當場讓我羞愧的無以復加,當下立志要專心學習「真正」的網路。這次的事件告訴我也告訴各位讀者一個事實 – 「學海無涯」。

教授LINUX相關課程也有六年以上的經驗,從沒基礎到程度不錯的學員也看過不少,以目前的感覺來說,還是像上一期LINUX GUIDE中Ben哥所說的,系統工程師的網路知識,就網路工程師的角度而言,是相當的薄弱,其薄弱的程度就有如幼稚園對大學生般的差距,因此Ben哥在這幾期中,希望以LINUX結合CISCO路由器(Router)的方式,來幫讀者加強系統工程師對網路的路由(Routing)觀念。

實驗所需的設備如下:
  1. LINUX機器兩台 。
  2. CISCO 3500系列第二層交換機及2600系列路由器各乙台。
  3. 乙太網路線數條。
實驗所需LINUX軟體清單如下:
  1. Zebra (http://www.zebra.org/)路由通訊免費軟體
本技術文件讀者所需的基本知識如下:
  1. 簡單的OSI七層架構。
  2. IP網路、廣播位址,子網路遮罩的了解及計算。

technum_02何謂路由(Routing)

按思科系統股份有限公司 (Cisco Systems, Inc.)對於路由的定義記載在以下的URL。

http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/routing.htm#xtocid2

路由就是由甲電腦傳輸資料到乙電腦,以OSI第三層-網路層 Network Layer (例如:IP (Internet Protocol)) 為基準,來轉送封包 (Packet)的一種機制。

電腦與電腦之間的資料傳輸必須經由網路,而網路的構成可以以直接連接兩台電腦,亦或以一個或是一個以上的節點的方式來組成,以OSI七層的角度來分析,第一層-物理層(Physical Layer)及第二層-資料連結層(Data Link Layer),就是所謂連結的網路,到了OSI的第三層-網路層,就是網路工程師所謂的虛擬位址(Virtual Address),而MAC位址才是真正電腦位址(Physical Address),以目前的網路而言,虛擬位址全都是IP的天下,無庸置疑的,Cisco Systems, Inc.是全球公認對IP網路的最大推手。

IP在網路世界中扮演的的角色,就好像我們日常生活中每戶家庭的「住址」一樣,IP就是每台電腦的住址,有了住址,發件者者送出去的資料,才能根據地址到達收件者,收件者也才能根據資料上內存的資料來源位址」回傳資料給發件者。

因此經由路由 (Routing) 的機制,可以達成電腦之間資料互相交換的目的。

technum_03為什麼需要路由

如果沒有路由的話,我們的資料將無法有效率的被轉送。

ip-route-best-path-topology

我們可以從生活中的寄信流程,大概了解為什麼需要路由機制,試想,在台灣的我們,想要寄一封明信片給在紐約布魯克林的朋友,我們必須在明信片上填寫「對方的地址」以及「自己的地址」,投入郵筒即可,之後,郵局會根據明信片上「收件者地址」,經由不同的郵局轉送到紐約的布魯克林郵局,進而送到朋友的家。

那麼問題就來了,郵件到達郵局後,該郵局可以轉送的其它郵局,可是相當的多的,例如,我人在高雄左營,郵件到達左營郵局後,內部的作業必須決定下一個郵局該是高雄郵局、台南郵局、或是台南郵局呢?郵務系統本身就是一個大型的網路系統,每間郵局身負轉送郵件的使命,只要郵件一旦到達郵局,其目標就是迅速準確的把郵件送到下一個郵局,也就是郵件透過郵局的”路由”機制,順利有效的到達目的地。

網路的架構是由無數的特殊電腦相連而成的,這些特殊的電腦有一個固定的名稱叫 – 路由器,其實路由器就好像郵局的功能一般,以目的地位址(Destination IP)為根據來轉送封包給下一個路由器,而下一個路由器也根據目的地位址,來轉送封包到下一個路由器,反覆以上的步驟,封包就可以順利的到達目的地的位址。

technum_04淺談LINUX的路由

LINUX的路由表可以經由命令route –n輸出如下:

Linux-show-routing-table

在上面所顯示的路由表中,我們逐一來瞭解每一個重要字詞下所含範疇的確切涵義。

各領域名稱 目的
Kernel IP routing table 核心內的IP路由表。
Destination 目的地IP網路位址 (Network Address) 。
Gateway 閘道器IP位址。
Genmask Destination的子網路遮罩。
Flag 旗標。用來代表此路由的目前狀態。
Metric 需要經過幾個網路節點 (hops) 才能到達路由的目標網路位址。通常被路由daemon所使用,像是RIP等。
Ref 參考到此路由規則的數目。通常被路由daemon所使用,像是RIP等。
Use 有幾個轉送封包參考到此把路由規則。只有在route -C 或是route -F中才會顯示。
Iface Interface (介面) 。

每一橫行即代表一筆路由規則,綜合每筆規則即成一個路由表。對於系統工程師而言,大部分就只參考Destination、Gateway、Iface,頂多再加上Genmask一項。每當封包到達LINUX的機器後,會根據最長符合原理(Longest Match),對每一條路由規則進行比對 (Matching) 的動作,每一條路由規則都包含了轉送介面(Iface),用來決定封包被轉送到哪一個介面出去了。

technum_05路由的種類

一般來說,LINUX上的路由都屬於靜態路由 (Static route),靜態路由的產生,是系統管理員使用〝route〞的命令所加入的靜態路由規則,也就是藉手動輸入來加入路由規則。

相對於靜態路由,另一種當然稱之為動態路由 (Dynamic Route)。動態路由就是無須手動輸入路由規則,其路由規則是本機與不同機器彼此經由路由程式 (Routing daemon)相互交換路由規則而來。一般在網路界常聽到的RIPv1、RIPv2、IGRP、EIGRP、OSPF、ISIS、BGP等,都是路由的通訊協定。

可想而知,當我們的網路有數十或數百台以上的路由器時,如果我們使用靜態路由的話,就必須在每一台路由器上,輸入數百條的路由規則,這不僅曠日費時,而且往後要更動IP位址時,更有牽一髮而動全身的麻煩,因此,唯有靠動態路由的自動路由規則交換機制,才能有效率的交換數百條以上的路由規則。

動態路由通訊協定分為兩大類:Distance-Vector以及Link State,此兩類路由通訊協定的差別,暫不在此文件的作介紹,所以對於有興趣想瞭解的人,Ben哥建議不仿考慮去進修CISCO 的CCNA課程來實際了解網路路由的原理。

technum_06RIP(Routing Information Protocol)路由通訊協定簡介論

RIP是一個相當早期且屬於Distance-Vector類的路由通訊協定,以UDP的資料格式透過連接埠520來交換路由資料。RIP於西元1982年出現在美國加州柏克萊大學所發展的作業系統BSD(Berkerly System Distribution) 4.2版中,繼而慢慢的在網路及系統界流行起來。  

technum_07RIP(Routing Information Protocol)路由通訊協定簡介論

(注意:請先把LINUX機器上的iptables防火牆規則移除,使用命令iptables –F && iptables –X即可)

simple-smb-extranet-topology

在此Ben哥認為如果讀者們可以先多加研究以了解上面這張網路拓墣圖,如果讀者們能夠清楚要將哪些路由規則加在上圖的哪些設備上,使春嬌跟志明的電腦可以交換資料,對讀者在瞭解網路的原理會有實質的幫助,同時也對待會Ben要帶各位讀者作的實驗比較容易上手,也才能真正瞭解其中的奧妙。

這裡先給讀者們一個提示,所有設備在沒有額外的設定下,春嬌是不能夠ping志明的電腦的喔。

以下為各台實驗設備的IP位址設定及路由表內容:

Linux_NAT 機器:

linux-ifconfig-info-netstat-nr

簡單的NAT設定:

linux-iptables-nat-show

Linux_router 機器:

linux-ifconfig-grep-A1

Cisco_2621:

介面IP設定:

cisco-fastethernet-info

路由表:

Linux-show-ip-route-info

至於交換器的設定,Ben哥已經在上一期(11期)已有介紹過了,再這裡不再贅述。

接下來,請讀者們使用〝ping 〞這個指令來檢視各個設備之間的連線是否正常。如果連線一切正常的話,再請各位讀者試試看直接由Linux_NAT機器透過〝ping 〞指令 來檢查與Linux_router之間的連線狀況。
linux-ping-192.168.20.1

透過上圖所顯示的結果發現是ping不到的,這種狀況就是我們要的實驗環境。

technum_08準備LINUX的設備

在LINUX的機器上,有幾個相當有名的路由程式,包括routed、zebra、gated等,在這一次的技術文件中,Ben哥選用zebra為實驗中的路由程式,原因無它,只因業界在LINUX為基礎的網路設備上,大都使用zebra,套一句業界常講的話,zebra是經過業界淬練過的程式,絕對可以信賴;更重要的一點,zebra的介面與CISCO的IOS相似度極高,對於熟悉CISCO設備的工程師們,可是省下重新摸索的陣痛期呢。

Ben哥所使用的LINUX實驗平台為RedHat 9,所附zebra的RPM套件名稱為zebra-0.93b-1.i386.rpm,如果各位讀者的LINUX平台沒有zebra的話,請趕快安裝,否則無法進行下去後續的實驗。以zebra-0.93b-1.i386.rpm所包裝的檔案可以看出zebra所包含的組態檔以及執行檔各有哪些。
linux-install-zebra-quagga-package

Zebra的組態檔為/etc/zebra/zebra.conf,但是剛剛安裝的zebra.conf並沒有什麼內容,因此,我們可以使用位於 /usr/share/doc/zebra-0.93b/zebra.conf.sample的範例檔複製到 /etc/zebra的目錄中並更名為zebra.confg,最後成/etc/zebra/zebra.conf即可。另外,在/usr/share/doc/zebra-0.93b/目錄下還有一些sample檔,請讀者一併複製一份到/etc/zebra/目錄下,並且記得要把”.sample”的副檔名刪除即可。

Linux-show-zebra-quagga-configuration-files

接下來,我們便可以以root的身分,執行zebra路由程式然後檢查zebra是否在執行程序表中。

Linux-startup-zebra-quagga

如果讀者們看到以上的指令輸出結果,就表示執行成功了。

使用zebra的好處就是它那極為相似的CISCO IOS介面,zebra的組態檔為/etc/zebra/zebra.conf,並不像一般我們設定其他應用程式,需要使用編輯器(如Vi)來手動編輯其組態檔,zebra的組態檔可以透過zebra的控制介面來做更動。Zebra一但啟動之後,它會聽取連接埠2601的要求,因此,我們只要藉由〝telnet〞指令連線到本機 (localhost) 的2601連接埠,即可進入zebra的控制介面,登入時所需輸入的密碼就是zebra。

linux-enter-zebra-quagga-admin-interface

如果讀者們看到以上畫面,就表示已成功的進入zebra的命令介面,讀者們也可以在命令提示字元下輸入問號(?)或是命令〝list〞,就可以列出所有可使用的命令清單;如果要儲存設定值,只需在enable模式下鍵入命令〝write memory〞即可。

linux-zebra-quagga-commandline

下一步,我們就開始啟動動態路由,Zebra支援的路由通訊協定有:RIPv1、 RIPv2、RIPng、OSPF、OSPF6、BGP4+、以及BGP4-。以這篇技術文件而言,我們選定RIPv2為我們實驗的路由通訊協定,因此,在zebra的套件中有一個名為ripd的daemon,其組態檔為ripd.conf,在稍早前我們已經將ripd.conf.sample複製到/etc/zebra的目錄下,並更名為ripd.conf,ripd這支daemon同時支援RIPv1以及RIPv2,因此,我們只需啟動ripd即可以做實驗。

請注意在啟動ripd之前,必須先確認zebra的daemon也已經先啟動了;之後才可以啟動ripd,ripd本身也是一個daemon,其控制介面接收的連接埠為2602,登入密碼為zebra,enable模式則無須密碼輸入即可登入,然後使用命令 〝show running〞來看看設定值為何。

linux-zebra-quagga-ripd-commandline
linux-zebra-quagga-ripd-show-run

接下來,我們要啟動RIPv2必須遵循下列的步驟:

1) 啟動RIP version 2, 進入設定模式(輸入命令〝configure terminal〞),然後鍵入〝router rip〞命令即可啟動RIP,雖然在zebra中RIP的預設版本就是第二版,為了保險起見,建議再輸入命令〝version 2〞來指定執行RIPv2通訊協定。

linux-zebra-quagga-ripd-configuration

2) 指定RIP所需交換的路由網路,同上一步驟,先進入router rip的命令模式,然後使用命令〝network〞來指定RIP所需交換的網路位址和介面。

linux-zebra-quagga-ripd-commands
linux-zebra-quagga-ripd-setup

3) 設定成功,至此讀者們可以使用ripd中的debug模式來觀察RIP的各項行為,首先,請使用命令〝terminal monitor〞來啟動,debug訊息變會顯示在讀者目前所使用的終端機上,接著輸入命令〝debug rip events〞就可以看到RIP事件的運作狀況。

linux-zebra-quagga-ripd-debug

各位讀者在debug訊息中,應該會看到一個multicast位址224.0.0.9,很多路由通訊協定都有其規定的multicast位址來傳送路由訊息,在這裡,Ben哥也特別要提醒諸位,網路的運用不僅僅只有在設IP位址及路由而已,還有許多有趣的知識隱含其中啊。

練習題:我們剛剛已經完成Linux_NAT機器的設定,Ben哥最不喜歡學生和諸位只會打指令卻不去想想其中『為什麼』要這樣做,因此,請讀者自行設定Linux_router這台機器,感受一下獨立操作可能會遇到的問題和挫折。

technum_09CISCO 2621路由器的設定

相較於LINUX上RIP路由通訊協定的設定,CISCO路由器上的設定相對簡單許多,再者,經過剛剛讀者們在zebra上,所練習過的設定命令之後,相信對於CISCO的路由器設定就不會顯的陌生了其中過程簡單介紹如下:

1) 啟動RIP路由通訊協定。

cisco-router-console-rip-setup

2) 檢視路由表是否有以「R」為開頭的路由規則,如果有的話,則表示CISCO的2621已經成功的經由RIP路由通訊協定,與Linux_NAT機器交換路由資訊了。

cisco-router-console-show-ip-route

上圖,我們可以看出Cisco_2621已經透過RIP獲得了Linux_NAT機器上「10.1.32.0」這行路由規則 ,並且將之加入到CISCO 2621自己的路由表中。

technum_10實驗應有結果

現在,我們來看看在所有機器上的路由表,跟在第七節的實驗環境中所列出各機器的路由表有何差異。

首先在Linux_NAT的機器上:

Linux-zebra-quagga-show-ripd-routing-exchange

而在Linux_router的機器上:

linux-zebra-quagga-ripd-routing-exchange1

最後在CISCO的2621路由器上:

cisco-router-console-show-ip-route-ripd-exchange

我們可以清清楚楚的看到,所有機器上都有RIP所加入的路由規則(即為以R為開頭的路由規則),Linux_NAT因此也可以ping到本來不能ping到的192.168.20.1 及 192.168.30.1。

Linux-ping-192.168.20.1-test-route-converge

Linux_router也因此可以ping到Internet上的機器了。

Linux-ping-168.95.1.1-test-route-converge

春嬌與志明,終於可以互通訊息了!實驗完成。

technum_11結論

經過上面對於LINUX與CISCO設備的設定,我們成功的讓CISCO 2621路由器,可以正式的跟LINUX的機器作動態路由RIP的路由交換,省卻了手動設定靜態路由的麻煩了。

由以上的練習,讀者們不難看出LINUX高度且全面化的支援各種路由通訊協定,礙於篇幅有限,Ben哥此次還沒有機會帶大家實驗OSPF、BGP等進階的路由設定,不過要將這些進階的路由觀念及設定交代清楚,基本上也不是普通一般LINUX使用者在短時間內可以消化的了的。

Ben哥認為,LINUX本身就是一個相當完整的網路設備平台,在業界眾多產品中,經常可以看到以LINUX為平台而衍生出來的產品,這些新創立的公司(Startups)想出非常獨特的點子和市場區隔,藉由其強大的工程技術背景以最快的速度,創造出符合企業和客戶所需要的設備,LINUX平台的使用在Time to Market的層面上可說是功不可沒,使得為數不少的Startup公司,藉此成功的進入美國股票市場,短時間立即致富享受成功的榮耀和為數不少的股利。

因此,當Ben哥聽到對LINUX不了解或是對LINUX沒信心的人開口說:學LINUX有什麼用?Ben哥可以花半天以上的時間告訴他們,學完LINUX之後的工作有哪些、出路在哪裡,並告訴他們在這領域上有多少的應用和發展,未來的進修規劃應該怎麼安排才適當…等等,講都講不完;所以,喜歡LINUX或是對LINUX有興趣的您,請不要猶豫了,趕緊跨出你們的第一步,一步一腳印地去了解及操作LINUX,絕對有這麼一天,您也會成為LINUX高手,並憑此得到你想要的工作和職位。

feebackbtn