2017年10月8日 星期日

34 – BGP社團屬性


34 – BGP社團屬性

BGP Community

. BGP Community:可選(可能識別)、傳遞(只能在鄰居間傳遞)
        通過send-community來解決這個問題
. 分類有:眾所皆知的Community和私有Community
. 也可以分為標準Community和擴展Community (Extended Community)

. 自己分類Community屬性為路由控制屬性、官方Community屬性為任選傳遞屬性。
. 本身也分標準的社團屬性和擴展的社團屬性。
. 不管是標準的社團屬性或是擴展的社團屬性,都可以分為眾所皆知的Community和私有Community

社團(路由/任選) . 標準: 1. 眾所皆知
                                                     2. 私有
                                 . 擴展: 1. 眾所皆知
                                                     2. 私有

介紹標準社團屬性裡的眾所皆知:只要讓路由偕帶這樣一個屬性,就會有一個特殊的功能。
標準社團屬性裡的私有:就像Tag,單純的Tag,但是路由怎樣運作還是要進一步的控制來決定。

. 社團屬性有兩個要考慮的點:
11.1.1.1的路由打上社團屬性
1. 能不能識別:
第一點要考慮這個路由器能不能識別這個屬性。
2.能不能被傳遞:
第二點我識別了這個屬性,我能不能把這個屬性偕帶在路由裡面,傳遞給我其他的路由器。

因為他的歸類是屬於任選傳遞的;這是一個自己可以定義的屬性。所以一般情況下所有路由器是不能識別的,而且默認也是不傳遞的。

如果要讓他可以識別可以傳遞的話,後面要通過send-community來激活他



眾所皆知的Community                               6:30

. no-export → 不將路由發給任何eBGP鄰居,也就是只能將該路由在本AS內部傳遞。 (聯邦使用不出大AS)
. no-advertise → 不將路由發給任何BGP鄰居
. internet → 可以將路由發給任何BGP鄰居
. Local-as → no-export,即不將路由發到AS (聯邦使用不出小AS)
*跟33 – BGP聯邦和RR的配置一樣

. no-advertise

只要涉及到修改屬性,一定要用到route-map這個工具。
要讓R1傳給R2偕帶社團屬性
首先針對11.1.1.0這條路由來做,所以要把這條路由抓出來,用簡單的方法寫一條ACL

R1(config)# access-list 1 permit 11.1.1.0

R1(config)# route-map COMM
R1(config-route-map)# match ip address 1
R1(config-route-map)# set community ?      Extcommunity擴展的社團屬性

反白的這些都屬於眾所皆知的Community,只要設定任何一個值都有相應的一些功能。

而最上面的2個為私有的Community,只是個Tag沒有任何功能。
R1(config-route-map)# set community no-advertise
R1(config-route-map)# exit

R1(config)# route-map COMM permit 999
R1(config-route-map)# exit

R1(config)# router bgp 1
R1(config-router)# neighbor 12.1.1.2 route-map COMM out
在出口打上標籤

每做一個屬性的修改都要清一下
R1# clear ip bgp * so

R2show ip bgp 11.1.1.0
發現什麼都沒有,因為Community屬性的特點默認不被R1識別的,而且默認也是不被R1傳遞的。

只是設定而已,但是這個屬性不會被R1識別和傳遞,所以在R2上看到的路由就不會偕帶no-advertise屬性。

要讓他可以識別和傳遞

R1(config)# router bgp 1
R1(config-router)# neighbor 12.1.1.2 send-community
如果直接按確定就是both,會把標準的和擴展的全部激活。
R1(config-router)# neighbor 12.1.1.2 send-community standard
如果加standard,只激活標準的社團屬性。

R1(config-router)# neighbor 12.1.1.2 send-community 
R1# clear ip bgp * so

R2# show ip bgp 11.1.1.0
R3已經收不到路由

no-advertise的特點:偕帶這個屬性的路由將不會傳給我任何一個BGP的鄰居。



還原R1(config-router)# no neighbor 12.1.1.2 route-map COMM out



. no-export                                     15:20

no-exportlocal-as作用是一樣的,只有在聯邦存在的情況下才有區別。

先把11.1.1.0這條路由抓出來
R2(config)# access-list 1 permit 11.1.1.0

