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 화면은 다음과 같습니다:
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의 설정 파일입니다.
이제 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의 설정파일입니다.
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
알려진 한계:
- 지점간의 인터페이스이기 때문에 종단점의 주소를 반드시 알아야 합니다. "local-address any"나 "peer 0.0.0.0" 은 동작하지 않습니다.