소개
이 문서에서는 외부 BGP(Border Gateway Protocol) 피어로부터 수신된 경우 잘못 구성된 라우터 MAC 확장 커뮤니티 특성이 ACI 패브릭에 미치는 영향에 대해 설명합니다.
배경 정보
BGP에서는 BGP 피어에 광고되는 접두사와 함께 커뮤니티 및 확장 커뮤니티 특성을 보낼 수 있습니다. 이러한 커뮤니티 특성을 사용하면 라우팅 정책을 수정하고 라우팅된 트래픽을 처리하는 방법을 동적으로 변경할 수 있습니다.
문제
라우터 MAC 확장 커뮤니티 특성이 IPv4 AFI 접두사와 함께 외부 BGP 피어에서 ACI 패브릭으로 전송되면 내부 MP-BGP 프로세스를 통해 보더 리프로부터 경로를 수신하는 패브릭의 모든 리프에 FIB 및 HAL 오프로그래밍이 발생합니다. 이는 RMAC extcommunity 특성이 BGP L2VPN EVPN 주소군에 속하며 BGP IPv4 주소군에 삽입되면 거부되기 때문입니다. 이는 규칙 5.2(Uniform-Propagation-Mode)를 위반했기 때문이며, 이는 IETF 문서 "EVPN과 IPVPN의 상호 연동"에 설명되어 있습니다. 15페이지 4c 항목에서 특정 문제를 다룹니다.
4. As discussed, Communities, Extended Communities and Large
Communities SHOULD be kept by the gateway PE from the originating
SAFI route. Exceptions of Extended Communities that SHOULD NOT
be kept are:
C. All the extended communities of type EVPN.
The gateway PE SHOULD NOT copy the above extended communities
from the originating ISF route to the re-advertised ISF route.
문서 링크: IPVPN과 EVPN 상호 연동
다음은 iBGP 문제의 예입니다. 그러나 eBGP에서도 문제가 나타납니다.
토폴로지 다이어그램:
토폴로지 다이어그램
외부 BGP 피어 디바이스(라우터 1)에서 경로 맵을 구성하고 EVPN RMAC extcommunity 특성을 설정합니다.
Router-1# show run | sec route-map
route-map RMAC permit 10
set extcommunity evpn rmac aaaa.bbbb.cccc
BGP 인접 디바이스 IPv4 주소군 컨피그레이션에서 BGP 확장 커뮤니티를 구성하고 아웃바운드 방향의 경로 맵을 구성합니다.
Router-1# show run bgp
<output omitted>
feature bgp
router bgp 65001
vrf example
router-id 192.168.20.20
address-family ipv4 unicast
network 192.168.20.0/24
neighbor 192.168.30.30
remote-as 65001
update-source loopback1
address-family ipv4 unicast
send-community extended
route-map RMAC out
BL 101에서 BGP 상태를 확인합니다.
leaf-101# show ip bgp 192.168.20.0 vrf example:example
BGP routing table information for VRF example:example, address family IPv4 Unicast
BGP routing table entry for 192.168.20.0/24, version 40 dest ptr 0xa0fec840
Paths: (1 available, best #1)
Flags: (0x80c001a 00000000) on xmit-list, is in urib, is best urib route, is in HW, exported
vpn: version 2725, (0x100002) on xmit-list
Multipath: eBGP iBGP
Advertised path-id 1, VPN AF advertised path-id 1
Path type (0xa96485b8): internal 0x18 0x0 ref 0 adv path ref 2, path is valid, is best path
AS-Path: NONE, path sourced internal to AS
192.168.20.20 (metric 5) from 192.168.20.20 (192.168.20.20)
Origin IGP, MED not set, localpref 100, weight 0 tag 0, propagate 0
Extcommunity:
RT:65001:2162688
COST:pre-bestpath:163:1879048192
Router MAC:aaaa.bbbb.cccc
***Notice that the router mac is present here.***
VNID:2162688
VRF advertise information:
Path-id 1 not advertised to any peer
VPN AF advertise information:
Path-id 1 advertised to peers:
10.0.216.65 10.0.216.66
CL 102에서 RIB 체크:
leaf-102# show ip route 192.168.20.0 vrf example:example
IP Route Table for VRF "example:example"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>
192.168.20.0/24, ubest/mbest: 1/0
*via 10.0.210.70%overlay-1, [200/0], 00:00:43, bgp-65001, internal, tag 65001, rwVnid: vxlan-2162688
recursive next hop: 10.0.210.70/32%overlay-1
***Notice that we have the route here and our next-hop address is correct (showing the TEP IP of BL 101). Also, notice that there is an rwVnid entry here.***
leaf-102# acidiag fnvread | grep 101
101 1 leaf-101 <output omitted> 10.0.210.70/32 leaf active 0
CL 102에서 FIB를 선택합니다.
module-1(DBG-elam-insel6)# show forwarding route 192.168.20.0 vrf example:example
ERROR: no longest match in IPv4 table 0xf5df36b0
***No entry is present.***
CL 102에서 HAL 테이블을 확인합니다.
module-1(DBG-elam-insel6)# show platform internal hal l3 routes | grep 192.168.20.0
***No entry is present.***
EP(Host 1)에서 외부 BGP 피어(192.168.20.20)에서 오는 외부 네트워크의 호스트로의 ping:
Host-1# ping 192.168.20.20 vrf example
PING 192.168.20.20 (192.168.20.20): 56 data bytes
Request 0 timed out
Request 1 timed out
Request 2 timed out
Request 3 timed out
Request 4 timed out
--- 192.168.20.20 ping statistics ---
5 packets transmitted, 0 packets received, 100.00% packet loss
***No connectivity.***
CL 102에서 ELAM을 선택합니다.
leaf-102# vsh_lc
module-1# debug platform internal roc elam asic 0
module-1(DBG-elam)# trigger reset
module-1(DBG-elam)# trigger init in-select 6 out-select 0
module-1(DBG-elam-insel6)# set outer ipv4 src_ip 192.168.10.10 dst_ip 192.168.20.20
module-1(DBG-elam-insel6)# start
module-1(DBG-elam-insel6)# stat
ELAM STATUS
===========
Asic 0 Slice 0 Status Armed
Asic 0 Slice 1 Status Triggered
module-1(DBG-elam-insel6)# ereport
Python available. Continue ELAM decode with LC Pkg
ELAM REPORT
<output omitted>
------------------------------------------------------------------------------------------------------------------------------------------------------
Lookup Drop
------------------------------------------------------------------------------------------------------------------------------------------------------
LU drop reason : UC_PC_CFG_TABLE_DROP
***Notice the drop vector here.***
솔루션
해결 방법은 외부 BGP 피어에서 ACI 패브릭으로 IPv4 주소군 접두사를 사용하는 라우터 MAC 확장 커뮤니티 특성의 전송을 중지하는 것입니다.
이전에 구성된 경로 맵을 제거하고 외부 BGP 피어 디바이스(라우터 1)에서 확장 커뮤니티 전송을 중지합니다. 다음 구성 중 하나 또는 둘 모두를 제거하면 작동합니다.
Router-1# show run bgp
다른(선호도가 낮은) 솔루션은 ACI에서 구성된 L3Out에 경로 맵을 만들어 외부 BGP 피어 디바이스에서 수신한 모든 커뮤니티를 필터링하는 것입니다.
탐색: Tenant > Policies > Protocol > Route Maps for Route Control > Create Route Maps for Route Control
:
경로 제어를 위한 경로 맵 생성 옵션을 선택합니다
경로 맵의 이름을 지정하고 Route-Map Continue
컨텍스트를 추가합니다. 다음을 선택합니다. +
컨텍스트 테이블의 아이콘:
경로 맵 생성 및 컨텍스트 생성
컨텍스트의 이름을 지정하고 기본 작업을 Permit
선택한 다음 +
아이콘 Associated Matched Rules
테이블 및 선택 Create Match Rule for a Route Map
:
경로 제어 컨텍스트 생성 및 경로 맵에 대한 Create Match Rule(일치 규칙 생성) 옵션 선택
일치 규칙의 이름을 지정한 다음,에서 + 아이콘을 선택하여 새 접두사를 추가합니다. Match Prefix
표:
일치 규칙 생성 및 일치 접두사 생성
원하는 접두사를 추가합니다. 이 예에서는 모든 접두사의 집계를 추가하는 방법을 보여 줍니다.
일치 경로 대상 규칙 만들기
선택한 후 OK
의 Create Match Route Destination Rule
창에 접두사가 추가되어 Match Prefix
표 Create Match Rule
창:
Match Prefix가 이제 Match Rule에 추가되었습니다.
선택한 후 Submit
의 Create Match Rule
창에서 다음을 선택합니다. Update
의 Associated Matched Rules
표 Create Route Control Context
창:
경로 제어 컨텍스트에 관련 일치 규칙 추가
이제 연결된 일치 규칙이 컨텍스트에 추가됩니다.
이제 연결된 일치 규칙이 경로 제어 컨텍스트에 추가되었습니다.
다음으로, 다음 옆의 드롭다운 메뉴를 선택합니다. Set Rule
및 선택 Create Set Rules for a Route Map
:
Create Set Rules for a Route Map 옵션을 선택합니다.
집합 규칙의 이름을 지정한 다음 Set Community
기본 조건을 No community
selected:
경로 맵에 대한 규칙 설정 생성
Finish(마침)를 선택한 후 Create Set Rules for a Route Map
창에서 선택한 규칙 집합이 표시됩니다. Create Route Control Context
창:
이제 Set Rule이 Route Control Context에 추가되었습니다
선택한 후 OK
의 Create Route Control Context
창에 컨텍스트가 추가되어 Contexts
표 Create Route Maps for Route Control
창입니다. 마지막으로 Submit
컨피그레이션을 완료하려면
이제 컨텍스트가 경로 맵에 추가되었습니다.
L3Out에서 BGP 피어 연결 프로파일로 이동하여 +
아이콘 Route Control Profile
테이블을 클릭한 다음 기본 방향을 사용하여 경로 맵을 추가합니다. Route Import Policy
selected:
BGP 피어 연결 프로파일에 경로 맵 추가
경로 맵에 대해 Update(업데이트)를 선택하면 다음에 추가된 경로 맵이 표시됩니다. Route Control Profile
표:
이제 경로 맵이 BGP 피어 연결 프로파일에 추가되었습니다.
*ACI의 경로 맵 컨피그레이션 옵션에 대한 자세한 내용은 ACI 패브릭 L3Out 백서를 참조하십시오
위의 해결 방법 중 하나를 구현한 후 문제가 해결되었는지 확인합니다.
BL 101에서 BGP 상태를 확인합니다.
leaf-101# show ip bgp 192.168.20.0 vrf example:example
BGP routing table information for VRF example:example, address family IPv4 Unicast
BGP routing table entry for 192.168.20.0/24, version 46 dest ptr 0xa0fec840
Paths: (1 available, best #1)
Flags: (0x80c001a 00000000) on xmit-list, is in urib, is best urib route, is in HW, exported
vpn: version 2731, (0x100002) on xmit-list
Multipath: eBGP iBGP
Advertised path-id 1, VPN AF advertised path-id 1
Path type (0xa96485b8): internal 0x18 0x0 ref 0 adv path ref 2, path is valid, is best path
AS-Path: NONE, path sourced internal to AS
192.168.20.20 (metric 5) from 192.168.20.20 (192.168.20.20)
Origin IGP, MED not set, localpref 100, weight 0 tag 0, propagate 0
Extcommunity:
RT:65001:2162688
COST:pre-bestpath:163:1879048192
***Notice that no router mac is present here.***
VNID:2162688
VRF advertise information:
Path-id 1 not advertised to any peer
VPN AF advertise information:
Path-id 1 advertised to peers:
10.0.216.65 10.0.216.66
CL 102에서 RIB 체크:
leaf-102# show ip route 192.168.20.0 vrf example:example
IP Route Table for VRF "example:example"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>
192.168.20.0/24, ubest/mbest: 1/0
*via 10.0.210.70%overlay-1, [200/0], 00:00:06, bgp-65001, internal, tag 65001
recursive next hop: 10.0.210.70/32%overlay-1
***Notice that no rwVnid entry is present here.***
참고: rwVnid 항목의 부재 또는 존재만으로는 문제의 발생 여부가 결정됩니다. 문제가 해결되면 라우트에서 rwVnid 항목이 제거되는 경우가 많습니다. 그러나 항상 그런 것은 아니다. 문제가 해결되었는지 확인하기 위해 항상 FIB 및 HAL 테이블을 확인합니다.
CL 102에서 FIB를 선택합니다.
module-1(DBG-elam-insel6)# show forwarding route 192.168.20.0 vrf example:example
IPv4 routes for table example:example/base
------------------+------------------+----------------------+------------------------
Prefix | Next-hop | Interface/VRF | Additional Info
------------------+------------------+----------------------+------------------------
*192.168.20.0/24 10.0.210.70 overlay-1
***Notice that we have the route here and our next-hop address is correct (showing the TEP IP of BL 101).***
Route Class-id:0x0
Policy Prefix 0.0.0.0/0
leaf-102# acidiag fnvread | grep 101
101 1 leaf-101 10.0.210.70/32 leaf active 0
CL 102의 HAL 테이블:
module-1(DBG-elam-insel6)# show platform internal hal l3 routes | grep 192.168.20.0
| 4662| 192.168.20.0/ 24| UC| 686| 20601| TRIE| a5| 5/ 0| 60a5|A| 8443| 86b6| ef5| 1/ 2| a5| 0| 0| f| 3| 0| 0| 1| sc,spi,dpi
***Notice that we have an entry here and it's in the correct VRF.***
module-1(DBG-elam-insel6)# hex 4662
0x1236
module-1(DBG-elam-insel6)# show platform internal hal l3 vrf pi
============================================================================================================
| -- TOR -- | - Spine - | ACL | |
Vrf Hw I I Vrf | SB NB | Proxy ACI | Ing Egr | vpn |
VrfId Name VrfId I S Vnid | BDId BDId | Ou Bd Enc | Lbl Msk Lbl Msk | lbl |
============================================================================================================
26 example:example 1236 0 0 210000 0 0 0 1 0 0 0 0 0
EP(Host 1)에서 외부 BGP 피어(192.168.20.20)에서 오는 외부 네트워크의 호스트로의 ping:
Host-1# ping 192.168.20.20 vrf example
PING 192.168.20.20 (192.168.20.20): 56 data bytes
64 bytes from 192.168.20.20: icmp_seq=0 ttl=252 time=1.043 ms
64 bytes from 192.168.20.20: icmp_seq=1 ttl=252 time=1.292 ms
64 bytes from 192.168.20.20: icmp_seq=2 ttl=252 time=1.004 ms
64 bytes from 192.168.20.20: icmp_seq=3 ttl=252 time=0.769 ms
64 bytes from 192.168.20.20: icmp_seq=4 ttl=252 time=1.265 ms
--- 192.168.20.20 ping statistics ---
5 packets transmitted, 5 packets received, 0.00% packet loss
round-trip min/avg/max = 0.769/1.074/1.292 ms
***Connectivity is there.***
CL 102의 ELAM:
leaf-102# vsh_lc
module-1# debug platform internal roc elam asic 0
module-1(DBG-elam)# trigger reset
module-1(DBG-elam)# trigger init in-select 6 out-select 0
module-1(DBG-elam-insel6)# set outer ipv4 src_ip 192.168.10.10 dst_ip 192.168.20.20
module-1(DBG-elam-insel6)# start
module-1(DBG-elam-insel6)# stat
ELAM STATUS
===========
Asic 0 Slice 0 Status Armed
Asic 0 Slice 1 Status Triggered
module-1(DBG-elam-insel6)# ereport
Python available. Continue ELAM decode with LC Pkg
ELAM REPORT
<output omitted>
------------------------------------------------------------------------------------------------------------------------------------------------------
Lookup Drop
------------------------------------------------------------------------------------------------------------------------------------------------------
LU drop reason : no drop
***Traffic forwards correctly.***
관련 정보