R2(config)# route-map COMM
R2(config-route-map)# match ip address 1
R2(config-route-map)# set community no-export 
R2(config-route-map)# exit

R2(config)# route-map COMM permit 999
R2(config-route-map)# exit

R2(config)# router bgp 64513           (有設定聯邦)
R2(config-router)# neighbor 33.1.1.1 route-map COMM out
在跟33.1.1.1建鄰居的時候掛上route-map COMM在出去的方向。
R2(config-router)# neighbor 33.1.1.1 send-community

R2# clear ip bgp * so


R3# show ip bgp
首先這條路由可以收到
R3# show ip bgp 11.1.1.0 


R4# show ip bgp
這條路由也能傳給R4

R4# show ip bgp 11.1.1.0
R4在明細看不到這條路由所偕帶no-export這個屬性

R3收到的這條路由偕帶了no-export這個屬性,但是R3要能夠把繼續把no-export屬性傳遞下去,R3必需要配置一個send-communityR3不配置的話默認不識別也不傳遞。

R4要收到no-export的話,就要在R3上配置send-community
R3(config)# router bgp 64513
R3(config-router)# neighbor 33.1.1.1 send-community
R3在跟R4建立eBGP鄰居關係的時候,要去做send-community (識別no-export並且傳遞給R4)

默認情況下所有路由器都不能識別Community屬性,如果要讓他一跳一跳往下傳就要在所有路由器上配置send-community,大家才能夠識別並且傳遞。

R4# show ip bgp 11.1.1.0 

R5# show ip bgp
現在R5收不到路由了


no-export的特點:路由明細有no-export他將不會傳出一個AS
在沒有聯邦的情況下打上no-exportlocal-as結果是一樣的:偕帶這兩個屬性的路由都不會傳出一個AS

在有聯邦的情況下:

R1上建一個環回口
R1(config)# interface loopback 1
R1(config-if)# ip address 111.1.1.1 255.255.255.0
R1(config-if)# exit
R1(config)# router bgp 1
R1(config-router)# network 111.1.1.0 mask 255.255.255.0

現在只要針對111.1.1.1這條路由,配置local-as屬性,在R2上配置。
R2(config)# access-list 2 permit 111.1.1.0



一般要做任何變動的時候,建議做一個route-map,調用在一個鄰居關係。

在目前的環境下不需要建立一個新的,直接在route-map下面改
R2(config)# route-map COMM permit 20
第一個COMMpermit 10,所以要加permit 20就像是加一句寫在10的下面,跟ACL一樣

R2(config-route-map)# match ip address 2
R2(config-route-map)# set community local-AS 
R2(config-route-map)# exit

R2# show runn
COMM permit 10是針對ACL 1no-export屬性,COMM permit 20是針對ACL 2local-AS屬性,最後一句permit 999是放行其他的路由。


然後COMM調用在跟R3建立鄰居關係的時候掛上route-map COMM在出去的方向。
建議所有的配置都在一個route-map前面做,然後一個route-map是被調用的

R2# show ip bgp


R3# show ip bgp 

R3# show ip bgp 111.1.1.0
Local-AS打上了

為什麼能夠順利的打上,有一步沒做但之前已經配置好了send-community

如果發現打不上要去查send-community有沒有配置

R4# show ip bgp
R4上收不到111.1.1.1的路由,R5也收不到

local-as的特點:偕帶local-as的路由,在有聯邦的情況下,不會傳出一個小的AS

no-exportlocal-AS的總結:
. 在無聯邦的情況下local-AS等於no-export(這兩個屬性是一樣的)
. 在有聯邦的情況下
1. 打上no-export屬性的路由是不會傳出一個大AS
2. 打上local-AS屬性的路由是不會傳出一個小AS

在沒有聯邦是一個結論,在有聯邦的時候又是一個結論。



其它的Community                                  29:00

. 私有的Community相當於給路由做標記,對端再採取一定的措施。
. 標準的Community就是普通路由器設定的包括眾所皆知的Community和私有的Community
. 擴展的CommunityMPLS中的VRF路由傳遞所定義的。

簡單的配置私有的AS
R2(config)# interface loopback 1
R2(config-if)# ip address 122.1.1.1 255.255.255.0
R2(config-if)# exit
R2(config)# router bgp 64513
R2(config-router)# network 122.1.1.0 mask 255.255.255.0

