基礎配置網絡
修改下一跳爲自身app
指定更新源IP地址ide
完成這個實驗oop
EBGP多跳學習
學會看三張表測試
BGP鄰居表ui
BGP表url
路由表,display ip routing-tablespa
R1的配置以下(省略接口IP地址的配置):3d
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.255
[R1] bgp 123 #建立BGP進程,AS號爲123
[R1-bgp] router-id 1.1.1.1 #配置BGP Router-ID
[R1-bgp] peer 10.1.23.3 as-number 123 #配置BGP鄰居(指定鄰居的地址及AS號),因爲該鄰居的AS號與本地AS號一致,所以二者之間爲IBGP鄰居關係。
R2的配置比較簡單,就是運行OSPF而已,這部分配置再也不贅述。
R3的配置以下:
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 10.1.23.0 0.0.0.255
[R3] bgp 123
[R3-bgp] router-id 3.3.3.3
[R3-bgp] peer 10.1.34.4 as-number 400 #配置EBGP鄰居R4
[R3-bgp] peer 10.1.12.1 as-number 123 #配置IBGP鄰居R1
R4的配置以下:
[R4] interface loopback 0
[R4-loopback0] ip address 4.4.4.4 24
[R4] bgp 400
[R4-bgp] router-id 4.4.4.4
[R4-bgp] peer 10.1.34.3 as-number 123
[R4-bgp] network 4.4.4.0 24 #把本地直連路由network進BGP
完成上述配置後,在R3上查看BGP路由表:
[R3] display bgp routing-table
BGP Local router ID is 10.1.23.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 4.4.4.0/24 10.1.34.4 0 0 400 i
咱們看到R3已經學習到了R4通告過來的BGP路由4.4.4.0/24。而且該條BGP路由的NextHop屬性值爲10.1.34.4,這個下一跳地址是路由可達的。該條路由在R3的BGP路由表裏有「* >」 標記,其中「*」表示這條路由是可用的(valid),只有當BGP路由的NextHop爲路由可達時,該BGP路由纔會被視爲可用;而「>」則表示這條路由是被優選的路由,或者說是到達該目的網絡的最優路由。
BGP路由的NextHop屬性是一個很是重要的屬性,它是全部BGP路由都會攜帶的路徑屬性,它指示了到達目的網絡的下一跳地址。
在R3上查看路由表:
[R3] display ip routing-table protocol bgp
Destination/Mask Proto Pre Cost Flags NextHop Interface
4.4.4.0/24 EBGP 255 0 D 10.1.34.4 GigabitEthernet0/0/1
R3已經將到達4.4.4.0/24的BGP路由加載到了全局路由表中。
對於R3而言,到達4.4.4.0/24的路由已經被優選,接下來,它會將該路由通告給IBGP鄰居R1。
在R1上查看BGP路由表:
[R1]display bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
i 4.4.4.0/24 10.1.34.4 0 100 0 400i
咱們看到,R1的BGP路由表中已經出現了4.4.4.0/24路由,而這條路由的NextHop屬性值是10.1.34.4,可是R1在本地路由表中沒有到達10.1.34.4的路由,所以10.1.34.4不可達,如此一來,該BGP路由也就不可用了(在BGP路由表中沒有*號標記),既然不可用,天然就不能裝載進路由表中使用。
那麼怎麼解決這個問題呢?一個最簡單的方法是,爲R1配置一條靜態路由:ip route-static 10.1.34.0 24 10.1.23.3
,這樣一來R1的路由表裏就有了到達10.1.34.4的路由,那麼BGP路由4.4.4.0/24的下一跳地址就可達了,對應的BGP路由天然也就可用了。可是這種方法太「笨拙」。另外一種方法是,在R3的OSPF進程中將10.1.34.0/24網段也注入進去,使得R1可以經過OSPF學習到10.1.34.0/24路由,這種方法也是可行的。可是因爲R3-R4之間的互聯鏈路被視爲AS外部鏈路,所以10.1.34.0/24做爲外部網段每每不會被宣告進AS內的IGP。那麼還有什麼其餘辦法能解決這個問題麼?加入交流羣696283186獲取更多實驗詳細配置
例以下圖所示,R3收到R4通告的EBGP路由,該路由的下一跳屬性值爲10.1.34.4,它將該條路由通告給IBGP對等體R1的時候,路由的下一跳屬性值不會發生改變,仍然爲10.1.34.4。
這就形成了咱們上面所述的問題,因爲R1沒有到達10.1.34.0/24的路由,所以下一跳地址10.1.34.4不可達,從而致使BGP路由4.4.4.0/24不可用。
還有一個方法能夠解決這個問題:在R3上使用next-hop-local
命令,可修改BGP路由的下一跳屬性值爲自身。在下圖中,咱們在R3上增長了peer 10.1.12.1 next-hop-local
命令,那麼這樣一來,當R3再將EBGP路由通告給R1的時候,會將這些路由的下一跳屬性值修改成本身的更新源地址(10.1.23.3),而R1已經經過OSPF獲知到達10.1.23.0/24的路由,所以10.1.23.3是可達的。
完成配置後,咱們在R1上查看BGP路由表:
能夠手工指定用於創建BGP鏈接的源接口及源IP地址。命令以下:[Router-bgp] peer x.x.x.x connect-interface intf [ ipv4-src-address ]
缺省狀況下,BGP使用報文的出接口做爲BGP報文的源接口。當用戶完成peer命令的配置後,設備會在本身的路由表中查詢到達該對等體地址的路由,並從該路由獲得出接口信息。若是peer命令中沒有指定接口(connect-interface)和IP地址(ipv4-src-address),那麼設備將會使用前述出接口和該接口的IP地址做爲BGP報文的源接口和源地址。
爲了使物理接口在出現問題時,設備仍能發送BGP報文,可將發送BGP報文的源接口配置成Loopback接口。在使用Loopback接口做爲BGP報文的源接口時,必須確認BGP對等體的Loopback接口的地址是可達的。因爲一個AS內每每會運行IGP協議,所以AS內的設備可以經過該IGP協議獲知到達其餘設備的Loopback接口的路由。在AS內部,IBGP鄰居關係一般基於Loopback接口創建。
EBGP鄰居之間一般使用直鏈接口的IP地址做爲BGP報文源地址,如若使用環回接口創建EBGP鄰居關係,要配置peer ebgp-max-hop
命令,容許EBGP經過非直連方式創建鄰居關係。
一樣是上面的環境,咱們稍做變動,在R1及R3上建立loopback0,地址分別爲1.1.1.1/32及3.3.3.3/32,而後設備各自將loopback0宣告進OSPF,使得彼此都能經過OSPF學習到對方的Loopback0路由。
咱們修改BGP的配置,使得R1-R3之間的IBGP鄰居關係基於Loopback0來創建。
R1的關鍵配置以下:
[R1] Interface loopback0
[R1-Loopback0] ip address 1.1.1.1 32
[R1] bgp 123
[R1-bgp] peer 3.3.3.3 as-number 123
[R1-bgp] peer 3.3.3.3 connect-interface LoopBack 0
R3的關鍵性配置以下:
[R1] Interface loopback0
[R1-Loopback0] ip address 3.3.3.3 32
[R1] bgp 123
[R1-bgp] peer 1.1.1.1 as-number 123
[R1-bgp] peer 1.1.1.1 connect-interface LoopBack 0
[R1-bgp] peer 1.1.1.1 next-hop-local
注意,務必要將R1及R3的Loopback0接口激活OSPF。加入交流羣696283186獲取更多實驗詳細配置
通過前面的講解,咱們的環境如今是這樣的:R1-R3之間創建了基於Loopback接口的IBGP鄰居關係;R3對R1配置了next-hop-local
;R3與R4之間仍然維持基於直鏈接口的EBGP鄰居關係;R4在BGP中發佈路由4.4.4.0/24。
如今R1是可以學習到BGP路由4.4.4.0/24的,而且該路由也是被優選的,此時這條路由會被R1裝載進全局路由表使用,可是,這是否是意味着R1就可以ping通4.4.4.4了呢?通過測試你可能會發現:沒法ping通?由於數據包在R2這裏就被丟棄了,R2並無運行BGP,所以它沒法學習到BGP路由4.4.4.0/24。
怎麼才能讓R1 ping通4.4.4.4呢?方法之一是在R3上將BGP路由重發布進OSPF,使得R2可以經過OSPF學習到BGP路由4.4.4.0/24,可是這種方法存在必定的風險,由於咱們知道BGP承載的前綴數量每每是很是龐大的;另外一種方法是,讓R2也運行BGP,並與R一、R3創建IBGP鄰居關係,這樣一來問題就解決了。那麼BGP鄰居關係就變成了以下圖所示。具體配置此處再也不贅述。
一般狀況下,EBGP鄰居之間必須具備直連的物理鏈路,EBGP鄰居關係也將基於直鏈接口來創建,若是不知足這一要求,則必須使用peer ebgp-max-hop
命令容許它們之間通過多跳創建TCP鏈接。
peer ebgp-max-hop
命令用來配置容許BGP同非直連網絡上的對等體創建EBGP鏈接,並同時能夠指定容許的最大跳數。命令格式以下:[Router-bgp] peer ipv4-address ebgp-max-hop [ hop-count ]
如上圖所示,R1及R2要基於Loopback口創建EBGP鄰居關係。這種狀況也屬於EBGP鄰居之間不基於直鏈接口創建鄰居關係的場景,必須配置peer ebgp-max-hop
命令。圖中R1與R2之間的兩條物理鏈路是爲了冗餘性考慮。R1的關鍵配置以下:
[R1] bgp 64512
[R1-bgp] peer 2.2.2.2 as-number 64513
[R1-bgp] peer 2.2.2.2 ebgp-max-hop 2
[R1-bgp] peer 2.2.2.2 connect-interface loopback0
[R1] ip route-static 2.2.2.2 32 10.1.10.2
[R1] ip route-static 2.2.2.2 32 10.1.20.2 80
R2的關鍵配置以下:
[R2] bgp 64513
[R2-bgp] peer 1.1.1.1 as-number 64512
[R2-bgp] peer 1.1.1.1 ebgp-max-hop 2
[R2-bgp] peer 1.1.1.1 connect-interface loopback0
[R2] ip route-static 1.1.1.1 32 10.1.10.1
[R2] ip route-static 1.1.1.1 32 10.1.20.1 80
查看BGP條目的詳細信息: