본문 바로가기

미국 IT 이야기

Cisco ISR 4451 Router을 이용한 Azure ExpressRoute Private Peering - Part2

이전 포스팅에서는 Cisco ISR 4451 라우터 1대를 이용해서 Azure ExpressRoute Private Peering의 기본 연결을 다루었다. (아래 링크) 이번 포스팅에서는 Cisco ISR 라우터와 Azure ExpressRoute의 BGP 연결에 대해서 살펴보자.  

 

2022.08.02 - [미국 IT 이야기] - Cisco ISR 4451 Router을 이용한 Azure ExpressRoute Private Peering

 

Cisco ISR 4451 Router을 이용한 Azure ExpressRoute Private Peering

Cisco ISR 4451 라우터를 이용해 Azure ExpressRoute Private Peering하는 과정을 설명한다. 아래 다이어그램에서 Partner Edge는 ISP (Internet Service Provider)이고, Customer Network에 Cisco ISR 4451가 놓..

washington.doniq.net

 

 

 

아래의 다이어그램은 Cisco ISR 4451 1대를 이용해 Azure ExpressRoute Private Peering 하는 방법을 설명한 그림이다. Partner Edge와 Cisco ISR 4451은 2개의 Physical Interfaces로 연결되어 있다 (Primary / Secondary) 또한 Cisco ISR 4451은 내부 네트워크와 1개의 Physical interface로 연결되어 있다.    

Cisco ISR 중 3개의 VRF로 연결할 경우

Cisco VRF (Virtual Routing and Forwarding)은 이전 포스팅에서 설명했지만, 다시 간단히 설명하면 1개의 라우터를 몇개의 Virtual Router로 쪼개어 각각 독립적으로 라우팅이 이루어지도록 하는 기술이다. 특별히 ISP와 같이 많은 고객들을 관리할 때 고객마다 라우터를 하나씩 사용하지 않고, 1개로 복수의 고객을 관리할 때 편리하다. 또한 ISP가 아니어도, 네트워크을 세분화하여서 트래픽을 조정할 때 역시 사용된다. 예를들어, 같은 회사이지만, HR팀과 Sales팀의 네트워크를 분리하여서 보안을 강화할때도 사용된다. 

 

 

 

Azure ExpressRoute Private Peering을 Cisco ISR 4451로 연결할 때 VRF가 필요한 이유는 Azure ExpressRoute의 BGP 이중화 때문이다. Microsoft는 Azure ExpressRoute을 설정하기 위해서 기본적인 조건을 만들었다. 즉 2개의 BGP connections을 기본적으로 만들어야 한다는 조건이다. 만약 ISR 4451을 2대 이용하여 ExpressRoute Private Peering을 할 경우에는 VRF가 필요하지 않다. 그러나, 이 포스팅은 라우터 한대를 기준으로 하기 때문에 VRF는 필수적으로 필요하다. 

 

 

Azure ExpressRoute BGP 연결을 다루기 앞서서, Route Distinguisher (RD) 와 Route Target에 대해서 조금 더 깊이 이해해보자. RD는 고객을 구별하는 인식표 정도로 생각하면 된다. 예를들어 고객이 3명 있을 경우, 바나나, 딸기, 사과 이렇게 구별해주는 이름을 RD라고 생각하면 되며, 이를 조금 어렵게 설명하면 BGP community format을 이용하여 바나나, 딸기, 사과를 65513:1, 65513:2, 그리고 65513:3 라고 명명하였다고 생각하면 된다. 이 예제에서 VRF의 기능은 바로 바나나, 딸기, 사과의 네트워크가 서로 독립적으로 운영하게 하는 것이다. 그런데, 이때 사과의 네트워크는 바나나, 그리고 딸기와도 연결이 되어야 한다고 가정해보자. 이 경우 바나나-사과 그리고 딸기-사과 이렇게 연결을 시켜주어야 하는데, 이때 사용하는 것이 바로 route-target 명령어이다. 

 

 

 