現在針對122.1.1.1這條路由給他打上私有的Community屬性
R2(config)# access-list 3 permit 122.1.1.0
因為R2上有route-mapCOMM
R2(config)# route-map COMM permit 30
R2(config-route-map)# match ip address 3
R2(config-route-map)# set community ?
社團屬性的格式


R2(config-route-map)# set community 234:1234
這可以理解為一個Tag,是一個標籤,234:1234這個Tag一點功能都沒有,接下來要發生什麼東西路由要怎樣,還是要管理員來做策略,你的策略怎麼做他就怎麼走。

R3# show ip bgp 

R3# show ip bgp 122.1.1.0
15336658這是老舊的呈現形式,要把他改成新的呈現形式,但不影響結果。
R3(config)# ip bgp-community new-format

R3# show ip bgp 122.1.1.0
這個只在本地有效



BGP路由過濾                                 34:40

1. ip prefix-list  前綴列表
2. ACL
3. AS-Path list
4. Community-list

ip prefix-listACL都能夠去抓路由,他們的區別為:ip prefix-list只能抓路由,ACL能抓路由也能抓數據。

一般情況ACL下被調用在物理接口下,是在做數據層面的控制;如果這個ACL沒有調用在物理接口下,他抓的就是路由。

ip prefix-listACL好在哪裡:

因為ACL在抓路由的時候,他對掩碼控制不是那麼精確,才會有ip prefix-list來對掩碼的精確控制。

10.1.1.0/2410.1.1.0/2510.1.1.0/26網路號是一樣的唯一不一樣的是掩碼,ACL不能對掩碼精確控制,如果用前綴列表就非常好抓。
R5(config)# ip prefix-list test permit 10.1.1.0/24 ge 24 le 26
R5(config)# ip prefix-list test permit 10.1.1.0/x ge y le z
X小於Y小於等於Z

10.1.1.0/24說明網段的前24位是不變的,可變的是掩碼,通過gele來控制掩碼,從什麼時候開始到什麼時候結束。
R5(config)# ip prefix-list test permit 10.1.1.0/24 le 26
test名字,ge又不能等於24,可以不寫ge24,他就從24開始,直接寫le 26

這樣寫的話前面10.1.1.0是不變的,他掩碼可變為242526


10.1.1.0/2810.1.1.0/2910.1.1.0/3010.1.1.0/3110.1.1.0/32
R5(config)# ip prefix-list ABCD permit 10.1.1.0/24 ge28
不寫le就是直接到32

10.1.1.0/2810.1.1.0/2910.1.1.0/3010.1.1.0/31
R5(config)# ip prefix-list ABCD permit 10.1.1.0/24 ge28 le31

沒有ge的情況ge就從X開始,沒有le的情況le就是32



3. AS-Path list                                45:20

R1(config)# interface loopback 2
R1(config-if)# ip address 132.1.1.1 255.255.255.0
R1(config-if)# exit
R1(config)# router bgp 1
R1(config-router)# network 132.1.1.0 mask 255.255.255.0

R5# show ip bgp
這個路由的AS-Path經過AS 234AS 1,他也在AS-Path list裡面。

AS-Path list可以針對你的AS-Path當中有哪些號碼然後來抓路由。

假設AS 234有一萬條路由,在R5上現在要把AS 234的一萬條路由全部抓出來,通過AS-Path來抓這些路由
R5(config)# ip as-path access-list 1 permit ^234_



4. Community-list                                50:40

R3# show ip bgp 122.1.1.1
上面已針對122.1.1.1打了私有社團屬性,現在抓路由可以針對偕帶私有社團屬性的Tag抓出來

R3(config)# ip community-list 1 permit 234:1234
通過Community-list234:1234,相當於把所有偕帶234:1234屬性路由全部抓出來。

R3(config)# route-map test
R3(config-route-map)# match community 1
R3(config-route-map)# set 
抓出來之後可以做route-map test,然後匹配community 1,匹配community 1就是匹配Community-list抓出來的那些路由,然後在去做set

先把一些路由打上community,在通過community-list把這些路由抓出來,可以在route-map調用community-list,然後做相應的set