Quagga 路由軟體學習(by quqi99)
Quagga 路由軟體學習(by quqi99)
作者:張華 發表於:2013-07-07
版權宣告:可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本版權宣告
http://blog.csdn.net/quqi99 )
Quagga是一個開源的基於Zebra實現了RIP, OSPF, BGP的動態路由軟體。它提供的CLI命令和Cisco IOS類似。 1 安裝 再下載原始碼,解壓後執行下列命令: sudo yum install readline-devel #開啟vty功能需要readline包 ./configure --enable-vtysh --enable-user=root --enable-group=root –enable-vty-group=root --sysconfdir=/etc/quagga –libdir=/lib make && sudo make install 如果不是用root使用者,如使用quagga使用者,則還需要: sudo useradd -r -d /usr/local/sbin -s /sbin/nologin quagga sudo mkdir /var/run/quagga sudo chown quagga /var/run/quagga sudo chgrp quagga /var/run/quagga 它有下列程式,根據需要啟動: zebra: 路由介面宣告和靜態路由 bgpd: 支援BGP ospfd: 支援OSPF ospf6d: 支援IPv6 OSPF ripd: 支援RIP v2 ripngd: 支援RIP IPv6 2 配置並啟動Zemba軟路由 建立配置檔案: sudo mv /etc/guagga/zebra.conf.sample /etc/guagga/zebra.conf 在/etc/hosts檔案中新增一條記錄:192.168.99.100 Router 執行命令sudo zemba -d啟動zemba服務. 上面sudo zemba -d命令只是將我們的“路由器”(軟路由)執行起來了(也就是轉發那塊),但是它還無法正常工作,現在還要給它配置路由表。路由表可以手工配置,也可以執行動態路由協議,vk rip, ospf實現自動配置。 我們先看看如何手工配置路由,即執行“telnet localhost 2601”命令進行類似ciso IOS的配置路由配置介面。 Router> en #進入特權模式 Password: Router# config t Router(config)# access-list Add an access list entry banner Set banner string debug Debugging functions (see also 'undebug') enable Modify enable password parameters end End current mode and change to enable mode. exit Exit current mode and down to previous mode help Description of the interactive help system hostname Set system's network name interface Select an interface to configure ip IP information ipv6 IPv6 information line Configure a terminal line list Print command list log Logging control no Negate a command or set its defaults password Assign the terminal connection password quit Exit current mode and down to previous mode route-map Create route-map or enter route-map command mode router-id Manually set the router-id service Set up miscellaneous service show Show running system information table Configure target kernel routing table write Write running configuration to memory, network, or terminal #給介面配置IP地址: Router(config)# interface eth0 Router(config-if)# ip address 192.168.2.1/24 配置一個路由器的常用方法: Router(config)# hostname R1 R1(config)# int em1 R1(config-if)# ip address 172.18.186.107/23 R1(config-if)# no shutdown R1(config-if)# exit 3 開啟RIP/OSPF內部動態路由協議 sudo mv /etc/guagga/ripd.conf.sample /etc/guagga/ripd.conf sudo ripd -d 例子:三臺虛機,一臺做路由,兩臺做客戶端 路由器所在的Linux分別有兩個網路卡,eth0:192.168.1.1和eth1:192.168.10.1。 客戶端A 所在網段為192.168.1.0/24,IP為192.168.1.2。 客戶端B所在網段為192.168.10.0/24,IP為192.168.10.2。 在路由器的虛機上安裝guagga,並開啟zebma及rip兩個協議,這時候是可以從192.168.1.2 ping 通 192.168.10.2的。 檢視RIP路由表: ripd> router rip OSPF也是一個內部動態路由協議,它是基於狀態的,一個路由器上知道全自治區域的所有路由資訊。而RIP是基於最短路徑的,只能有一個最短的路由。 sudo mv /etc/guagga/ospfd.conf.sample /etc/guagga/ospfd.conf sudo ospfd -d ospf的手工配置介面是:telnet 0 2604 指定在172.18.186.0/23和192.168.3.0/24兩個網路之間使用rip協議 ripd> en ripd# conf t ripd(config)# router rip ripd(config-router)# network 172.18.186.0/23 ripd(config-router)# network 192.168.3.0/24 ripd(config-router)# end ripd# 如果OSPF,則應該指定哪些網路位於同一個區域,因為它是面向狀態的內部路由協議: network 172.18.186.0/23 area 0 network 192.168.3.0/24 area 0 3 開啟BGP外部動態路由協議 sudo mv /etc/guagga/bgpd.conf.sample /etc/guagga/bgpd.conf sudo bgpd -d 手工配置介面是:telnet 0 2605 例子: 下面只顯示R1的Zebra配置過程,R2請自行配置: Router> en Password: R1# conf t R1(config)# hostname r1 r1(config)# int em1 r1(config-if)# ip address 172.18.186.100/23 下面只顯示R1的BGP配置過程,R2請自行配置: [hua@laptop nova]$ telnet 0 2605 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. Hello, this is Quagga (version 0.99.22). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: bgpd> en bgpd# conf t bgpd(config)# hostname r1_bgpd #指定自治系統號7675(自治系統號是一個16bit的數字,從1-65535,其中64512-65535保留為私有) r1_bgpd(config)# router bgp 7675 r1_bgpd(config-router)# network 172.18.186.0/23 r1_bgpd(config-router)# neighbor 172.18.186.101 remote-as 7676 r1_bgpd(config-router)# exit r1_bgpd(config)# exit r1_bgpd# sh ip bgp neighbors r1_bgpd# show ip bgp BGP table version is 0, local router ID is 0.0.0.0 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.18.186.0/23 0.0.0.0 0 32768 i Total number of prefixes 1 r1_bgpd# Total number of prefixes 1 開啟debug功能,將日記儲存到/tmp/bgpd.log檔案中。 r1_bgpd# debug bgp events BGP events debugging is on r1_bgpd# debug bgp keepalives BGP keepalives debugging is on r1_bgpd# debug bgp updates BGP updates debugging is on r1_bgpd# conf t r1_bgpd(config)# log file /tmp/bgpd.log r1_bgpd(config)# exit 5 路由的獲取 Linux下的路由可以通過netlink包程式設計獲取。
Quagga不直接使用底層的路由表或者硬體轉發表,它自己維護的路由表是RIB表,包含除主機路由以外的所有路由(因為主機路由是通過ARP學到的,而ARP是OS底層實現的)。RIB表包括直連路由,靜態路由,動態路由。而OS維護的表是轉發表,即FIB表,Quagga負責維護RIB與FIB間的同步,也負責各種路由協議的路由表與RIB間的同步;Quagga提供了幾種方式與核心通訊,類UNIX系統下的常見方式ioctl, sysctl, proc, netlink都有支援。RIB表是radix樹結構,而FIB表是hash table結構。radix是一個二叉樹,如下圖所示: 該radix二叉樹用結構休route_table表示, 根節點用結構體route_node表示,包括四個成員,表示字首的prefix結構體,左孩子、右孩子和表示下一路的info指標,info可以是下一跳的介面,或者IP,也可以是黑洞,分別對應著三種路由目標的型別:IFNAME, GATEWAY, BLACKHOLE。
一點體會:
設想兩個異地的openstack雲通過quagga進行動態路由學習互訪的話:
1, 首先需要ISP給資料中心分配一個BGP號(向CNNIC申請自治域號)
2,資料中心內部用OSPF,資料中心(內網ip)和ISP(外網ip)之間走BGP協議, 所有浮動ip地址需重分發到BGP路由裡【實驗9.11.2】 配置BGP和NAT一起使用【IEEEnjoy.L.ZH】 http://blog.csdn.net/ieeenjoy/article/details/1558248
3,也需按如下方法在路由器中配置浮動ip池
在路由器上配置一個DNAT地址,這樣通過在公網上訪問61.135.99.3可以訪問到內網地址192.168.10.2
ip nat inside source static 192.168.10.2 61.135.99.3
或許配置一個浮動ip池:
MYNAT 66.122.33.98 66.122.33.126 netmask 255.255.255.224
access-list 10 per 172.16.0.0 0.0.255.255
ip nat inside source list 10 pool MYNAT overload
4, 更具體地詳見下面列出的參考資料
6 Reference
1, Quagga使用及實驗說明:http://wenku.baidu.com/view/59dc823d0912a216147929b9.html
2, EBGP和IBGP的一篇好文章, IBGP路由的水平分割 http://shenrq.blog.51cto.com/25801/154285
3, 實驗9.11.2 配置BGP和NAT一起使用, http://blog.csdn.net/ieeenjoy/article/details/1558248
4, 配置靜態地址轉換------釋出公司內網網站到網際網路上 http://blog.csdn.net/zhengzizhi/article/details/17013473
5, Setting Up Network With ISP WAN and Public IP Block subnets running NAT, http://www.dslreports.com/faq/15918
6, Cisco 2811 PPPOE+NAT 配置例項, http://iflaugh.blog.51cto.com/846701/172556
7, Neutron/DynamicRouting/TestingDynamicRouting https://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting
相關文章
- 路由器quagga路由器
- MPLS學習( by quqi99 )
- OpenDaylight學習 ( by quqi99 )
- OpenStack Neutron FWaaS 學習( by quqi99 )
- 軟體工程學習軟體工程
- 路由中介軟體路由
- 軟體路由器路由器
- 學習旅途(軟體測試)
- 軟體測試整理學習
- 軟體學習之路總結
- OSPF路由 與 ISIS路由 與路由學習對比路由
- 軟體測試學習教程—軟體測試質量
- 軟體測試學習 ——五種軟體測試模型模型
- 現代軟體工程 習而學的軟體工程教育軟體工程
- 軟體測試培訓分享:學習能力差可以學習軟體測試嗎
- Anki for mac好用的學習軟體Mac
- 軟體測試學習路線
- 【分享】—如何學習軟體測試
- 中介軟體、MetaQ入門學習
- 【軟體測試】學習筆記筆記
- 軟體測試學習教程—軟體測試基本知識
- 學習高校課程-軟體工程-軟體工程(ch2)軟體工程
- Laravel 學習之路 3 路由Laravel路由
- 軟體測試的具體學習路線
- 基礎架構體系中介軟體學習架構
- 學好UI設計,需要學習哪些軟體?UI
- 軟體測試學習網站有哪些?怎麼學軟體測試呢?學習網站
- 軟體測試學習教程——JDBC配置JDBC
- Django學習筆記(15)——中介軟體Django筆記
- 學習Java需要什麼軟體呢?Java
- <<軟體設計學習筆記>> (轉)筆記
- 中介軟體漏洞攻防學習總結
- 可以學習的進銷存軟體
- gin自動路由中介軟體路由
- go fiber:路由中介軟體Go路由
- Laravel核心程式碼學習 — 路由Laravel路由
- BGP路由協議學習一路由協議
- Express原始碼學習-路由篇Express原始碼路由