ip vrf VRF1 (Primary Peering)
 rd 65513:1 (바나나)
 route-target export 65513:1 (바나나의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:3 (사과의 네트워크를 바나나가 사용하도록 불러들이는 명령어)
!
ip vrf VRF2 (Secondary Peering)
 rd 65513:2 (딸기)
 route-target export 65513:2 (딸기의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:3 (사과의 네트워크를 딸기가 사용하도록 불러들이는 명령어)
!
ip vrf VRF3 (Customer Network)
 rd 65513:3 (사과)
 route-target export 65513:3 (사과의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:1 (바나나의 네트워크를 사과가 사용하도록 불러들이는 명령어)
 route-target import 65513:2 (딸기의 네트워크를 사과가 사용하도록 불러들이는 명령어)

 

 

 

이 예제에서는 바나나와 딸기는 서로 네트워크를 교환하지 않는다. 이 말을 Azure ExpressRoute 의 개념으로 설명하자면 Primary peering과 Secondary peering은 서로의 네트워크를 교환하지 않는다는 의미이다. 즉 두 connection은 동일한 라우팅 정보를 가지고 있는 이중화 연결이라고 생각하면 된다. 반면 사과는 (Global - Customer Network) 바나나와 딸기의 동일한 정보를 두 네트워크를 통해 받고 있기에, 둘 중 하나의 네트워크가 끊어져도 Azure로 연결되는 네트워크 장애를 대비할 수 있다. 

 

 

Cisco ISR 4451 라우터 1대만을 이용할 경우 바나나와 딸기 (VRF1 / VRF2)는 필수 조건이다. 하지만 사과는 꼭 VRF로 만들지 않아도 관계가 없다. 이를 어려운 용어로 Global vs VRF 라고 한다. 즉 사과의 Interface는 VRF가 아닌 일반적인 Interface을 사용해도 무관하다. 위의 예에서 사과를 Global 로 사용한다면 아래와 같이 Config가 바뀐다. 

 

 

 

ip vrf VRF1 (Primary Peering)
 rd 65513:1 (바나나)
 route-target export 65513:1 (바나나의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:1 (사과의 네트워크를 바나나가 사용하도록 불러들이는 명령어)
!
ip vrf VRF2 (Secondary Peering)
 rd 65513:2 (딸기)
 route-target export 65513:2 (딸기의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:2 (사과의 네트워크를 딸기가 사용하도록 불러들이는 명령어)
!

 

그리고 아래의 VRF3는 필요 하지 않고 대신 그 인터페이스를 Global로 사용한다. 


ip vrf VRF3 (Customer Network)
 rd 65513:3 (사과)
 route-target export 65513:3 (사과의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:1 (바나나의 네트워크를 사과가 사용하도록 불러들이는 명령어)
 route-target import 65513:2 (딸기의 네트워크를 사과가 사용하도록 불러들이는 명령어)

 

 

Cisco ISR 중 2개의 VRF와 1개의 Global로 연결할 경우

 

VRF3의 사용 유무를 떠나, 결국 왼쪽 Customer Network로 들어오는 Azure Private Peering Route은 2개의 이중화된 경로로 연결이 되어있다. 이것이 Microsoft가 원하는 이중화 경로이다. 여기에서 혼동하기 쉬운 것이 route-target과 redistribute (재분배)이다. route-target은 단순히 서로의 네트워크가 연결할 수 있도록 문을 열어주는 기능만 할 뿐이며, redistribute과 같은 명령어를 사용하여 Private Peering의 BGP 프로토콜과 Customer Network의 라우팅 프로토콜 (OSPF, EIGRP, BGP)을 연결해주어야 한다. 

 

 

 

ip vrf VRF1 (Primary Peering)
 rd 65513:1 (바나나)
 route-target export 65513:1 (바나나의 네트워크를 다른 네트워크가 사용하도록 내보내는 명령어)
 route-target import 65513:1 (사과의 네트워크를 바나나가 사용하도록 불러들이는 명령어)

 

 

 

Route-Target 의 개념을 이해했다면, 이제 MP-BGP를 다뤄보자. MP BGP는 위의 예제에서 VRF간 라우트를 교환해주는 역할을 한다. 즉 사과, 바나나, 딸기의 각 VRF 인터페이스마다 각각의 address family를 만들어 BGP로 연결한다. 여기서는 connected interface와 static route을 BGP로 redistrubtion 해보도록 한다. 

 

 

아래의 다이어그램에서 Red1과 Blue1을 연결하는 ISP의 인터페이스를 VRF 인터페이스로 간주하자. 즉, ISP에서는 고객의 트래픽을 분리하기 위해서 VRF를 사용하는 것이 보통이다. 하지만, 이 예에서는 Red1의 loopback 1.1.1.1과 Blue1의 loopback 3.3.3.3이 어떻게 연결되는 것을 살펴본다.  즉, 고객간의 네트워크가 연결되도록 하는 것이 목표이다. Red1 네트워크와 Blue1 네트워크가 인터넷에 접속하기 위해서는 각각 VRF Red1과 VRF Blue1 인터페이스을 이용해야 한다. 

 

 

 

Red1 라우터의 default route은 다음과 같다

ip route 0.0.0.0 0.0.0.0 192.168.12.2 

 

Blue1 라우터의 default route은 다음과 같다

ip route 0.0.0.0 0.0.0.0 192.168.23.2

 

 

즉, Red1과 Blue1에서는 VRF라는 개념이 없다. 이제 ISP 라우터에서 VRF 인터페이스를 통해서 어떻게 Static route을 만드는지 살펴보자. ISP의 G0/1 인터페이스는 VRF RED에 속하고, ISP의 G0/2 인터페이스는 VRF BLUE에 속해 있다. 이때의 Static route은 아래와 같이 "global" 이라는 명령어를 사용하여서 VRF와 GLOBAL routing table간의 leak을 해줘야 한다. 

 

 

ip route vrf RED 3.3.3.3 255.255.255.255 192.168.23.3 global

ip route vrf BLUE 1.1.1.1 255.255.255.255 192.168.12.1 global 

 

 

위의 2개의 static route은 VRF와 Global routing table간의 트래픽을 연결해준다. 192.168.23.0/24와 192.168.12.0/24 구간은 ISP 라우터에서는 VRF 인터페이스에 속한다. 그렇기 때문에 VRF Red는 192.168.23.0/24 네트워크를 알 수 없고, 반대로 VRF Blue는 192.168.12.0/24 네트워크를 알 수없다. 그 이유는 이 인터페이스는 각각의 VRF에 속해있지 않기 때문이다.

 

 

이러한 이유로 static route 마지막에 global 이라는 명령어를 통해서 VRF Red도 192.168.23.0/24 네트워크를 사용할 수 있게 되는 것이다. 마찬가지로 VRF Blue 역시 global 이라는 명령어를 통해서 192.168.12.1 이라는 destination IP를 사용할 수 있게 되는 것이다. 하지만 이것으로 충분하지 않다. ISP 라우터에서는 static route의 destination IP가 어느 인터페이스를 통해서 나가는지 아래와 같이 Global routing table에 설정해주어야 한다. 이 부분이 VRF의 Static route을 설정할 때 가장 기억해야 할 부분이다. 

 

ip route 192.168.12.1 255.255.255.255 G0/1

ip route 192.168.23.3 255.255.255.255 G0/2

 

 

ISR 4451의 경우 BDI 인터페이스를 사용하기에 아래와 같이 설정해주면 된다. 


ip route 192.168.12.1 255.255.255.255 BDI1

ip route 192.168.23.3 255.255.255.255 BDI2

 

 

실제 ISR 4451을 ExpressRoute으로 연결할 때 아래의 컨피그를 사용해보았다. 

 

(Static Route 설정)

ip route 10.191.185.2 255.255.255.255 BDI1
ip route vrf hq1 192.168.77.0 255.255.255.0 10.191.185.2 global


(Static Route와 Connected Interface을 BGP로 Redistribute하기)
router bgp 65513
 bgp router-id 10.221.201.5
 bgp log-neighbor-changes
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv4 vrf hq1
  bgp router-id 10.191.185.1
  redistribute connected
  redistribute static
  neighbor 10.191.185.2 remote-as 12076
  neighbor 10.191.185.2 fall-over bfd
  neighbor 10.191.185.2 activate
 exit-address-family
 !
 address-family ipv4 vrf hq2
  bgp router-id 10.191.185.5
  redistribute connected

  redistribute static
  neighbor 10.191.185.6 remote-as 12076
  neighbor 10.191.185.6 fall-over bfd
  neighbor 10.191.185.6 activate
 exit-address-family

 

 

이로써 static route과 connected interface을 redistribute하여서 ExpressRoute private peering을 하는 방법에 대해서 살펴보았다. 특별히 static route은 global route leaking 을 제대로 이해하여야지만, BGP로 재분배되기 때문에 신중하게 Config을 해야 한다. 다음 포스팅은 BGP로 Internal network를 재분배 할때, 어떻게 filtering해서 route looping이 생기지 않게 하는지에 대해서 살펴보려고 한다.