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
在R2上show 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-export和local-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-community,R3不配置的話默認不識別也不傳遞。
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-export和local-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
第一個COMM是permit 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 1做no-export屬性,COMM permit 20是針對ACL 2做local-AS屬性,最後一句permit 999是放行其他的路由。建議所有的配置都在一個route-map前面做,然後一個route-map是被調用的
R2# show ip bgp
R3# show ip bgp
Local-AS打上了
為什麼能夠順利的打上,有一步沒做但之前已經配置好了send-community。
如果發現打不上要去查send-community有沒有配置
R4# show ip bgp
在R4上收不到111.1.1.1的路由,R5也收不到
local-as的特點:偕帶local-as的路由,在有聯邦的情況下,不會傳出一個小的AS
no-export和local-AS的總結:
一. 在無聯邦的情況下local-AS等於no-export。(這兩個屬性是一樣的)
二. 在有聯邦的情況下
1. 打上no-export屬性的路由是不會傳出一個大AS
2. 打上local-AS屬性的路由是不會傳出一個小AS
在沒有聯邦是一個結論,在有聯邦的時候又是一個結論。
其它的Community 29:00
一. 私有的Community相當於給路由做標記,對端再採取一定的措施。
二. 標準的Community就是普通路由器設定的包括眾所皆知的Community和私有的Community。
三. 擴展的Community為MPLS中的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-map叫COMM,
R2(config)# route-map COMM
permit 30
R2(config-route-map)# match
ip address 3
R2(config-route-map)# set
community ?
社團屬性的格式
這可以理解為一個Tag,是一個標籤,234:1234這個Tag一點功能都沒有,接下來要發生什麼東西路由要怎樣,還是要管理員來做策略,你的策略怎麼做他就怎麼走。
R3# show ip bgp
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-list和ACL都能夠去抓路由,他們的區別為:ip prefix-list只能抓路由,ACL能抓路由也能抓數據。
一般情況ACL下被調用在物理接口下,是在做數據層面的控制;如果這個ACL沒有調用在物理接口下,他抓的就是路由。
ip prefix-list比ACL好在哪裡:
因為ACL在抓路由的時候,他對掩碼控制不是那麼精確,才會有ip prefix-list來對掩碼的精確控制。
10.1.1.0/24、10.1.1.0/25、10.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位是不變的,可變的是掩碼,通過ge和le來控制掩碼,從什麼時候開始到什麼時候結束。
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是不變的,他掩碼可變為24、25、26。
10.1.1.0/28、10.1.1.0/29、10.1.1.0/30、10.1.1.0/31、10.1.1.0/32
R5(config)# ip prefix-list
ABCD permit 10.1.1.0/24 ge28 不寫le就是直接到32位
10.1.1.0/28、10.1.1.0/29、10.1.1.0/30、10.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 234和AS 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-list抓234: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。