오늘은 BGP aggregate에 대한 내용을 알아보겠습니다.
Lab에는 지난번 작성했던 Community에 대한 내용과 정규식에 대한 내용도 포함되어있으니,
잘 모르시는 분은 읽고 오시는것도 좋습니다.
aggregate라는 개념은 지난번 BGP best path selection을 공부하면서 처음 알았고,
낯선 개념이니만큼 글이 두서가 없더라도 이해하시면서 읽어주시면 감사하겠습니다.
aggregate는 사전적 의미로 함축을 의미한다는것을 상기하면서 바로 LAB으로 들어가겠습니다.
1. 구성도
지난번 Community를 설명할때 사용한 구성을 재활용하겠습니다
각 라우터는 Router2와 eBGP 혹은 iBGP로 연결되어있고, 모든 대역들이 각 라우터에서 광고받고 있습니다.
시나리오#1
aggregate-address를 생성하는데 summary-only 옵션을 단채로 Router2에 생성해보겠습니다
Command는 아래와 같습니다.
<Router2>
router bgp 2
address-family ipv4
aggregate-address 10.10.0.0 255.255.0.0 summary-only
aggregate-address를 생성하니, show ip bgp 출력에 처음보는 s가 생성되었습니다.
상단의 Status codes를 보아하니, s의 의미는 suppressed 즉, 억제되었음을 알 수 있습니다.
summary-only command를 적용해서, aggregate에 포함된 specific한 대역들은 peer에게 광고되지않습니다.
억제되었어도 >를 보아하니 Best path selection의 최종 우승자인가보네요. 다른 동적라우팅 프로토콜이 없다는 가정하에는 모두 라우팅 테이블에 올라갔을 겁니다.
이야기 나온김에 라우팅 테이블도 보고 가겠습니다.
예상대로 각 대역들은 라우팅 테이블에 올라와 있습니다만 예상치못한게 하나 끼어있는걸 볼 수 있습니다.
10.10.0.0/16 부분을 봐주시면 되는데, aggregate-address만 정의했는데도, Null 라우팅이 잡혀있습니다.
BGP에서 대역을 광고하기 위해서는 라우팅테이블에 올라와 있어야한다는 개념은 아실겁니다.
따라서 aggregate된 대역을 광고하기 위해, 자동으로 해당 summary에 대한 Null 라우팅이 만들어지는것으로 보입니다.
근데 무려 AD값이 200으로 iBGP에서 생성된 Null라우팅 취급을 하고 있습니다.
그렇다면 eBGP로 연결된 라우터와 iBGP로 연결된 라우터에서 어떻게 광고를 받는지 확인해보겠습니다.
우선 eBGP로 연결된 Router1에서의 BGP table을 확인해보면 위와 같습니다.
10.10.0.0/16에 포함된 다른 대역들은 하나도 보이지않고, 오직 aggregate address 만 보이고 있습니다.
또한 eBGP로 받은 경로이기에 Path값에는 출처가 보이는데, aggregate를 했던 Route2의 AS의 번호만 확인됩니다.
그리고 origin code는 i로 되어있는것이, Network로 선언하는것과 마찬가지로 IGP 취급으로 보입니다.
그리고 상세히 10.10.0.0/16대역을 확인해보겠습니다.
밑에서 두번째 attribute 중 atomic-aggregate를 말씀을 드릴까합니다.
BGP best path selection의 내용에서 3번째 step을 가져와보면,
Network 선언 혹은 redistribute된 대역이 aggregate보다 우선입니다.
이것을 어떻게 광고받는 라우터에서 알까 싶었는데, 위처럼 attribute에 'atomic-aggregate'가 붙어있어,
어떻게 만들어진 대역인지 식별이 가능한것을 보실 수 있습니다.
그럼 iBGP peer인 Router5에서 확인해보겠습니다.
iBGP로 받은 정보도 그렇게 특이한것은 없어보입니다.
iBGP로 받았다는 맨앞의 i 그리고 LocPrf값이 보이고 있고, Path도 아무것도 없습니다. Origin코드는 똑같이 IGP네요.
시나리오#2
이번에는 Summary-only에 as-set을 추가하여 aggregate-address를 만들어 보겠습니다.
Command는 아래와 같고, 동일하게 Router2에서 적용하겠습니다.
<Router2>
router bgp 2
address-family ipv4
aggregate-address 10.10.0.0 255.255.0.0 summary-only as-set
이번에는 aggregate-address AS-path field에 중괄호로 둘러쌓인 숫자들이 보입니다.
이는 함축된 대역이 속해있는 AS들이 열거된 것입니다.
as-set 명령어를 추가함으로써, 어떤 AS에서 온 대역들이 aggregate되었는지 확인할 수 있습니다.
이에 따른 장점으로는 Looping을 방지할 수 있습니다.
물론 longest prefix match로 인해서 루핑이 발생할 일은 거의 없겠지만, 대비해서 나쁜건 없습니다.
! 여기서 잠깐 다른 얘기하나 하고 가겠습니다.
BGP 정규식에서 ' _ '가 의미하는 내용을 다시한번 상기해보겠습니다.
_ : 쉼표(,), 왼쪽({) 및 오른쪽(}) 중괄호, 입력 문자열의 시작, 입력 문자열의 끝 또는 공백과 일치
지난번에 쓴 글을 그대로 가져왔습니다.
그때 당시에는 쉼표, 왼쪽/오른쪽 중괄호가 왜 필요한건지 싶었는데, 이게 aggregate를 공부하면서 해결이 되었네요.
as-set된 Aggregate의 AS-Path도 정규식으로 정의하기 위함이였습니다.
알면 알수록 대단한 BGP, Cisco 입니다.
다시 본론으로 돌아와서, 아래 eBGP peer의 BGP table을 보면서 설명하겠습니다.
Router2에서 as-set command를 적용함으로써, AS-Path에 어떤 대역을 함축했는지를 표기하여 광고를 하고있습니다.
그렇기에 Router1은 AS-path에 자기 AS가 기재되어있는 Aggregate를 받자마자 폐기하고 BGP table에 올리지 않았습니다.
루핑을 방지하기 위함이죠.
정말 어떻게든 쓰고싶다면 지난번 소개한 allowas-in을 활용하여 받을 수는 있겠습니다만, 루핑의 위험이 있다는거 명심해주십시오.
그렇다면 iBGP로 연결되어있는 Router5에서 BGP 테이블을 확인해보겠습니다.
위처럼 정상적으로 Aggregate된 대역을 받아오고 있습니다.
eBGP와 달리 해당 경로의 AS-Path에 자신의 AS가 붙어있지 않기떄문에 정상적으로 BGP table에 올라갈 수 있습니다.
만약 이 상태에서 Router2와 3 사이 BGP가 끊겼다고 가정해보겠습니다.
Router2의 함축된 경로에서 어떤점이 변경 되는지 확인해보시죠.
우선 첫번째로 BGP 테이블에 Router3에서 광고하는 10.10.3.0/24 대역이 사라졌고,
두번째로는 Aggregate된 대역의 AS-Path부분이 기존 {1,3,4}에서 {1,4}로 변경되었습니다.
이로써 as-set을 설정한 Aggregate된 대역은 함축된 대역에 속한 대역들의 AS를 모두 중괄호 안에 집어 넣는다는 것을 알 수 있습니다.
자신이 어떤 어떤 AS에서 받아온 라우팅 대역들을 Aggregate한것인지를 표현하면서,
Looping을 방지할 수 있도록 설계된 것으로 보입니다.
시나리오#3
Community값이 설정된 대역을 함축할 떄 어떤식으로 동작하는지 확인해보겠습니다.
Router1에서 광고하는 10.10.1.0/24 대역에 'no-export' community를 설정한 상태로 Router2에게 광고해보고,
Router2에서 함축된 경로를 어떻게 광고하는지 보겠습니다.
Command는 아래와 같습니다.
<Router1>
route-map test permit 10
set community no-export
router bgp 1
address-family ipv4
neighbor 10.10.12.2 route-map test out
함축된 대역에 설정하지도 않은 No-export가 붙어있는 것을 보실 수 있습니다.
그런데 제가 다른 eBGP peer에서도 확인해보려고 잠깐 AS-set설정을 지워봤더니 아래와 같이 Community값이 빠져있었습니다.
AS-Set 설정 유무에 따라 Community의 상속도 이뤄지는것으로 보입니다.
다시 돌아와서, no-export 특성에 따라 eBGP peer에게는 광고하지않고, iBGP peer에게는 광고하고 있었습니다.
Router 5의 BGP table을 보시죠.
위처럼 iBGP peer에게는 전달되었고, 이제 아무 Peer에게 광고 안하도록 Router1에서 'no-advertise'로 변경해보겠습니다.
Router1의 community값을 상속 받았고, Router5의 BGP table에서도 확인할 수 없었습니다.
시나리오#4
하나만 더해보겠습니다.
방금 환경을 유지한 상태에서 Router3에서 일부러 gshut을 붙여서 보내겠습니다.
현재 Router1로부터는 no-advertise가 Router3으로부터는 gshut이 붙어서 오는 상황입니다.
확인해보고자 하는건 Community가 이것저것 들어오면 Router2에서 함축할때, 모든 Community를 다 붙일것인지 입니다.
Command는 아래와 같습니다.
<Router3>
route-map test permit 10
set community gshut
router bgp 3
address-family ipv4
neighbor 10.10.23.2 route-map test out
당연하게도 위처럼 Community값을 전부 추가하는것으로 확인했습니다.
만약 루핑 방지를 위해서 AS-Set을 반드시 써야하고, Aggregate된 대역에 아무 Community도 설정하고 싶지 않으시다면,
아래와 같이 Attribute-map을 활용하여, 달려있는 Community값을 강제로 다 지우는 방법이 있습니다.
Command는 아래와 같습니다.
<Router2>
route-map test permit 10
set community none
router bgp 2
address-family ipv4
aggregate-address 10.10.0.0 255.255.0.0 as-set summary-only attribute-map test
no-advertise를 붙여서 오는 10.10.1.0/24을 함축했음에도 불구하고,
함축된 10.10.0.0/16은 아무 Community도 달고 있지않을 뿐더러,
아래 보시듯 iBGP로 연결된 Router5에게 정상적으로 함축한 대역을 광고하고 있습니다.
맺으며,,
aggregate를 설정할때, as-set말고 as-confed-set이라는 것이 있길래 뭔가 싶어서 Lab을 해봤는데, AS-path가 이상하게 기입됩니다.
아무래도 지난 'BGP Community 활용하기' 포스팅에서 언급했던 Confederations에 대한 내용이 아닐까 싶습니다.
제가 조금 더 공부하고 나서 덧붙여 놓도록 하겠습니다.
조금씩 BGP에 대한 자신감이 붙을만하면 처음보는 개념들이 하나씩 튀어나오는데, 미치겠으면서 재밌습니다.
아는만큼 설계시에 더 편한 환경을 만들 수 있기 때문에, 언급했던 모든 것들을 완벽히 숙지할때까지 달려보겠습니다.
읽어주신 모든 분께 감사합니다.
'Network 모험기' 카테고리의 다른 글
[L2]VTP와 MST 연계 구성 (3) | 2024.10.28 |
---|---|
[#3-7]BGP route-reflector 공부하기 (0) | 2024.03.20 |
[#3-5]BGP Community 활용하기 (1) | 2024.03.14 |
[#3-4]BGP AS-override, allowas-in 활용하기 (0) | 2024.03.10 |
[#3-3]BGP AS-path 정규식 활용하기 (4) | 2024.03.06 |