BGP修改NEXT_HOP下一跳屬性值的幾種方法
本博文將為您詳細介紹BGP修改NEXT_HOP下一跳屬性值的幾種方法,包括通過next-hop-self變更next-hop屬性,通過route-map修改BGP路由NEXT_HOP屬性值等。
1.通過next-hop-self可以變更next-hop屬性
上圖R5更新給EBGP鄰居R2 BGP路由5.5.5.0時,NEXT_HOP=192.168.25.5,該屬性將一直跟隨本條BGP路由在AS234中傳遞,這時對于R4、R3來說,并不知道如何前往192.168.25.5,因此5.5.5.0的路由無法正常裝入路由表。解決方法之一是R2在IGP路由中注入25.0這條外部路由,另一個方法是R2對其IBGP鄰居使用next-hop-self,修改這條前綴的NEXT_HOP屬性。
NEXT_HOP on shared Media(在共享介質上的運作)
RouterB將路由100.100.100.0/24傳遞給A,NEXT_HOP為10.1.123.2;
RouterA將路由100.100.100.0/24傳遞給C,此時NEXT_HOP保持不變;
如果路由器收到某條BGP路由,該路由的NEXT_HOP地址值與該路由器的接口IP(更新源)同屬一個網段,那么該條路由的NEXT_HOP地址將保持不變并傳遞給它的(這個相同網段上的)BGP鄰居,這個其實是一種優化機制,但是這種機制在NBMA環境中是否有問題呢?
NEXT_HOP on NMBA network
仍然看上圖,中間的網絡如果不是廣播多路訪問網絡,而是一個幀中繼網絡,那么就要注意,C收到的路由,NEXT_HOP為10.1.123.2,那么如果C路由器上沒有到該IP的PVC,就會出問題,所以這點要考慮進去。
2.通過route-map修改BGP路由NEXT_HOP屬性值
BGP的鄰居關系如圖所示,R1-R2建立基于Loopback的iBGP鄰居關系。R2-R3建立基于直連接口的eBGP鄰居關系。那么在默認情況下,R1通告給R2的路由11.0/24下一跳屬性值為1.1.1.1,也就是R1的更新源IP,而R2將路由更新給eBGP鄰居R3時,路由的NH變成了10.1.23.2、
R2上增加配置
access-list 1 permit 11.11.11.0
route-map test permit 10
match ip address 1
set ip next-hop 10.1.23.99
router bgp 12
neighbor 10.1.23.3 route-map test out
通過在R2上部署out方向的route-map,可以修改傳遞給R3的BGP路由的NEXT_HOP屬性值,當然上面的范例設置的10.1.23.99沒有任何意義,純粹是一個測試而已。
3.關于BGP next-hop-unchanged特性
(承上一小節)另一個可以影響BGP NEXT_HOP屬性值的特性是BGP next-hop-unchanged特性。
首先這條命令只能對多跳eBGP peer配置,所以上圖中,R2及R3需建立基于Loopback的eBGP鄰居關系,形成multihop eBGP peer。
在R2收到iBGP peer傳來的路由11.0/24,其NEXT_HOP屬性值為1.1.1.1,如過R2上在BGP進程中使用neighbor 3.3.3.3 next-hop-unchanged配置,那么R2將BGP路由傳遞給eBGP鄰居R3時,路由的NEXT_HOP屬性值將不會發生變化。
再進一步做個測試,現在把拓撲環境變更一下:

R1-R2之間變成了eBGP鄰居了,基于直連接口建立eBGP鄰居關系;
R2-R3之間仍然是基于Loopback建立的多跳eBGP鄰居關系;
現在R1傳來的路由,在R2上NEXT_HOP屬性值為10.1.12.1,那么默認情況下R2將路由再傳給R3時,路由的NEXT_HOP屬性值修改為2.2.2.2也就是R2的更新源IP。
如果此刻在R2上配置neighbor 3.3.3.3 next-hop-unchanged,我們發現命令無效,R2通告給R3的路由NEXT_HOP屬性值還是會變,不會保留10.1.12.1。
因此我得出的結論是,BGP 的neighbor next-hop-unchanged命令,首先只能對多跳eBGP鄰居配置,其次,它只在將本地的iBGP路由傳遞給自己的eBGP多跳鄰居時才會生效。
原文鏈接:http://blog.sina.com.cn/s/blog_5ec353710101ghqe.html#bsh-24-329898008