EdgeRouter - EdgeRoute VTI 예제

download at 2017-08-14T16:27:46Z origin

가상 터널 인터페이스 (Virtual Tunnel Interface, VTI)는 ipsec 터널 인터페이스를 바인딩하는 기법입니다. 이 기능은 1.6.0 버전부터 추가되었습니다.

본 문서에서는 라우터 R1과 R2를 대상으로 네트워크를 구성합니다:

R1

==

eth0: WAN 20.0.0.2/30, gateway 20.0.01/30

eth1: LAN 192.168.1.1/24

R2

==

eth0: WAN 30.0.0.2/30, gateway 30.0.01/30

eth1: LAN 172.16.1.1/24

먼저 WAN+2LAN2 설치 위자드를 실행하여 R2의 LAN 서브넷을 변경합니다. GUI의 VPN 탭을 사용하여 기본 IPSec 사이트 투 사이트 터널을 생성합니다. 이후에는 CLI를 사용하여 IPSec 터널을 VTI 인터페이스로 사용할 수 있도록 변환합니다.

R1 VPN 화면은 다음과 같습니다:

image0

R2에도 동일한 작업을 수행하고 터널 상태를 확인하면 다음과 같습니다:

ubnt@R1:~$ show vpn ike sa
Peer ID / IP                            Local ID / IP
------------                            -------------
30.0.0.2                                20.0.0.2

    State  Encrypt  Hash    D-H Grp  NAT-T  A-Time  L-Time
    -----  -------  ----    -------  -----  ------  ------
    up     aes128   sha1    14       no     14730783 28800


ubnt@R1:~$ show vpn ipsec sa
Peer ID / IP                            Local ID / IP
------------                            -------------
30.0.0.2                                20.0.0.2

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       up     0.0/0.0        aes128   sha1  no     967     3600    all

이제 다른 R2 서브넷에 -I 옵션을 추가하여 특정 LAN 서브넷을 명시하여 시작 주소를 결정하고 핑 명령어를 수행할 수 있습니다.

ubnt@R1:~$ /bin/ping -I eth1 172.16.1.1
PING 172.16.1.1 (172.16.1.1) from 192.168.1.1 eth1: 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_req=1 ttl=64 time=1.27 ms
64 bytes from 172.16.1.1: icmp_req=2 ttl=64 time=0.791 ms
64 bytes from 172.16.1.1: icmp_req=3 ttl=64 time=0.827 ms
^C
--- 172.16.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.791/0.964/1.276/0.223 ms


ubnt@R1:~$ show vpn ipsec sa
Peer ID / IP                            Local ID / IP
------------                            -------------
30.0.0.2                                20.0.0.2

    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       up     252.0/252.0    aes128   sha1  no     1127    3600    all

첨부한 내용은 VTI로 변환하기 이전의 R1, R2의 설정 파일입니다.

R1 /config/config.boot

R2 /config/config.boot

이제 VTI로 변겨알 때의 장단점을 확인해보도록 하겠습니다. 먼저 VTI 인터페이스를 R1, R2에 설정하고, 주소를 부여합니다.

ubnt@R1:~$ configure
[edit]
ubnt@R1# set interfaces vti vti0 address 40.0.0.1/30
[edit]
ubnt@R1# commit
[ interfaces vti vti0 ]
Warning: Interface vti0 is not referenced in vpn configuration.

R1의 사이트 투 사이트 설정을 확인해 봅시다:

ubnt@R1# show vpn ipsec site-to-site
 peer 30.0.0.2 {
     authentication {
         mode pre-shared-secret
         pre-shared-secret secret
     }
     connection-type initiate
     ike-group FOO0
     local-address 20.0.0.2
     tunnel 1 {
         allow-nat-networks disable
         allow-public-networks disable
         esp-group FOO0
         local {
             prefix 192.168.1.0/24
         }
         remote {
             prefix 172.16.1.0/24
         }
     }
 }
[edit]

터널을 VTI 바인딩으로 변경합니다:

