본문 바로가기

프로그래밍/네트워크

[화웨이] 네트워크 과제 9 - vpn-instance 과제 진행

개요

저번 글에서도 말했지만 이번 과제는 vpn(cisco에서는 vrf)을 사용하여 같은 장비를 타지만 서로 분리된 망을 구성하는 과제이다.

 

a1           P            a2
   \         /     \      /
b1  - PE        PE  - b2
   /         \      /      \
c1           P            c2

 

이런 환경에서 a1-a2, b1-b2, c1-c2 간은 통신이 되면서, a/b/c 상호 간은 통신이 안되도록 구성하면 된다.

 

즉, a1-a2는 핑이 되면서 a1-b1으로는 핑이 안되도록 하면 되는 과제이다.

 

단 a/b/c의 고객사 측 장비(이하 CE)에서는 최소한의 설정만 들어가도록 구성해야 하며, a-PE는 static으로, b-PE는 ospf로, c-PE는 bgp로 연결해야 한다.

 

이번 글에서는 vpn-instance 만을 이용하여(정확히는 MPLS를 사용하지 않고) vrf를 구현해 보고, 이후에 mpls를 구현하여 어떤 차이가 있는지를 확인해 볼 것이다.

 

기본 구성

구성 지도 및 기본 설정

 

호스트네임 / 루프백 / 인터페이스 ip를 설정해 준다. 이미 많이 해봤으니 실제 config는 생략. 

 

 

vpn-instance 설정

 

ip vpn-instance A
 ipv4-family
  route-distinguisher 100:1
  vpn-target 100:1 export-extcommunity
  vpn-target 100:1 import-extcommunity

ip vpn-instance B
 ipv4-family
  route-distinguisher 200:1
  vpn-target 200:1 both

ip vpn-instance C
 ipv4-family
  route-distinguisher 300:1
  vpn-target 300:1 both

route-distinguisher(RD)는 VPN 내에서 사용되는 IP 주소 대역이 외부(BGP/MPLS 환경 등)와 충돌하지 않도록, 해당 경로를 전역적으로 고유하게 식별해 주는 값이다. 즉, 같은 10.0.0.0/24 대역을 여러 VPN에서 사용하더라도, RD가 다르면 서로 다른 경로로 인식된다.

 

따라서 일반적으로 같은 VPN 네트워크라면 동일한 RD를 사용하는 것이 원칙이지만, 운영 및 관리 목적에 따라 같은 VPN이라도 RD 값을 다르게 설정하는 경우가 있다. RD가 해당 경로의 유입 지점을 식별하는 키값처럼 사용하여 BGP VPNv4 테이블에서 경로 출처 식별하거나, 특정 PE에서 유입된 경로만 선택적으로 사용하는 등 단순히 고윳값 이상의 의미를 가지도록 할 수 있다.

route target은 VPN 간 라우팅 정책을 제어하기 위한 BGP extended community 값이며, Huawei 설정에서는 vpn-target으로 표기한다. RT는 경로가 이 VPN 인스턴스로 들어오거나 나갈 수 있도록 허용하는 정책이다. 해당 VRF에서 BGP로 내보내는 경로에 export-extcommunity 값을 붙이고, 외부에서 들어온 BGP 경로에 붙은 import-extcommunity에서 명시한 값과 일치하면, 해당 경로를 이 VPN 인스턴스로 보내준다. 만약에 둘을 같은 값으로 설정하고 싶으면 both 명령어를 사용하여 단축할 수이다.

 

 

CE-PE 간 구성

CE(Customer Edge) 장비와 PE(Provider Edge) 장비를 연결하는 설정을 해볼 것이다. ensp의 기본 라우터에서는 장비에 인터페이스가 많지 않아서 GE 인터페이스를 다 사용하고, ethernet 포트도 하나 사용해야 한다.

 

 

인터페이스 구성

 

interface Ethernet0/0/0
 ip binding vpn-instance A
 ip address 192.168.2.1 255.255.255.252

interface GigabitEthernet0/0/2
 ip binding vpn-instance B
 ip address 192.168.3.1 255.255.255.252
 ospf network-type p2p
#
interface GigabitEthernet0/0/3
 ip binding vpn-instance C
 ip address 192.168.4.1 255.255.255.252

 

huawei 장비는 interface에 vpn-instance를 binding 하면 ip 정보가 삭제된다. 따라서 미리 설정해 뒀다면 다시 설정해줘야 한다.

 

다른 인터페이스는 상관없지만 B는 ospf로 연결해줘야 하기 때문에 network-type을 설정해 준다.

 

고객 측 장비(CE)에서는 인터페이스에 별다른 설정 없이 ip 만 넣어주면 된다.

 

 

라우팅 구성

static

- PE 설정
 ip route-static vpn-instance A 192.168.0.5 255.255.255.255 192.168.2.2

- CE 설정

 ip route-static 0.0.0.0 0.0.0.0 192.168.2.1

 

