본문 바로가기

Network 모험기

[#3-3]BGP AS-path 정규식 활용하기

오늘은 BGP에 대한 내용중에서도 광고받는 혹은 광고하는 AS를 핸들링하기위해, 

정규식을 활용하는 방안에 대해서 설명하려 합니다 

 

정규식을 검증하는 사이트는 아래와 같으며, test를 눌러주시면 상단 Expression에 작성한 내용이 맞는지 검증 가능합니다. 

유의하실 점은 'Match full'로 하셔야 하며, 안타깝게도 이번에 설명하고자 하는 식들 중 '_'에 해당하는건 매칭이 되지않습니다.. 

Cisco에서 고유하게 사용하는 문자인지 잘은 모르겠습니다만 아래 사이트에서는 먹히질 않네요 . 

 

정규식 검증 사이트 URL : https://regexr.com

접속 시 초기화면

 

꼭 Match full 을 해주세요

 

 

1. 정규식이란? 

 정규식은 입력문자열과 일치하는 패턴을 나타내며, 한 정규식으로 나타낼 수 있는 문자열은 없을수도, 무수히 많을 수도 있습니다. 

 BGP에서의 활용은 AS-Path 중 표현된 정규식에 포함되냐 안포함되냐로 광고를 안받을수도, 광고를 안할수도 있습니다. 

 

2. 정규식 구성요소 

 

 - 범위 : 범위는 오른쪽 및 왼쪽 대괄호 안의 문자 중 포함되었는지 확인(1글자 한정) 

              ex) [abcd] : a    b     c     d      [0-9] : 0     1     2    3  등..  

 

 - 원자 : 단독으로 사용되며, 특수한 의미를 가진다고 생각하면 됩니다. 

 

            . : 단일 문자와 일치. 1글자면 통과, 2글자 이상이면 failed 

              ex) 1 : pass    t : pass ,   t5 : fail       ii : fail 

 

            ^ : 입력 문자열의 시작을 의미 

 

            $ : 입력 문자열의 끝을 의미 

 

             \ : 문자를 의미하며, \뒤에 입력한 문자열이 있으면 Pass , 그 외는 fail  (이거 정확하게 이해를 못했습니다) 
             ex) \ww : ww -> pass           wt -> Fail 

 

            _ : 쉼표(,), 왼쪽({) 및 오른쪽(}) 중괄호, 입력 문자열의 시작, 입력 문자열의 끝 또는 공백과 일치 
               정규식 사이트에서 표현이 안되는것보면 Cisco에서만 사용하는 기호이지 않을까 싶습니다. 
               AS-path handling에 가장 핵심인 원자 입니다 

 

   - 조각 : 조각은 원자 뒤에 오는 다음 기호 중 하나를 의미합니다.


           * : 원자의 0개 이상 문자와 일치

              ex) 5* : 공백, 5, 55, 555 등 5로만 구성된 문자열을 의미

 

           + : 원자의 1개 이상 문자와 일치
              ex) 5+ : 5, 55, 555 등 공백이 빠진 5*과 동일

 

           ? : 원자 또는 null문자열과 일치
              ex) 5? : (null), 5 만 해당

 

글을 쓰면서도 헷갈리는 개념은 여기까지하고 몇가지 예시를 한번 봐보시죠.

*AS-path 는 Null 이거나 , '100 444', '5 3 1 2' 이런 식으로 숫자-공백-숫자 이렇게 나간다는것을 기억해주세요 

맨 앞의 AS는 직접 연결된 AS이고 제일 마지막 AS는 해당 대역의 출처인 AS라고 생각하시면 됩니다. 

 

ab?a : aa 혹은 aba와 일치

_100_ : BGP AS-path 중 100을 포함하는 모든 AS-path를 의미 

_100$ : 경로의 출처가 AS 100인 모든 AS-path를 의미 

^100 .* : AS 100에서 전달받은 모든 AS-path를 의미 , 100 4 1001, 100 384 303 303 등 

^$ : AS-path에 아무 값도 없는 것을 의미 

 

이번에는 낯선 개념이라 Lab을 진행해봤습니다. 

 