ubnt@R1# edit vpn ipsec site-to-site peer 30.0.0.2
[edit vpn ipsec site-to-site peer 30.0.0.2]
ubnt@R1# delete tunnel 1
[edit vpn ipsec site-to-site peer 30.0.0.2]
ubnt@R1# set vti bind vti0
[edit vpn ipsec site-to-site peer 30.0.0.2]
ubnt@R1# set vti esp-group FOO0
[edit vpn ipsec site-to-site peer 30.0.0.2]
ubnt@R1# top
[edit]
ubnt@R1# compare
[edit vpn ipsec site-to-site peer 30.0.0.2]
-tunnel 1 {
-    allow-nat-networks disable
-    allow-public-networks disable
-    esp-group FOO0
-    local {
-        prefix 192.168.1.0/24
-    }
-    remote {
-        prefix 172.16.1.0/24
-    }
-}
+vti {
+    bind vti0
+    esp-group FOO0
+}
[edit]
ubnt@R1# commit
[edit]

VTI의 가장 큰 차이점은 더 이상 터널에 로컬/원격 서브넷을 기반으로 정의되지 않는다는 점입니다. VTI는 라우팅 가능한 인터페이스이기 때문에 R1에 VTI 인터페이스를 추가하여 172.16.1.1로 경로 추가가 가능합니다.

set protocols static interface-route 172.16.1.0/24 next-hop-interface vti0

R2 설정:

set protocols static interface-route 192.168.1.0/24 next-hop-interface vti0

원격 서브넷에 핑을 수행합니다. 라우팅 가능한 인터페이스이기 때문에 고정 경로를 삭제하고 대신에 OSPF를 사용하여 경로를 동적으로 확인하도록 합니다.

ubnt@R1:~$ configure
[edit]
ubnt@R1# delete protocols static interface-route
[edit]
ubnt@R1# set protocols ospf parameters router-id 20.0.0.2
[edit]
ubnt@R1# set protocols ospf area 0.0.0.0 network 40.0.0.0/30
[edit]
ubnt@R1# set protocols ospf area 0.0.0.0 network 192.168.1.0/24
[edit]
ubnt@R1# set protocols ospf area 0.0.0.0 network 192.168.2.0/24
[edit]
ubnt@R1# set interfaces vti vti0 ip ospf network point-to-point
[edit]
ubnt@R1# commit
[ protocols ospf ]
Starting routing daemon: ospfd.

[edit]
save;exit

라우팅 테이블에서 라우터가 학습한 경로를 확인할 수 있습니다.

ubnt@R1:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [1/0] via 20.0.0.1, eth0
C>* 20.0.0.0/30 is directly connected, eth0
O   40.0.0.0/30 [110/10] is directly connected, vti0, 24w2d15h
C>* 40.0.0.0/30 is directly connected, vti0
C>* 127.0.0.0/8 is directly connected, lo
O>* 172.16.1.0/24 [110/20] via 40.0.0.2, vti0, 00:13:53
O   192.168.1.0/24 [110/10] is directly connected, eth1, 24w2d15h
C>* 192.168.1.0/24 is directly connected, eth1
O   192.168.2.0/24 [110/10] is directly connected, eth2, 24w2d15h
C>* 192.168.2.0/24 is directly connected, eth2

양쪽 원격 LAN 서브넷에 접근이 가능함을 확인할 수 있습니다. 하지만 VTI 없이는 4개의 터널을 생성해야만 같은 기능을 수행할 수 있습니다:

192.168.1.0/24  ---  172.16.1.0/24
192.168.1.0/24  ---  172.16.2.0/24
192.168.2.0/24  ---  172.16.1.0/24
192.168.2.0/24  ---  172.16.2.0/24

첨부된 설정파일은 VTI, OSPF를 사용하는 R1, R2의 설정파일입니다.

R1 /config/config.boot VTI

R2 /config/config.boot VTI

VTI는 인터페이스이기 때문에 방화벽, 서비스 품질등의 옵션을 추가할 수 있습니다.

ubnt@R1# set interfaces vti vti0 ?
Possible completions:
  address   IP address
  description   Description
  disable   Disable interface
  firewall  Firewall options
  ip        IPv4 routing parameters
  ipv6      IPv6 routing parameters
  mtu       Maximum Transmission Unit (MTU)
  redirect  Incoming packet redirection destination
  traffic-policy
        Traffic-policy for interface

알려진 한계:

  1. 지점간의 인터페이스이기 때문에 종단점의 주소를 반드시 알아야 합니다. "local-address any"나 "peer 0.0.0.0" 은 동작하지 않습니다.