2017年10月2日 星期一

30 – BGP 黑洞實驗


30 – BGP 黑洞實驗





IGP    OSPF

R2(config)# router ospf 1
R2(config-router)# network 22.1.1.1 0.0.0.0 area 0
R2(config-router)# network 23.1.1.0 0.0.0.255 area 0
12.1.1.0不用宣告進OSPF

R3(config)# router ospf 1
R3(config-router)# network 33.1.1.1 0.0.0.0 area 0
R3(config-router)# network 23.1.1.0 0.0.0.255 area 0
R3(config-router)# network 34.1.1.0 0.0.0.255 area 0

R4(config)# router ospf 1
R4(config-router)# network 44.1.1.1 0.0.0.0 area 0
R4(config-router)# network 34.1.1.0 0.0.0.255 area 0
45.1.1.0不用宣告進OSPF

R3# show ip ospf neighbor

R4# show ip router ospf
R4上有3條路由R2R3的環回口和R2R3的直連網段。



eBGP          08:00       

R3(config)# router bgp ?
後面是AS

R1(config)# router bgp 1
R1(config-router)#

R4(config-router)# network 44.1.1.1 0.0.0.0 area 0

這裡的network有哪些作用: 1. 宣告   2. 發送Hello

只要是被passive-interface的接口他只是不會發送Hello包的報文而已,但是接口還是會被宣告出去的。

BGP他建鄰居是通過neighbor來建立的,要把路由宣告出去是通過network,這兩個功能是通過2個關鍵字來實現。

BGP在建鄰居是通過neighbor來建立,鄰居建起來並不代表你有路由在裡面,你要把路由放進去必需要加network

他是通過2個命令來解決原本IGP當中的1個命令(network)2個功能(宣告、發送Hello)

建鄰居

R1(config-router)# neighbor 12.1.1.2 remote-as 234
如果要跟對面建鄰居用的是neighbor
對面的IP:建eBGP這個IP地址一般都用直連
建任何鄰居關係都必需考慮neighbor後面的IP必需是本地可到達的
remote-as後面是跟誰建

R2(config)# router bgp 234
R2(config-router)# neighbor 12.1.1.1 remote-as 1
我指向你、你指向我

檢查鄰居表
R1# show ip bgp summary     


iBGP          13:40

R2R4iBGP關係

R2(config-router)# neighbor 44.1.1.1 remote-as 234
一般都用對端的環回口來建鄰居,也比較穩定。

環回口直到這個路由器掛掉了這個環回口才會消失。

用物理接口也可以,但物理接口down掉了鄰居也跟著down掉了。比較不建議

R2(config-router)# neighbor 44.1.1.1 update-source loopback 0
默認情況下BGP建鄰居,他都是用物理接口為來原發出去的,這個時候要把默認的物理口改成環回口。因為我們決定用R2的環回口和R4的環回口去建立iBGP,所以要把他的接口改成update-source loopback 0

R4(config)# router bgp 234
R4(config-router)# neighbor 22.1.1.1 remote-as 234
R4(config-router)# neighbor 22.1.1.1 update-source loopback 0


eBGP          18:40       

R4R5也要建立eBGP,用點不一樣的方法建立eBGP,使用環回口建立。
先寫靜態路由讓這兩個環回口可到達,寫靜態路由才是最簡單的方法。

R4(config)# ip route 55.1.1.1 255.255.255.255 45.1.1.5
45.1.1.5為下一跳的路由

R5(config)# ip route 44.1.1.1 255.255.255.255 45.1.1.4


檢查
R4# ping 55.1.1.1 source loopback 0
默認是帶物理口出去的,所以要加source loopback 0

開始建立R4R5eBGP
R4(config)# router bgp 234
R4(config-router)# neighbor 55.1.1.1 remote-as 5
R4(config-router)# neighbor 55.1.1.1 update-source loopback 0

用環回口建立eBGP除了這兩條基本的指令還要在加一條
R4(config-router)# neighbor 55.1.1.1 ebgp-multihop

默認的情況下是用直連接口去建立的而且只能下一跳,所以才不用第三行指令。

如果用環回口建立就不是一跳了,最少是二跳,ebgp-multihop如果後面不加數字是可以255跳。

如果不改多跳的話根本沒辦法建立鄰居,eBGP默認的情況下只有一跳,默認只允許用直連去建eBGP

R5(config)# router bgp 5
R5(config-router)# neighbor 44.1.1.1 remote-as 234
R5(config-router)# neighbor 44.1.1.1 update-source loopback 0
R5(config-router)# neighbor 44.1.1.1 ebgp-multihop 2

R1# show ip bgp summary 


R2# show ip bgp summary 


R4# show ip bgp summary


開始放路由進去          25:50
R1(config)# interface loopback 1
R1(config-if)# ip address 122.1.1.1 255.255.255.255
R1上新建一個環回口

現在把這個環回口放進去BGP通告出去
R1(config)# router bgp 1
R1(config-router)# network

IGPnetwork是看接口。路由器上的某一個接口要在network上面就可以。只要接口包含的範圍就可以放進去IGP

BGPnetwork是路由。BGPnetwork要先看路由表有沒有路由,如果有才可以network進去。

所以第一步要先看有沒有路由表

R1# show ip router
直連也算自己的一條路由

R1(config-router)# network 122.1.1.1 mask 255.255.255.255
要跟路由表的完全一樣,如果有一點點的不一樣show ip bgp是看不到任何東西的。

R1# show ip bgp
路由表怎麼寫,就應該怎麼network

這個路由會傳到R2

R2# show ip bgp 

R2的路由會通過中間的iBGP傳給R4

R4# show ip bgp 
路由已經傳到R4了,R4並沒有傳給R5,所以R5收不到

