先看看在哪些場合會用到路由雙向重分佈linux
場景一:公司裏有2個技術主管,分別管理總部和分部,水平差很少,主管A認爲我這邊分部路由器性能比較差,用RIP協議已經足夠使用了。而總部的主管認爲OSPF比較好,非要用OSPF。因爲意見上的分歧致使分部使用了RIP而總部使用了OSPF,這裏就須要用到路由雙向重分佈來解決一個公司使用了2種不一樣的路由協議的問題redis
場景二:對於規模比較大的公司,收購了另一家公司,因爲原來公司使用的是OSPF協議,而被收購的公司使用的是EIGRP協議,爲了防止從新部署網絡而致使網絡網絡中斷,這就致使了整合2個公司之間的網絡就須要用到路由的雙向重分佈數據庫
場景三:這就比較偏一點了,可能因爲業務上的緣由,公司在一些UNIX或者linux上跑了RIP的協議,爲了對接公司其它的網絡而進行路由重發布(這就不是很常見了)網絡
路由重發布有4種:負載均衡
單點雙向重發布ide
單點單向重發布工具
多點單向重發布性能
多點多向重發布學習
此篇博文針對多點雙向重發布產生的一些問題進行分析和解決方案優化
首先搭建整個所須要的環境(配置接口地址,啓用路由這些民工級別的配置爲了避免浪費版面就不貼出來了,)
在R1上對RIP和OSPF進行雙向重分佈
R1(config)#router rip
R1(config-router)#redistribute ospf 1 metric 1 #注意在RIP和EIGRP這些距離矢量型的路由協議中重發布其它路由協議時必定要加上metric,不加的話默認是無窮大,重分佈到RIP中要注意不能大於15,由於RIP最大跳數是16
R1(config)#router ospf 1
R1(config-router)#redistribute rip subnets
在R3上也是如此
R3(config)#router rip
R3(config-router)#redistribute ospf 1 metric 1
R3(config)#router ospf 1
R3(config-router)#redistribute rip subnets
進行重發布後查看下每一個路由器的路由表
R1的路由表
R2的路由表
R3的路由表
R4的路由表
經過對比發現如下幾個問題
問題1:在R1上,對於23.0.0.0/24網段應該是RIP內部的路由,這裏卻以OSPF的外部路由形式學習到了。在R3上也有問題1存在,2.2.2.0/24和12.0.0.0/24本也應該是經過RIP學習到的
問題2:在R4上,去往2.2.2.0/24網段的應該是有2個嚇一跳出口的,經過R1和R3進行負載均衡的這裏只學習到下一跳是124.0.0.1,經過R1走的一條路由
在這裏,分析下這2個問題出現的緣由
咱們知道RIP的管理距離是120,OSPF的管理距離是110,因此相對來講,RIP的管理距離要比OSPF的要高,路由器會優先選擇管理距離比較低的那一個。
而這裏出現路由條目混亂的緣由正式因爲這個管理距離產生的。
咱們分析下路由通告的走向:
首先,在配置路由重發布以前
R1經過RIP學習到了2.2.2.0/24,12.0.0.0/24,23.0.0.0/24這三條路由,在R3上一樣經過RIP學到了這3條路由
而後配置了路由重分佈,事情就變得有點不同了。。。。
先分析下R3上的問題
我先是在R1上雙向重發布了RIP和OSPF的路由。這樣一來,R1就將上述3條路由經過OSPF type2,也就是在路由表上看到的OE2從F0/0通告了出去,而後R3和R4接收到了這條路由信息(OSPF中應該說是同步了數據庫。。。這裏爲了形象點就這麼說吧。。。),而後R3就開始犯傻了,由於上述3條路由它既從RIP中學習到,又從OSPF中學習到,而後一對比管理距離,發現OSPF比RIP的要小,因而就選擇了經過OSPF學到的那一條,拋棄了RIP。。。。
R1上也是一樣的道理
再分析下R4上的負載均衡的問題,罪魁禍首其實仍是和R1,R2一樣的
先看下2.2.2.0/24這條路由,在OSPF中,因爲我是先在R1上作的雙向重發布。因而這條路由是在R1上經過OSPF中通告了出去,R4天然也學習到了這條路由。而在R3上也學習到這條路由後,經過對比管理距離,將RIP中學習到的2.2.2.0/24給拋棄了,因而R3上把這條路由通告出去是已R1上學習到的通告出去的,這條路由的下一跳是R1,因此R4只收到了下一跳是R1的路由。
可能說的有點亂,也能夠這麼理解,R3本身認爲去往2.2.2.0/24的路由下一跳是R1,那麼,OSPF數據庫同步機制,R4上對於這條路由的下一跳也應該是R1
這樣的路由重分佈致使了路由的混亂和環路,咱們要經過路由的修剪來對網絡進行優化和改善
解決方案:
1:使用發佈列表,列表中要寫每條須要過濾的路由,比較麻煩
針對上述的環境,我這裏經過發佈列表的方法來實現路由的修剪
首先先定義訪問控制列表,將中RIP的3條路由抓取出來
R1(config)#ip access-list standard DenyFromO2R #在作訪問控制列表的時候儘可能使用基於命名的訪問控制列表,在ACL多的時候,用名字比較好區分,這裏這個名字意識是阻止從OSPF到RIP的條目
R1(config-std-nacl)#deny 12.0.0.0 0.0.0.255
R1(config-std-nacl)#deny 23.0.0.0 0.0.0.255
R1(config-std-nacl)#deny 2.2.2.0 0.0.0.255
R1(config-std-nacl)#permit any
而後進入到OSPF中
R1(config)#router rip
R1(config-router)#distribute-list DenyFromO2R in fastEthernet 0/0 #上述中的緣由在這裏,這條命令定義了在OSPF下重發布修剪的規則,將ACL定義的3條路由阻止從OSPF重發布出去。這裏要注意的是:在OSPF中使用發佈列表的話,是不容許使用OUT,只能使用in。
在R3中一樣作好這樣的配置
R3(config)#ip access-list standard DenyFromO2R
R3(config-std-nacl)#deny 12.0.0.0 0.0.0.255
R3(config-std-nacl)#deny 23.0.0.0 0.0.0.255
R3(config-std-nacl)#deny 2.2.2.0 0.0.0.255
R3(config-std-nacl)#permit any
R3(config)#router rip
R3(config-router)#distribute-list DenyFromR2O in fastEthernet 0/0
OK
再來看看路由表的狀況
R1的路由表
R2的路由表
R3的路由表
R4的路由表
能夠看到,如今的路由是正常了,並且R1去往124.0.0.0/24的路由和R4去往2.2.2.0/24的路由也實現了負載均衡
2:使用管理距離來解決
咱們能夠看到,以前之因此會產生路由的混亂,是由於經過RIP學到的路由在重發布進OSPF中後,OSPF又從新發布進了RIP,而在R1和R3上由2種不一樣的協議學到了相同的路由,選擇了那個管理距離小的(即OSPF)的路由。
解決方法是,將從RIP重發布到OSPF的路由,即OSPF的外部路由的管理距離設置爲比RIP大一點
首先來看下經常使用幾個路由協議的管理距離
EIGRP:90 EIGRP外部路由:170
RIP:120
OSPF內部和外部都是110
咱們先定義好OSPF的外部路由(經過ACL),在OSPF中將這部分的外部路由的管理距離配置爲121
首先先定義OSPF的外部路由。
R1(config)#ip access-list standard FromR3 #在R1上定義從R3上學到的OSPF外部路由
R1(config-std-nacl)#permit 12.0.0.0 0.0.0.255
R1(config-std-nacl)#permit 23.0.0.0 0.0.0.255
R1(config-std-nacl)#permit 2.2.2.0 0.0.0.255
R3(config)#ip access-list standard FromR1 #在R3上定義從R1上學習到的OSPF外部路由
R3(config-std-nacl)#permit 12.0.0.0 0.0.0.255
R3(config-std-nacl)#permit 23.0.0.0 0.0.0.255
R3(config-std-nacl)#permit 2.2.2.0 0.0.0.255
R1(config)#router ospf 1
R1(config-router)#distance 121 3.3.3.3 0.0.0.0 FromR3 #這條的意思是:從Router-id爲3.3.3.3學習到的路由中,符合列表中的路由的管理距離設置爲121
R3(config)#router ospf 1
R3(config-router)#distance 121 1.1.1.1 0.0.0.0 FromR1
查看下R3的路由表
這裏顯示2.2.2.0/24和12.0.0.0/24的路由都是從RIP中學習到的了
再查看下OSPF的外部路由數據庫
發現數據庫裏仍是含有2.2.2.0/24和12.0.0.0/24的數據信息,可是因爲已經將這些路由的管理距離設置的比RIP還要大了,因此在路由表裏選擇了RIP協議
R1也是一樣的
而在R4中,查看下路由表
能夠看到12,23,2這3個網段的完整路由
這裏列舉了2中解決方案,還有諸如使用route-map之類的工具能夠能夠在路由重發布的時候對路由條目進行修剪,只要知道整個路由傳遞的原理和機制,這些方法也只是你所選擇的工具而已。