지금은 loopback으로만 통신을(ping test 만) 하면 되기 때문에 PE에 해당 루프백 아이피만 넣어줬지만, 실제로는 당연히 더 많은 ip를 사용할 것이기 때문에 해당 대역을 routing 해줘야 한다. 

 

CE에서는 전체 대역을 다 상위 장비로 올려주기 때문에 default routing 설정만 해주면 된다.

 

 ospf

- PE 설정
  ospf 100 vpn-instance B

   default-route-advertise always
   area 100

    network 192.168.3.0 0.0.0.3

 

- CE 설정  

  interface LoopBack0
   ip address 192.168.0.7 255.255.255.255
  ospf 100
   area 0.0.0.100
    network 192.168.3.0 0.0.0.3
    network 192.168.0.7 0.0.0.0

 

PE에서 default-route-advertise always 설정을 default routing을 하위 장비로 내려준다. 이를 통해 CE 장비에 모든 라우팅을 나에게 오도록 설정하여 P 건너편의 routing table 이 생성되지 않은 경로라도(정확히는 vpn을 통해 라우팅 테이블을 구성하면 라우팅이 분리되어 전달되지 않기 때문에) PE 라우터가 받아서 전달할 수 있도록 할 수 있다.


 bgp

- PE 설정

bgp 65500
 ipv4-family vpn-instance C
  network 192.168.4.0 255.255.255.252
  peer 192.168.4.2 as-number 65510

 

- CE 설정

bgp 65510
 peer 192.168.4.1 as-number 65500
 ipv4-family unicast
  network 192.168.0.9 255.255.255.255

 

CE에서는 일반적인 bgp 라우팅처럼 구성해 주면 되고, PE에서는 ipv4-family를 unicast 가 아니라 vpn-instance로 지정하여 입력한다.

 

 

PE-P 간 구성

interface GigabitEthernet0/0/0
 ip address 192.168.1.13 255.255.255.252
 ospf network-type p2p


interface GigabitEthernet0/0/0.110
 dot1q termination vid 110
 ip binding vpn-instance A
 ip address 10.10.110.13 255.255.255.252
 arp broadcast enable


ospf 10 router-id 192.168.0.3
 area 0.0.0.10
  network 192.168.0.3 0.0.0.0
  network 192.168.1.12 0.0.0.3
  network 192.168.1.8 0.0.0.3

 

bgp 65500
 router-id 192.168.0.3
 peer 192.168.0.1 as-number 65500
 peer 192.168.0.1 connect-interface LoopBack0
 peer 192.168.0.2 as-number 65500
 peer 192.168.0.2 connect-interface LoopBack0


 ipv4-family unicast
  undo peer 192.168.0.1 enable
  undo peer 192.168.0.2 enable


 ipv4-family vpnv4
  peer 192.168.0.1 enable
  peer 192.168.0.1 next-hop-local
  peer 192.168.0.2 enable
  peer 192.168.0.2 next-hop-local


 ipv4-family vpn-instance A
  import-route direct
  import-route static
  peer 10.10.110.14 as-number 65500
  peer 10.10.110.14 connect-interface GigabitEthernet0/0/0.110

다 올리면 너무 길어져서 P 하나를 vpn-instance A와 연결한다고 가정하고 남겨보면, 서브인터페이스 110을 추가하여 해당 인터페이스를 vpn-instance에 바인딩하고, 해당 인터페이스에 dot1 q 설정과 arp 설정을 넣어준다. 화웨이 장비에서는(기억나기론 시스코도 안되긴 함) 하나의 인터페이스에 여러 개의 vpn-instance를 binding 할 수 없기 때문에 서브 인터페이스로 나눠줘야 하는데, 이를 통해 해당 인터페이스를 논리적으로 다른 트래픽으로 구분해 준다.

 

그다음 ospf와 bgp peer를 맺고, unicast에서는 peering을 undo 해주고 그 대신 vpnv4에서 enable 설정을 해준 다음, vpn-instance 설정에서 connect-interface를 지정하여 peering을 맺어준다.

 

그리고 direct와 static routing을 import-route 하여 해당 라우팅을 redistribute 해주면 해당 인터페이스로 vpn을 통한 통신이 가능해진다.

 

테스트

 

위에서는 설정이 많이 생략됐지만 어쨌든 이렇게 설정해 주면 PE가 각 인터페이스를 통해 받은 패킷을 vpn으로 binding 하고, 그걸 건너편 CE까지 전달하여 루프백끼리 핑이 되게 만들 수 있다.

 

 

결론

이 방식은 MPLS 없이 VRF 환경을 구현하는 방식으로, 서브인터페이스를 일일이 설정해줘야 하고 중간 장비인 P 라우터(R1, R2)까지 vpn-instance 설정을 해줘야 하기 때문에 설정에 대한 소요가 크고 유연성과 확장성이 낮아진다.

 

vpn-instance의 구조를 이해하기 위한 소규모 실습 및 과제로 진행하기에는 괜찮지만 당연히 실제 운용 환경에서는 mpls를 활용한 방식이 더 뛰어나므로 해당 방식으로 다시 구현해 보고 구조 등의 차이를 비교해 볼 예정이다.