3. Lab

 

 1) Lab 구성도 

제가 이번에 이용할 구성은 아래와 같습니다. 직관적이게 IP와 AS를 할당했습니다. 

각 라우터는 전부 eBGP로 연결되어있습니다. 

 

 

 2) Lab Config 

 

몇번의 게시글 중에 처음으로 적용한 Config를 공유드립니다. 

부끄럽지만 여기서는 정규식을 설명하는 것이기에, 다른 것들은 미흡한 것들은 넘어가주시면 감사하겠습니다. . 

 

#Router1 config 

int e0/0
 no swithchport 
 ip address 10.12.12.1 255.255.255.252
 no shutdown 
 
int lo0 
 ip address 1.1.1.1 255.255.255.255 
 
 
router bgp 1 
 no auto-summary 
 no sync
 network 1.1.1.1 mask 255.255.255.255
 neighbor 10.12.12.2 remote-as 2

 

#Router2 config 

int e0/0 
 no switchport 
 ip address 10.12.12.2 255.255.255.252
 no shutdown 
 
int e0/1 
 no switchport 
 ip address 10.23.23.1 255.255.255.252
 no shutdown 
 
int lo0 
 ip address 2.2.2.2 255.255.255.255
 
router bgp 2 
 no auto-summary 
 no sync 
 network 2.2.2.2 mask 255.255.255.255
 neighbor 10.12.12.1 remote-as 1 
 neighbor 10.23.23.2 remote-as 3

 

이런 느낌으로 나머지 3,4,5도 설정했고, 이정도만 적어도 이해하실거라 생각합니다. 

 

이제 정규식을 활용한 AS-path filtering을 해보겠습니다. 

Filtering을 위한 기본적인 config는 아래와 같습니다. 

Neighbor에 route-map을 설정하는데 Inbound방향으로 걸었으니, 광고받는 대역에 대해 제어하겠다는 의미입니다. 

만약 Out 으로 걸었다면, 광고하는 네트워크를 제어하게됩니다

router bgp 1 
 neighbor 10.12.12.2 route-map test1 in 
 
#이곳에 시나리오별 as-path access-list를 넣을겁니다 
#이곳에 시나리오별 as-path access-list를 넣을겁니다

route-map test1 permit 10 
 match as-path 1

 

AS filtering은 Router1에서 진행하며, 아무 filtering이 거치지않은 BGP table은 아래와 같습니다. 

 

Router1이 광고하고있는 Network와 각 eBGP에서 광고하는 대역들이 Router1에서 모두 잘 보이고 있습니다. 

그럼 총 5가지의 시나리오를 진행해보겠습니다. 


시나리오 #1 

AS 4가 들어있는 경로는 전부 빼버리고, 나머지는 허용

 

 ip as-path access-list 1 deny _4_

 ip as-path access-list 1 permit .*

 

결과 

 

 


시나리오 #2

AS 3에서 발생한 네트워크만 제외하고, 나머지는 허용 

 

ip as-path access-list 1 deny _3$ 

 

ip as-path access-list 1  permit .* 

 

결과 

 


시나리오 #3

AS 5에서 발생한 경로만 허용 

 

ip as-path access-list 1 permit _5$ 

 

결과 

 


시나리오 #4

AS 2 혹은 AS 2와 직접 연결된 AS에서만 경로 허용

 

ip as-path access-list 1 permit  ^2_[0-9]*$

 

결과 

 


시나리오 #5

AS 2 혹은 AS 2와 2홉까지 연결된 AS에서만 경로 허용 

 

ip as-path access-list 1 permit ^2_[0-9]*_[0-9]*$ 

 

 

결과 

 

 

 

4. 맺으며,

 

저도 완벽히 이해한 것은 아닌지, 글을 쓰는 내내 이 표현이 맞나 갸우뚱하면서 썼습니다. 

우리는 개발자가 아니기에 더 복잡하고 완벽한 정규식을 만든다! 가 아닌 BGP AS path 핸들링을 중점으로 딱 ! 그정도만 가져갑시다 

관련해서 궁금한 내용은 댓글달아주시면 24시간 내로 답변 드리겠습니다 !