. 所有在 *> 的路由:
                      1. 都能夠傳給我BGP的鄰居
                      2. 都會放進路由表  (第三張表)

R4show ip router就看不到路由表,在R4上同步或下一跳有問題

. 影響 *> 的特殊條件:

1. 同步:我從BGP收到的路由,也要一定要從IGP收到路由,否則就認為他不同步。

R4# show ip router ospf
R4IGP看不到122.1.1.1這條路由,這種情況為不同步。

出現這個問題就要把同步關掉

R4# show run | se bgp 

打開同步的方法:
R4(config)# router bgp 234
R4(config-router)# synchronization
R4# show run | se bgp
現在的設備默認都是關閉的,所以R4不是同步的問題。

2. 下一跳:我通過BGP收到的這條路由所攜帶的下一跳,在我這個路由器本地一定要有路由可到逹

R4# show ip bgp

我通過BGP收到的122.1.1.1這條路由所攜帶的12.1.1.1,在我路由器本地是不是有路由可到逹。如果不可到逹就是下一跳有問題(就不會有 *> )

只要在R4上能夠讓他有路由到這個路由(12.1.1.1)的下一跳


解決的方法          45:00

R2(config)# router bgp 234
R2(config-router)# neighbor 44.1.1.1 next-hop-self
在跟44.1.1.1建立鄰居關係的時候,我把他的下一跳改成自己

為什麼在R2R4上看到的下一跳都是12.1.1.1,意思是我在AS 234當中不管有多少台路由器在跑BGP,他們學到這條路由的下一跳全都是指向上一個AS邊界的路由器的接口IP地址

BGPAS為單位,一個AS代表一台路由器,一個AS不管多少台路由都以一台路由來看,他們全都指向上一個AS邊界的路由器的接口IP地址

R2在把路由傳遞給R4的時候,把下一跳改成自己next-hop-self

R4# show ip bgp 

R5# show ip bgp

R1的環回口透過BGP傳到R5

最終的需求是要讓R1的環回口可以pingR5的環回口
所以要把R5的環回口宣告進BGP傳給R1
因為現在R1並沒有R5的路由


要讓R1R5的環回口互相ping

R5(config)# interface loopback 1
R5(config-if)# ip address 155.1.1.1 255.255.255.0
R5(config-if)# exit
R5(config)# router bgp 5
R5(config-router)# network 155.1.1.0 mask 255.255.255.0

R5# show ip bgp 

R2# show ip bgp
R2沒辦法傳給R1

R1# show ip bgp
沒辦法傳給R1要在R4上改下一跳

R4(config)# router bgp 234
R4(config-router)# neighbor 22.1.1.1 next-hop-self


BGP修改都要清一下才能收到,有兩種方法          51:00

. 硬清
R4: clear ip bgp *
BGP的三次握手全部清掉重新建立三次握手然後發送數據包

. 軟清  一般常用方法
R4: clear ip bgp * soft
不去清斷BGP的三次握手只是刷新BGP的屬性而已


最後在回到R2檢查
R2# show ip bgp 

R1# ping 155.1.1.1 source 122.1.1.1
還是不能ping以上一直在解決BGP控制層面的問題,數據包發出去要有控制層的路由

但實際上可能出現數據層面的問題所以應該一跳一跳的去看有路由為什麼不通。他的封包在哪被丟掉的

R1# show ip route
路由丟給12.1.1.2

R2# show ip route
路由丟給44.1.1.1然後44.1.1.1路由丟給23.1.1.3     這種遞歸查法

R3# show ip route
R3確沒有看到155.1.1.1的路由這就是BGP數據上的黑洞R3確不知道數據往哪裡發了(數據丟掉了)

雖然路由要經過R3傳給R2因為R3並沒有跑BGP所以沒辦法去識別傳遞BGP update(更新)的路由條目

這個黑洞實驗這個實驗數據卡在R3


BGP黑洞實驗的解決          56:40

. 物理直連
    R2R4拉一條物理直連的線

. BGP邏輯的Full-mash
    R3也跑BGP

. BGP重分布到IGP (實驗環境)
R3沒有155.1.1.1的路由R2R4通過BGP學到155.1.1.1的路由所以把BGP重分布到OSPF就有155.1.1.1的路由  (在實際環境是不能實現的)

. MPLS
    目前最可靠最流行的解決方法就是在查標籤,變成標籤的方式在交換



. BGP邏輯的Full-mash          59:50


R3R2R4建立iBGP

R2(config)# router bgp 234
R2(config-router)# neighbor 33.1.1.1 remote-as 234
R2(config-router)# neighbor 33.1.1.1 update-source loopback 0
R2(config-router)# neighbor 33.1.1.1 next-hop-self

R3(config)# router bgp 234
R3(config-router)# neighbor 22.1.1.1 remote-as 234
R3(config-router)# neighbor 22.1.1.1 update-source loopback 0
R3(config-router)# neighbor 44.1.1.1 remote-as 234
R3(config-router)# neighbor 44.1.1.1 update-source loopback 0

R3接口沒有eBGP傳過來的路由所以不須要設定next-hop-self

什麼樣的路由器才要設定next-hop-self

自己有eBGP的鄰居關係而且要對身後的iBGPnext-hop-self

R4(config)# router bgp 234
R4(config-router)# neighbor 33.1.1.1 remote-as 234
R4(config-router)# neighbor 33.1.1.1 update-source loopback 0
R4(config-router)# neighbor 33.1.1.1 next-hop-self



R3# show ip bgp summary 


R3# show ip bgp 


R3# show ip route 

R1# ping 155.1.1.1 source 122.1.1.1
這樣就可以ping通了

R1# ping 155.1.1.1
不帶環回口就ping不通了