1. 關于 OpenWrt
OpenWrt是一個高度子產品化、高度自動化的嵌入式Linux系統,擁有強大的網絡元件,常常被用于工控裝置、電話、小型機器人、智能家居、路由器以及VOIP裝置中。
OpenWrt支援各種處理器架構,無論是對ARM,X86,PowerPC或者MIPS都有很好的支援。其多達3000多種軟體包,囊括從工具鍊(toolchain),到核心(linux kernel),到軟體包(packages),再到根檔案系統(rootfs)整個體系,使得使用者隻需簡單的一個make指令即可友善快速地定制一個具有特定功能的嵌入式系統來制作固件。其子產品化設計也可以友善的移植各類功能到OpenWrt下,加快開發速度。
2. 為什麼使用 OpenWrt
因為 Linux 為我們提供了很多免費的軟體,我們可以用一個很低的價錢購買像WRT54G的硬體,做成一個小型的 Linux 系統,現在OpenWrt已經提供了100多個已編譯好的軟體,而且數量還在不斷增加,而 OpenWrt SDK 更簡化了開發軟體的工序
3. OpenWrt 的曆史
OpenWrt 項目由 2004 年 1 月開始, 第一個版本是基于 Linksys 提供的 GPL 源碼及 uclibc 中的 buildroot 項目, 這個版本稱為 “stable” 版, 在網上至今仍有很多項目使用這個版本, 較為有名 Freifunk-Firmware 和 [email protected].
到了2005年初, 一些新的開發人員加入了這項目, 幾個月後他們釋出了第一個 “experimental” 版本, 這和以前版本不同的是, 這版本差不多完全舍棄了 Linksys 的 GPL 源碼, 使用了 buildroot2 作為核心技術, 将 OpenWrt 完全子產品化,OpenWrt 使用 Linux 正式發行的核心源碼(2.4.30),加上了一些更新檔和網絡驅動,開發隊伍更為OpenWrt添加了許多免費的工具,你可以直拉把Image寫入 Flash (mtd)裡面,設定無線功能和VLAN交換功能,這個版本名為“White Russian”,而1.0版本大概于2005年底公布。
4. 為什麼是OpenWrt?
Linksys WRT54G 是一個幾乎在任何電腦商場都可以買到的無線路由器, 隻需拿出4-5百元, 你就可以擁有一個配備 200MHz CPU, 4MB Flash, 16MB Ram的嵌入式開發系統, 而且在你完成你的開發後, 你還可以應用在生活上, 一點都不浪費。由于它使用 Linux 作為作業系統, 并公開源碼及驅動, 在網絡上已有很多為它而設計的開源項目, 包括HyperWRT, OpenWRT, SIP Phone等等, 實在是學習嵌入式 Linux 的入門級首選。為什麼學習OpenWRT?你不需要對 MIPS 處理器有很深入的了解, 也不用懂得如何去設計一個 MIPS 處理器專用的核心, 因為這些在網上已有人為你做好, 你隻需懂得如何安裝和使用就行了, 不過你也可以去http://www.linux-mips.org 找到相關的資料。如果你對 Linux 系統有一定的認識, 并想學習或接觸嵌入式 Linux 的話, OpenWRT很适合你, 你将學會一些無線路由器的基本知識, 以及一般嵌入式 Linux 的開發過程, 你會發現無論是 ARM, PowerPC 或 MIPS 的處理器, 都必需經過以下的開發過程:1. 建立 Linux 交叉編譯環境2. 建立 Bootloader3. 移植 Linux 核心4. 建立 Rootfs (根檔案系統)5. 安裝驅動程式6. 安裝軟體7. 調試随着 Linux 的成熟, 大量不同的處理器核心和應用軟體相繼出現, 當你熟悉這些嵚入式 Linux 的基本開發流程後, 你不再局限于 MIPS 處理器和無線路由器, 你可以嘗試在其它處理器, 或者非無線路由器的系統移植嵌入式 Linux, 定制合适自己的應用軟體, 并建立一個完整的嵌入式産品。
嘗試了解下OpenWRT:
社群:https://forum.openwrt.org/index.php 或者中文版的:http://www.openwrt.org.cn/bbs/forum.php
首頁:https://openwrt.org/ 或者中文版的:https://dev.openwrt.org.cn/
轉載自:http://blog.csdn.net/wavemcu/article/details/8544156
Linux作為一種新近崛起的作業系統,由于其性能穩定,源碼開放及價格方面的優勢而逐漸被廣大使用者所接受。現在Linux的主要用武之地在于伺服器領域,但是,經過适當的配置之後,它還可以擔當網際網路的實體基石——路由器這一重要角色。
路由器是通信子網中的通信節點,每個路由器都計算并維護一張路由表,并據此指導資料報前往最佳路徑中的下一站,這便是所謂的路由。這樣,經過網際網路上所有路由器的通力合作,資料報就能夠沿着一條“最佳”路徑到達目的地。在GNU軟體Zebra的協助下,我們可以将Linux機器打造成一台功能完備的路由器,它能夠同時支援RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和BGP-4+等諸多TCP/IP協定。現在我們首先了解一下 OSPF 和 BGP 協定的運作模式和基本原理,然後介紹 Zebra 的安裝配置方法,讓你的 Linux 機器變成支援 OSPF 與 BGP 的路由器。
BGP/OSPF 概述
如今,許多公司都建有多個網絡,如果這些網絡的類型不盡相同,則需要用路由器進行互聯。路由器是與兩個或兩個以上的網絡連接配接的計算機,它根據路由協定生成并維護一個路由表,并按照該路由表中的資訊轉發包。這些路由器對公司内部的網絡結構了如指掌,知道将分組送到目的地的全部細節,但對于其他公司的網絡結構并不了解。像這樣"在同一機構下管理的一系列路由器和網絡"被稱為自治系統(AS)。由不同機構掌管的自治系統,可以采用不同的路由選擇算法;但同一自治系統内的所有路由器都使用同一路由協定,以便于自治系統内部各個路由器互換路由資訊來維持互相的連通性。每一個自治系統都有一個16位的"自治系統(AS)編号"作為标志,就像 IP 位址一樣,它是由專門機構來配置設定的。
自治系統内的路由器稱為"内部網關",所用的協定稱為"内部網關協定"。内部網關協定大體上分為兩類,一類是距離向量協定,如 RIP,EIGRP 協定;另一類是鍊路狀态協定如 OSPF 協定。鍊路狀态路由協定與距離向量協定的不同之處在于,采用鍊路狀态路由協定的路由器不是交換到達目的地的距離,而是維護一張網絡拓撲結構圖。然後用資料庫表示該圖,其中的表項對應網絡的一條鍊路。路由器根據資料庫的資訊計算出"最佳路由",由此指導包的轉發。當網絡拓撲結構發生變化時,隻需将相應紀錄而非整個資料庫通知其他節點。各路由器做出相應修改并重新計算路由後,就可以繼續正常工作。
因為"開放式最短路徑優先協定"的文檔必須公開發表,是以它是"開放式的"(Open);又因為它采用"最短路徑優先"(SPF)算法來計算一個節點到所有其它節點間的最短路徑,故名為 OSPF。OSPF 具有支援多重度量制式和多重路徑等諸多優點,是以成為網際網路上推薦使用的内部網關協定,RIP 卻由于自身的局限性而被打入冷宮。現在,在性能上唯一能夠與 OSPF 相匹敵的内部網關協定便是 EIGRP--Cisco 的一個專有協定,但 OSPF 的“開放”本身就是一個響亮的招牌,因為誰也不想受制于某家供應商。
前面提到,自治系統内的路由器不必知道其他自治系統的内部結構細節,進而有效地節約了路由器的記憶體和 CPU 時間,并提高了網絡帶寬的使用率。但是,如果想與其他公司(自治系統)通信時該怎麼辦呢?很簡單,我們可以在自治系統内指定一個與其他自治系統相連的路由器為"外部網關",通過它進入其他自治系統。該路由器使用的協定叫做"外部網關協定",如邊界網關協定(BGP)。相鄰的兩個網關必須首先互換"鄰機探測"封包,協商是否願意成為"鄰機"。成為鄰機則意味着兩個自治系統同意中轉雙方的通信流。同意後,兩個鄰機互換"鄰機可達性封包",來監督他們之間的鍊路的工作情況。接下來便是最重要的工作,用"網絡可達性封包"來交換通過各鄰機所能到達的網絡的資訊,進而實作自治系統之間的連通性。在外部網關的眼裡隻由外部網關和連接配接他們的鍊路,如此以來,自治系統内的通信由内部網關處理,自治系統之間的通信交由外部網關處理--一個分級路由的景象已經展現在我們面前,實際上,網際網路正是由大量自治系統組成的。
建立一個進階路由器
許多人對路由器感到比較陌生,事實上作為一個防火牆使用的 Linux 系統已經是一個路由器了,隻不過還有點"簡陋"而已。然而,我們的目标是用 Linux 打造一個"進階"路由器,它必須能夠利用動态路由協定(上文提到的協定皆為動态路由協定)工作。這些協定能夠使路由器互換相關資訊,進而共享穿越網絡時所用的那些路徑--路由。這一點對于大型網絡(比如 Internet)而言是"異常"重要的,因為此時再用靜态路由(也就是人工計算設定路由)是根本不現實的。
舉例來說,即使在比較理想--即不考慮路由的變化的情況下,一個邊界網關協定(BGP)路由表也至少包含 100,000 條以上的表項。這時,手工建立這樣的靜态路由是難以忍受的。很明顯,即使我們的網絡小于 Internet--比如一個大型公司網絡,我們還是更加喜歡動态路由協定。
外部網關協定 BGP 通常作為 Internet 的骨幹使用,而其它的協定(如 OSPF)則适于小型的互連網絡。開放式最短路徑優先(OSPF)協定是一個應用最廣的内部網關協定(IGP)。Zebra 是一個開放源代碼程式包,通過它你可以在 Linux 上運作 BGP 與 / 或 OSPF。
安裝 Zebra
你既可以從 Zebra.org 網站下載下傳 Zebra 的最新源程式,也能從 Redhat 和 Debian 中獲得它,但不一定是最新版的。從源代碼中進行軟體安裝,你就會發現使用的是一些普通的安裝過程。簡介如下:
./configure
make
make install
配置腳本會搜尋系統上已經安裝的 IP 棧并且自動地設定成支援他們。目前,IP 棧很可能僅僅是指 IPv4,但是 IPv6 使用者也不用擔心,因為 Zebra 也會發現并且支援它。
程式安裝之後,還可能必須在 /etc/services 中增加一些指令行。Zebra 的守護程式在他們自己的虛拟終端連接配接(VTY)下運作,是以你的系統必須知道這些虛拟終端連接配接。這裡是你應該增加的一些連接配接∶
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
配置 Zebra
如果你已經熟悉 Cisco IOS,那你就能在短時間内掌握 Zebra,因為你會發現兩者極為相似。Zebra 的每個守護程式使用一個單獨的 VTY,這些 VTY 可以通過一個遠端登入會話進行動态配置。是以,如果你需要設定 OSPF,簡單地遠端登入到該 Linux 上 2604 端口;為了修改核心的路由表或設定路由協定間的再分發,你可以遠端登入到端口 2601,該 Zebra 守護程式充當核心管理器,管理其他的守護程式和系統本身之間的通信。
現在介紹如何在一個伺服器上建立和運作 OSPF 和 BGP。Zebra 的守護程式運用純文字檔案儲存它們的配置。對于 OSPF/BGP 路由器,将用到三個檔案∶zebra.conf、ospfd.conf 和 bgpd.conf。舉例來說,zebra.conf 檔案可能會是這樣:
! Zebra configuration saved from vty
! 2002/02/28 01:46:12
!
hostname LinuxRouter
password zebra
enable password z3bRa
log file /var/log/zebra/zebra.log
!
interface eth0
description Interface to External Network
ip address 10.0.0.1/24
!
interface eth1
description Interface to Internal Network
ip address 192.168.66.1/24
這裡的感歎号充當注解辨別或分隔符。盡管存在大量不同的網絡接口類型(Ethernet、ISDN 等等),
但隻要是 Linux 核心能夠辨認的網絡接口類型,Zebra 都可以使用。子網路遮罩都帶有網絡位的位數(例如/24),
預設掩碼則不然(比如 255.255.255.0)。注意存在兩個密碼,一個用于使用者模式而另一個用于特權模式。
這不僅有利于向非管理者提供通路權限,而且對于建立路由伺服器或者路由探測鏡也是非常重要的。所有 BGP
管理者都知道,這些探測鏡是調試路由問題的關鍵,因為他們能夠使你就象從一個外部 AS( AS代表自治系統)
一樣檢視路由。 BGP 路由需要用到 AS 編号,AS 編号是一些由 ARIN (美國網際網路絡号碼注冊機構)控制的注冊号碼。
下一步将啟動一些必要的程式。用以下指令完成∶
/usr/sbin/zebra -dk
/usr/sbin/ospfd -d
/usr/sbin/bgpd -d
第一個指令,啟動 zebra,該守護程式實際上用來更新核心的路由表。-dk 告訴該程式作為一個守護程式運作(d),
它的大部分時間在背景運作。k 是另外的一個選項,告訴 Zebra 維護所有已配置的路由。它用來保證在你測試 Zebra
的時候不會意外地删除路由表。一般情況下,設定路由和接口,需要将 ifconfig 和 route 這兩個指令配合使用。
而 Zebra 完全可以替代這種路由管理方式,使用起來更為簡潔。
設定OSPF
至此,基本的服務已經具備,現在讓我們 Telnet 到本地機器的 2604 端口,開始配置 OSPF。為進入特權模式,
鍵入 enable (正如在Cisco IOS 中一樣),然後鍵入特權模式密碼。接下來,用 configuration terminal
指令切換到配置模式。值得一提的是 Zebra 也能接受指令縮寫形式,這與 Cisco 極為相似,如 configuration
terminal 可以簡寫為 config t,這大大縮短了輸入時間,使用起來更為友善。另外,如果輸入 list 和 ?,
它将顯示一個目前可用指令的清單,并附有一些簡略解釋。除此之外,還可以鍵入 tab 用于指令的自動完成。這就是說,
如果你想鍵入指令 clock,隻要鍵入前兩個字母 cl 然後按 tab 鍵,機器就會自動"補全"這條指令--前提是你鍵入的字
符足以唯一地确定這條指令。這是一個很好的功能,尤其是當你習慣于這種用法時。
接下來,我們還需要告訴守護程式将通過 OSPF 廣播哪些網絡以及相關的域(area)。OSPF 的可伸縮性允許它支援多個域。
鍵入 router ospf 開始配置 OSPF,然後鍵入 network 192.168.66.0/24 area 0。這告訴路由器,
我們将使用 OSPF 廣播一個子網路遮罩為 255.255.255.0 的 192.168.66.0 網絡。
在本例中,我們讓 eth0 接口變成一個被動(passive)接口,以便使它不能發送路由更新。這對于實驗是非常重要的,
因為在那個方向上的其他的路由器可能監聽到發送的路由更新,将接口變成一個被動(passive)接口,
進而有效的避免擾亂網絡的正常運作。為此,鍵入指令 passive - interface eth0。
如果打算将此路由器作為工作路由器使用時,就沒有這個必要了。一旦你完成修改,用 end 指令從配置模式中退出,
然後用 write file 指令儲存。這裡是一個快照:
labrat:~# telnet 0 2604
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Hello, this is zebra (version 0.84b)
Copyright 1996-2000 Kunihiro Ishiguro
User Access Verification
Password:
ospfd> enable
Password:
ospfd# configure terminal
ospfd(config)# router ospf
ospfd(config-router)# network 192.168.66.0/24 area 0
ospfd(config-router)# passive-interface eth0
ospfd(config-router)# end
ospfd# write file
Configuration saved to /etc/zebra/ospfd.conf
請記住,為了讓 OSPF 或 BGP 在某接口上工作,那麼該接口必須處于"運作"狀态。為手工運作一個接口,登入到端口 2601
并且在該接口上執行 no shut 指令。
建立 BGP
BGP 與 OSPF 的配置大緻相同。開始,打開一個遠端登入會話到端口 2605。之後執行 configure terminal,
輸入 router bgp 進入 BGP 配置模式。如前所述,BGP 使用 AS 編号建立鄰機關系并路由通信流。
在我們的試驗中,我們将使用一個範圍在 64512 到 65534 之間的私有 AS 号碼(換句話說,該号碼旨在機構内部有效,
而在網際網路上無效)。用 network 指令設定由 BGP 廣播的那些網絡,如 network 192.168.66.0/24.。
與 OSPF 不同的是,BGP 鄰機必須靜态指定。如同下述∶neighbor remote-as 。
這裡是一個範例:
labrat:~# telnet 0 2605
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Hello, this is zebra (version 0.84b)
Copyright 1996-2000 Kunihiro Ishiguro
User Access Verification
Password:
bgpd> enable
Password:
bgpd# configure terminal
bgpd(config)# router bgp 65530
bgpd(config-router)# network 192.168.66.0/24
bgpd(config-router)# neighbor 10.0.0.5 remote-as 65531
bgpd(config-router)# end
bgpd# write file
Configuration saved to /etc/zebra/bgpd.conf
對于 OSPF 和 BGP,有大量選項可用,限于篇幅不能在此一一介紹。對于每個協定,我建議在實際使用之前,不妨先研
究一番。為此,可以參考 GNU Zebra 文檔,它會給你提供許多幫助。
結束語
在網絡中,路由通信流的方法有若幹種。就路由器而論,雖然有用各種硬體可用,但是費用較高--人們自然就會想到運作
一個用 Linux 系統構築的功能豐富的路由器作為代替。Zebra 路由守護程式已經使這一切變為現實。因為支援 IPv4、
IPv6 和其它各式各樣的協定,是以 Zebra 能夠滿足我們所有的路由需求。它還有一個好處就是,因為 Cisco IOS 和
Zabra 極為相似,如果你以前在 Cisco IOS 環境中工作,可以輕松的過渡到 Zebra 系統;同時,使用 Zebra 也能
讓你積累起豐富的類似于使用 Cisco IOS 路由器的經驗和知識。