耿雨嵐
摘 要 路由器是網(wǎng)絡(luò)中的核心設(shè)備,路由協(xié)議是網(wǎng)絡(luò)的基礎(chǔ)支撐。應(yīng)用linux系統(tǒng)的網(wǎng)絡(luò)協(xié)議棧,實現(xiàn)路由器的功能,對于學(xué)習(xí)和應(yīng)用路由交換技術(shù)有很大的幫助。文章首先介紹linux操作系統(tǒng)、靜態(tài)路由和動態(tài)路由技術(shù),然后分析linux內(nèi)核的路由轉(zhuǎn)發(fā),最后通過簡單網(wǎng)絡(luò)實例,說明路由配置實踐過程。
關(guān)鍵詞 linux系統(tǒng);路由選擇;路由轉(zhuǎn)發(fā);路由配置
中圖分類號 TN91 文獻(xiàn)標(biāo)識碼 A 文章編號 1674-6708(2018)225-0090-02
1 概述
Linux與其他操作系統(tǒng)相比,具有開放源碼、沒有版權(quán)、技術(shù)社區(qū)用戶多等特點,開放源碼使得用戶可以自由裁剪,靈活性高,功能強(qiáng)大,成本低。尤其系統(tǒng)中內(nèi)嵌網(wǎng)絡(luò)協(xié)議棧,經(jīng)過適當(dāng)?shù)呐渲镁涂蓪崿F(xiàn)路由器的功能。這些特點使得Linux 成為開發(fā)路由交換設(shè)備的理想開發(fā)平臺。
路由器工作在OSI參考模型中的網(wǎng)絡(luò)層,主要工作就是數(shù)據(jù)報文轉(zhuǎn)發(fā)和路由處理。數(shù)據(jù)報文轉(zhuǎn)發(fā)用來在子網(wǎng)間傳送數(shù)據(jù)報文,路由處理創(chuàng)建和維護(hù)路由表,實現(xiàn)路由選路。路由選路就是選擇到達(dá)目的地的最佳路徑,實現(xiàn)路由處理就需要利用路由協(xié)議和路由選擇算法。路由轉(zhuǎn)發(fā)負(fù)責(zé)在最佳路徑上傳遞IP分組。不同的路由協(xié)議,用于不同的應(yīng)用場合,路由選擇方式分為靜態(tài)路由和動態(tài)路由。
1.1 靜態(tài)路由
由網(wǎng)絡(luò)管理員采用手工配置路由數(shù)據(jù)的方式稱為靜態(tài)路由,路由器獲取非直連網(wǎng)段的路由信息,不需要自己選路。靜態(tài)路由減少控制的流量和開銷,提高安全保密性,不易產(chǎn)生環(huán)路,工作比較穩(wěn)定;配置簡單,對路由器性能要求不高;利用靜態(tài)路由可實現(xiàn)冗余備份和路由的精確控制。靜態(tài)路由適用于規(guī)模小、拓?fù)浣Y(jié)構(gòu)固定的網(wǎng)絡(luò)。當(dāng)網(wǎng)絡(luò)拓?fù)洚a(chǎn)生變化時,需要再次手工進(jìn)行配置和調(diào)整路由信息,不能自動生成路由表。
1.2 動態(tài)路由
動態(tài)路由是指由路由器通過動態(tài)路由協(xié)議,路由器之間相互通信,自動傳遞和配置路由信息。當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時,重新計算路由,并擴(kuò)散新的路由信息。通過路由協(xié)議擴(kuò)散后,其他路由器自動更新和維護(hù)路由信息。常用的動態(tài)路由協(xié)議包括路由信息協(xié)議(RIP)、開放最短路徑優(yōu)先協(xié)議(OSPF)和邊界網(wǎng)關(guān)協(xié)議(BGP)等。
通過動態(tài)路由協(xié)議,引發(fā)各路由器更新各自的路由表,自動地反映網(wǎng)絡(luò)拓?fù)渥兓?,不需要網(wǎng)絡(luò)管理員手工干預(yù),適用于規(guī)模大、拓?fù)鋸?fù)雜的網(wǎng)絡(luò)。同時帶來一些缺點,因為計算量大占用了CPU資源,動態(tài)交互增加了網(wǎng)絡(luò)負(fù)擔(dān)。
1.3 試驗路由選擇分析
通過建立真實的試驗網(wǎng)絡(luò)的方式對網(wǎng)絡(luò)行為進(jìn)行研究,是比較全面準(zhǔn)確的方法。但由于成本和空間的限制,采用模擬網(wǎng)絡(luò)的方法也比較常用。模擬網(wǎng)絡(luò)中的路由包括動態(tài)路由和靜態(tài)路由,動態(tài)路由需要加載運行路由協(xié)議軟件(比如RIP、OSPF等),對于現(xiàn)有的試驗環(huán)境有困難。同時由于靜態(tài)路由模擬效率高,對于學(xué)習(xí)提高對于路由的理解有很大的幫助。綜合考慮,本試驗采用linux系統(tǒng)計算機(jī)模擬真實路由設(shè)備的方法進(jìn)行試驗,主要集中在靜態(tài)路由的應(yīng)用。
2 linux系統(tǒng)內(nèi)核的路由轉(zhuǎn)發(fā)
Linux操作系統(tǒng)嵌入了TCP/IP協(xié)議棧,協(xié)議軟件具有路由轉(zhuǎn)發(fā)功能。路由轉(zhuǎn)發(fā)依賴作為路由器的主機(jī)中安裝多塊網(wǎng)卡,當(dāng)某一塊網(wǎng)卡接收到數(shù)據(jù)包后,系統(tǒng)內(nèi)核會根據(jù)數(shù)據(jù)包的目的IP地址,查詢路由表,然后根據(jù)查詢結(jié)果將數(shù)據(jù)包發(fā)送到另外一塊網(wǎng)卡,最后通過此網(wǎng)卡把數(shù)據(jù)包發(fā)送出去。此主機(jī)的處理過程就是路由器完成的核心功能。
通過修改Linux系統(tǒng)內(nèi)核參數(shù)ip_forward的方式實現(xiàn)路由功能,系統(tǒng)使用sysctl命令配置與顯示在/proc/sys 目錄中的內(nèi)核參數(shù)。首先在命令行輸入:cat /proc/sys/net/ipv4/ip_forwad,檢查Linux內(nèi)核是不是開啟IP轉(zhuǎn)發(fā)功能。如果結(jié)果為1,表明路由轉(zhuǎn)發(fā)功能已經(jīng)開啟;如果結(jié)果為0,表明沒有開啟。出于安全考慮,Linux內(nèi)核默認(rèn)是禁止數(shù)據(jù)包路由轉(zhuǎn)發(fā)的。在linux系統(tǒng)中,有臨時和永久兩種方法啟用轉(zhuǎn)發(fā)功能。
臨時啟用:此種方法只對當(dāng)前會話起作用,系統(tǒng)重啟后不再啟用。臨時開啟的命令格式:sysctl–w net.ipv4.ip_forward=1。
永久啟用:此種永久性的啟用IP轉(zhuǎn)發(fā)功能,通過更改配置文件/etc/sysctl.conf中的語句行“net.ipv4.ip_forward=0”,修改為“net.ipv4.ip_ forward=1”,保存配置文件后執(zhí)行命令sysctl–p/etc/sysctl.conf,配置便立即啟用。
3 路由配置應(yīng)用
Linux系統(tǒng)主機(jī)必須同時安裝兩塊以上的網(wǎng)卡才能實現(xiàn)路由器功能。網(wǎng)絡(luò)由多個主機(jī)和路由器組成,主機(jī)之間通信通過多個路由器,經(jīng)過的每個路由器需知道所有網(wǎng)絡(luò)的信息。當(dāng)接收到數(shù)據(jù)包時,查詢路由表項將數(shù)據(jù)包轉(zhuǎn)發(fā)給下一跳路由器,最后發(fā)送到目的主機(jī)。以靜態(tài)路由方式配置如圖1所示的網(wǎng)絡(luò)為例,說明配置的過程。
Linux系統(tǒng)配置靜態(tài)路由功能方法有兩種:臨時和永久起效。臨時起效方法使用命令:route add[-net|-host] 目的地[netmask子網(wǎng)掩碼][gw網(wǎng)關(guān)][metric N][[dev]接口]。如圖1所示的網(wǎng)絡(luò)連接中,在作為路由器的routerA的 Linux 主機(jī)中,添加網(wǎng)絡(luò)3的路由表項,執(zhí)行命令:route add –net 193.168.1.0/24 gw 192.168.0.1。在路由器重啟時會重新初始化路由表,在Linux系統(tǒng)中用上述命令方式添加的路由數(shù)據(jù)丟失。臨時生效的方法,一般適用于臨時做個試驗,驗證一下添加的路由是否起作用。
永久生效的方法是修改靜態(tài)路由配置文件。本文采用的試驗以RHEL 6.0系統(tǒng)為例,描述修改配置文件過程。RHEL 6.0系統(tǒng)的靜態(tài)路由配置,保存在文件/etc/sysconfig/ network-scripts/route-interface中(interface 指網(wǎng)絡(luò)適配器)。配置參數(shù)的命令格式:IP地址/掩碼長度 via 網(wǎng)關(guān)地址dev網(wǎng)絡(luò)接口。
配置步驟如下:
1)分別在路由器A和路由器B的兩個網(wǎng)絡(luò)接口上設(shè)置如圖所示的IP地址,不需要配置默認(rèn)網(wǎng)關(guān);
2)分別在路由器A和路由器B上使用systcl命令,啟用linux內(nèi)核的IP包轉(zhuǎn)發(fā)功能;
3)在路由器A上網(wǎng)絡(luò)1連接eth0接口,在配置文件/etc/sysconfig/network-scripts/ route-eth0 中添加內(nèi)容:193.168.1.0/24via 10.10.10.254 deveth1;
4)在路由器B上網(wǎng)絡(luò)3連接eth1接口,在配置文件/etc/sysconfig/network-scripts/routeeth1中添加內(nèi)容:192.168.0.0/24via 10.10.10.1 deveth0;
5)執(zhí)行命令:service network restart,使添加的靜態(tài)路由起作用;
6)將網(wǎng)絡(luò)1中的計算機(jī) 1的默認(rèn)網(wǎng)關(guān)設(shè)置為連接路由器A接口的IP 地址192.168.0.1;將網(wǎng)絡(luò)3中的計算機(jī)2的默認(rèn)網(wǎng)關(guān)設(shè)置為連接路由器B接口的IP 地址193.168.1.1。
通過以上步驟完成配置網(wǎng)絡(luò)。網(wǎng)絡(luò)配置完成后,通過ping 命令測試網(wǎng)絡(luò)的連通性和路由配置是否正確。
參考文獻(xiàn)
[1]陳博.Linux實用教程[M].北京:人民郵電出版社,2008.
[2]布萊克.IP路由協(xié)議[M].北京:電子工業(yè)出版社,2000.
[3]盛勤.基于Linux的路由器操作系統(tǒng)及E1接口軟件設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2015.