solstice 回復于:2003-06-25 15:40:38 |
第五章 路由
目標 學習本章之后,你將能夠掌握: l 定義以下的路由項目:路由驅動表,靜態路由,動態路由和默認路由 l 能描述in.routed和in.rdisc進程 l 描述路由信息協議(RIP)和路由發現協議(RDISC) l 描述 /etc/init.d/inetinit 的路由啟動腳本 l 能夠描述文件: /etc/defaultrouter, /etc/inet/networks和 /etc/gateways l 使用 route 和 netstat 命令 l 配置一個路由器 介紹 本章定義了路由和路由的主要組件如:路由驅動表,靜態和動態路由,和默認路由。同時也介紹了在Solaris 2.x系統中用來更新路由表及 in.routed和in.rdisc進程的RIP和RDISC協議. 本章還描述了路由的啟動腳本文件:/etc/init.d/inetinit ,/etc/defaultrouter, /etc/inet/networks,以及 route 和 netstat 命令。 路由術語 路由是一個主機用來從一個網絡向另一個網絡進行包或數據轉發的機制。主機間的相互通信,路由是關鍵。 ——路由驅動表 每個主機都維持一個內核路由表用來標識可以轉發包到一個指定的目標網絡的主機或設備。這種選擇正確網絡路徑的方式稱為路由驅動表。 ——靜太路由 靜態路由表中的路由是永久保存的,除非你手工刪除它。重新啟動系統時,將移除靜態路由入口,大多數主機通常的靜態入口是一個可以路由包到本地網絡連接的一個主機。 Ifconfig 用來配置接口,及使用網絡的靜態路由入口(能夠直接連接到你的本地網絡接口)來更新內核路由表。因此,在單一用戶模式下,一個主機可以直接路由到本地網絡。 靜態路由也可以手工增加到你的系統路由表中。這些靜態入口定義了那些不能直接連接,但可以通過其它主機或設備調用一個路由進行搜索網絡目標地址。 ——動態路由 動態路由指路由的環境不斷改變。動態路由通常用來標識那些不能直接進行連接但可以通過另一個路由器搜索到的其它網絡目標。目標路由器要能夠轉發或發送包。 動態路由是由腳本 /etc/rc2.d/S69inet 啟動的兩個運行級別為2的守護進程來執行的。進程 in.routed執行協議RIP,而進程in.rdisc執行協議RDISC。 動態路由的理論支持就是:路由器在網上廣播或通告他們已知的一切,其它主機用最新的和正確的信息來監聽這些定期發布和更新的路由表。這樣,路由表中就只留下有效的入口。路由器的監聽和廣播很相似。 ——Internet控制信息協議重定向(ICMP Redirects) ICMP用來處理控制和錯誤信息。在路由器或網關上的ICMP發送問題的報表給最初的源目標。 ICMP也包括一個用來測試一個目標是否可達的回顯請求或應答。命令 ping 使用ICMP協議。 當一個主機使用默認的路由時,ICMP一般要被重定向。如果路由器知道一個更有效的轉發包的路徑,它將使用最佳路由來重定向數據報,并向發送者報告正確的路由信息。 發送主機的路由表由新的信息來更新。這種路由方式的困難就是每一個ICMP都被重定向,在發送主機的路由表中有一個獨立的入口。這就有可能導致一個巨大的路由表。但,這也同時確保了包可以通過最短路徑到達所有可搜索的主機。 ——默認路由(Default Routing) 默認路由是一個入口表可以允許主機在任何時間定義默認的路由器。它是所有不直接聯接的工作站使用的靜態地址。默認的路由器必須是可靠的。不需要定義每一個可達的網絡。所有未直接連接的包目的就是到達默認路由器。 一個默認的路由器由 /etc/defaultrouter創建,包含了主機名或IP地址入口用來標識一個或多個路由器。重新啟動時,它能夠阻止 in.routed和 in.rdisc動態路由進程的啟動。 默認路由的優點: l /etc/defaultrouter文件能夠阻止啟動時的不必要的路由進程。 l 默認路由適合于只用一個路由器來搜索所有間接連接的目標。 l 在相對較小的路由表中只有一個單一的路由結果。 l 多個默認的路由器可以用來消除網絡中的失效點。 默認路由的缺點: l 默認的入口通常是當前的,即使當默認的路由已經關閉時。主機不能獲取其它的可能的路徑。 l 所有的系統必須配置文件:/etc/defaultrouter,這可以成為正在發展的大型網絡的一個問題。 l 如果一個主機有多個可以使用的路由器時,會發生ICMP重定向。 ——路由協議 ——RIP RIP是監聽路由信息更新的協議。進程in.routed執行RIP,它建立并維護動態路由信息。 ——關于進程 in.routed 當主機有多個以太端口存在時,進程 /usr/sbin/in.routed 觸發主機廣播路由信息。路由器每30秒向網絡廣播一次它的直接連接,但只有運行 in.routed的主機處理這些信息。當沒有其它路由器運行in.routed –q進程時,路由器運行in.routed進程。 RIP的優點: l 它是一個常用的,易執行的,而且穩定的協議 l 路由器每30秒進行一次路由表的更新 l 它使網絡管理員不需要再手工維護路由表,路由表的更新是動態的。 RIP的缺點: l 由于頻繁的網絡廣播,產生了大量的不必要的流量 l 路由信息經常是不可以改變的 l 它使監聽主機每30秒喚醒進程 in.routed l 在經過15個驛站后它使路徑變為不可達,一個驛站就是一個路由的通道。 ——命令格式: /usr/sbin/in.routed [ -gqsStv] [ logfile] in.routed進程在系統啟動時由 /etc/init.d/inetinit腳本執行。它用來更新路由表。在路由器上它默認每30秒廣播一次。 l 為了維持廣播,你可以用 –q參數用安靜模式(quiet)來啟動進程in.routed。但主機仍對其它所有廣播監聽。 # /usr/sbin/in.routed –q l 創建一個無路由廣播,把它本身當做一個路由器 # /usr/sbin/in.routed –s l 要記錄進程 in.routed的動作: # /usr/sbin/in.routed –v /var/adm/routelog 文件/var/adm/routelog不為空。 進程 in.routed讀取文件/etc/gateways 初始化和建立它的路由表。這是一個增加永久(無源)路由器的另一種方式。這也是增加一個或多個不是默認路由的永久路由的方法。在/etc/gateway文件中有以下字段: net <dest.net> gateway <router> metric <count> [passive] [active] 例如: net 128.50.0.0 gateway sword-r metric 1 passive RDISC RDISC是一個在多址地址224.0.0.1的路由器上監聽通告(advertise)信息的協議。RDISC通過進程 in.rdisc來執行。 ——關于in.rdisc進程 主機通過in.rdisc來監聽通告。路由器每600秒(10分鐘)來運行in.rdisc –r進程來通告它們的網絡路徑。本質上說,路由表定義了到每個通告路由器的路徑而不是到每個個別的網絡的路徑。 ——RDISC的優點: l 它所產生的進程比進程 in.routed要少 l 它使用了一個多址廣播 l 它產生了一個較小的路由表 l 如果一個路由失敗,其它的則可被利用 ——RDISC的缺點: l 10分鐘一個的通告周期有可能造成一個漏洞。漏洞是一個路由器的路徑在當前的路由表中的時間段,但路由器不是當前實際的路由器。非通告路由的默認生存時間是30分鐘(3次通告時間間隔) l 路由器必須通行RIP協議(in.routed)來向其它網絡進行學習。RDISC(in.rdisc)為主機提供了一個默認的路徑,不是在路由器之間。 l 如果一個網絡多于一個路由器,ICMP重定向將會發生。 ——關于進程 in.rdisc 命令格式: /usr/sbin/in.rdisc [-a] [-f] [-s] [send-address] [receive address] /usr/sbin/in.rdisc -r [ -p preference] [-T interval] \ [send-address] [receive address] 進程in.rdisc執行ICMP發現協議。第一個格式主要用于無路由主機,第二個格式用于路由主機。 l 在系統啟動時發送三個初始化請求信息來快速發現路由器。 # /usr/sbin/in.rdisc –s l 即使初始化請求失敗,也強迫主機運行 in.rdisc 進程。 # /usr/sbin/in.rdisc –f l 引發一個路由器通告。 # /usr/sbin/in.rdisc –r l 改變路由通告的時間間隔(默認為600秒) # /usr/sbin/in.rdisc –r –T 100 多宿主主機 —— 一個表現復雜的路由器 在默認狀態下,Solaris 2.x系統中,認為有多個網卡的機器就是路由器。不過,你可以改變路由器成為一個多宿主主機——有兩塊網卡但不運行路由協議或IP地址轉發的主機。以下的機器類型可以配置為多宿主主機。 l NFS服務器,特別是大型的數據中心,可以在一個大型的用戶池中綁定多個網卡。這些服務器不需要維護路由表。 l 數據庫服務器因為和NFS同樣的原因,可以綁定多個網卡。 l 防火墻網關可以提供私人網絡到公共網絡的連接如:Internet網的連接。系統管理員可以根據安全級別來設置防火墻。 當一個機器重新啟動時,啟動腳本文件:/etc/rc2.d/S69inet搜索當前的 /etc/notrouter文 件。如果這個文件存在,則啟動腳本不運行 in.routed –s或 in.routed –r,并且不會進行IP轉發。不管/etc/gateways文件是否存在,這個進程都將執行。 路由初始化 ——有關于/etc/init.d/inetinit 腳本: 如圖 啟動腳本產生下列動作: l 路由器的啟動 *in.routed –s 和或 *in.rdisc –r 除非 /etc/notrouter文件存在 l 主機方式 *如果文件 /etc/defaultrouter已經被創建(由 in.rdisc或in.routed啟動),則只維護靜態的默認入口。 或者 *繼續執行 in.rdisc –s 如果原始的兩個 in.rdisc –s 請求成功的話。 或者 *啟動 in.routed –q 。在沒有Solaris 2.x環境中的RDISC路由器的特殊情況下,進程 in.routed –q將會啟動。 ——文件 /etc/init.d/inetsvc 這個腳本用來初始化地址為 224.0.0.0的多路。這個腳本執行命令 route 來增加一條路徑到目的地。關于 route 命令本章將會繼續討論。 顯示路由表 ——命令 /usr/bin/netstat –r /usr/bin/netstat –r 命令用來顯示路由表信息。 例如: # netstat –r Routing Table: Destination Gateway Flags Ref Use Interface Localhost localhost UH 0 2272 lo0 128.50.1.0 bear U 3 562 le0 128.50.2.0 potato-r UG 10 1562 le0 128.50.3.0 skunk UG 3 562 le0 224.0.0.0 bear U 3 0 le0 # 文件中的字段意義如下: l Destination——目的網絡或主機。這個字段涉及到文件/etc/inet/networks或 /etc/inet/hosts l Gateway——發送或轉發包的主機 l Flags——這個路由的狀態。常用的選項一般有以下幾個: U——接口已經建立 H——目標是一個主機,不是一個網絡 G——當前路由到達一個特定主機所使用的是一個網關或路由器 D——這條路徑是一個由ICMP重定向的入口(通過重定向建立的路由) l Ref——當前共享同一個網絡IP地址的路由器數量 l Use——使用這個路由器發送包的數量,對于本地路由器來說,它也等同于接收包的數量 l Interface——用于目的地的接口設備 ——關于 /etc/inet/networks 文件 文件 /etc/inet/networks用來建立網絡名到網絡IP地址的連接。以下是文件 /etc/inet/networks的文件字段。 Network-name network-number nicknames 舉個例子來說: Fish-net 128.50.3.0 Veggie-net 128.50.2.0 Zoo-net 128.50.1.0 Animal-net l 在修改文件 /etc/inet/networks 后顯示路由表 # netstat –r Routing Table: Destination Gateway Flags Ref Use Interface Localhost localhost UH 0 2272 lo0 Zoo-net bear U 3 562 le0 Veggie-net potato-r UG 10 1562 le0 Fish-net skunk UG 3 562 le0 224.0.0.0 bear U 3 0 le0 # 文件與 /etc/inet/networks 也與命令 route相關,下一節繼續討論。 手工操作路由表 ——關于命令 route 命令格式: route [-fn] add | delete [host|net] destination \ [gateway[metric]] l 增加一個路由 # route add net 128.50.3.0 skunk 1 l 增加一個使用網絡名的路由 # route add net Animal-net potato-r 1 l 刪除一個路由 # route delete net 128.50.2.0 sword-r l 刷新路由表 # route –f l 為網絡224.0.0.0增加一個多址廣播路徑 # route add 224.0.0.0 ‘uname –n’ 0 注意:RIP協議自動選擇最短的路徑(lowest metric)。關于路徑的度量信息會被緩存保存在內核的路由表中。 注意:當刪除一個入口或刷新路由表的時候,進程 in.routed和 in.rdisc停止監聽廣播和通告。這將凍結當前的路由表。有些進程需要手工重新啟動來監聽RIP的廣播及RDISC的通告。 路由器的配置 ——配置路由的步驟 配置Solaris 2.x系統下的路由器的步驟如下: 1. 為安裝在機器上的網卡創建一個 /etc/hostname.interface 文件,并在這個文件中增加一包括這個接口主機名的行。 Hostname-for-interface 如:/etc/hostname.hme0 內容為: firewall 2. 修改文件 /etc/inet/hosts并增加一個新的IP地址和主機名 IP-Address hostname-for-interface 3. 執行重配置啟動并中止系統以增加第二個以太網卡 # touch /reconfigure # halt 4. 系統重啟動后,檢查新的網卡參數 # ifconfig –a ——驗證失敗后應該執行的步驟 1. 確認設備信息樹是否正確識別了第二塊網卡 # prtconf 檢查已經存在的設備名,并用新增加的以太網卡號為例。 2. 確認 ifconfig 命令看到了第二塊卡 # ifconfig –a 檢查新網卡的參數配置是否適當 3. 你是否配置了正確的設備名和文件名 # ls –l /etc/hostname.interface 檢查設備名的后綴是否正確。如,設備le1, instance #1 4. 在文件 /etc/inet/hosts中是否正確的配置了IP地址 # cat /etc/inet/hosts 多宿主主機的配置 ——多宿主主機的配置步驟 1. 為機器上已經安裝的每個網卡創建一個文件:/etc/hostname.interface,并在文件中增加與這個網卡的主機名相關的行: hostname-for-interface 2. 創建空文件:/etc/notrouter # touch /etc/notrouter 3. 執行一個重配置啟動,并為增加新網卡中止系統。 # touch /reconfigure # halt 4. 系統重啟動后,檢查新的網卡參數 # ifconfig –a 5. 檢查主機是否已經是一個雙宿主主機: # ps –ef | grep in.r root 119 1 0 Dec 29 ?0:01 /usr/sbin/rpcbind root 111 1 0 dec 29 ?0:01 /usr/sbin/in.rdisc root 340 33 1 19:59:55pts /2 0:00 qrep in.r 輸出不應該影響進程 in.routed –s或者 in.rdisc –r 總結 在本章中,你已經學到 l 定義路由驅動表,靜態路由,動態路由及默認路由 l 描述守護進程 in.routed 和 in.rdisc l 描述進程 RIP和RDISC l 描述路由啟動腳本:/etc/init.d/inetinit l 描述文件:/etc/defaultrouter, /etc/inet/networks, /etc/gateways和 /etc/notrouter l 使用命令:route 和 netstat l 會對路由和多宿主主機進行配置 |