Tech Tips and Training 25호

Bypassing GRE

IPSec VI, 트래픽 암호화 'OK!'

QoS 사전 분류 … 포인트 투 멀티포인트 시나리오 가능





시스코 IOS IPSec 가상 인터페이스는 IP 유니캐스트와 멀티캐스트 트래픽을 전송하는 정적 VPN(사이트에서 사이트간)이나 동적 VPN(Easy VPN 혹은 허브 앤 스포크 시나리오)을 구축하는데 사용될 수 있다. 이러한 경우 GRE(Generic Routing Encapsulation)를 사용할 필요가 없다. 시스코 IOS 소프트웨어 릴리즈 12.3(14)T에 도입된 이 기능을 통해 IPSec은 각자 인터페이스를 소유할 수 있으며, IPSec 요약화(encapsulation) 기능으로 인터페이스를 동적으로 만들기 위해 가상 템플릿을 활용한다. IPSec 가상인터페이스(Virtual Interface; VI)는 시스코 IOS 소프트웨어를 운영하는 라우터 플랫폼에서 사용될 수 있다.

일반적으로 IPSec은 암호화(ESP) 작업과 사이트 투 사이트에서 포인트 투 포인트 IP 트래픽 인증, 리모트 액세스 VPN 시나리오에 사용된다. 라우터는 우선 GRE 내부 패킷을 요약하고, 각 패킷 교환용으로 4바이트 GRE 오버헤드를 이용해 GRE/IP 유니캐스트 패킷을 암호화한다. 이는 원격 피어가 GRE를 이해할 수 있다는 가정 하에 실행된다(예: 멀티벤더 환경). IPSec 가상 터널 인터페이스(virtual tunnel interface, VTI)는 이러한 레거시 GRE/IPSec 실행 문제를 처리하기 위해 한 가지 솔루션을 제공한다<그림 1참조>.

IPSec VI에는 정적 VI와 동적 VI라는 두 가지 유형이 있다. 정적 VI는 포인트 투 포인트 IPSec/GRE 터널을 설정할 때 한 가지 시나리오를 커버한다. 반면 동적 VI는 포인트 투 포인트와 포인트 투 멀티포인트 유형 시나리오를 모두 설정할 수 있다. 기업들과 통신서비스 사업자 모두 IPSec VI을 사용할 때 많은 혜택을 볼 수 있다. 다음 사례는 오래된 GRE/IPSec과 IPSec VI 설정 간의 차이를 이해하는데 도움이 될 것이다.


그림1. 암호화/암호해독 되어야하는 인바운드 & 아웃바운드 패킷은 라우터를 빠져나가기 전에 VI로 전송된다.





GRE/IPSec 설정
7206-VTI-1:
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname 7206-VTI-1
!
!
clock timezone PST-8
ip subnet-zero
ip domain name cisco.com
!
ip audit notify log
ip audit po max-events 100
!
crypto isakmp policy 1
authentication pre
encryption aes 256

!
crypto ipsec transform-set test esp-aes 256 esp-
sha-hmac

crypto map test 10 ipsec-isakmp
set peer 20.1.1.2
set transform-set test
match address 101
!
!
interface Tunnel10
ip address 10.10.10.1 255.255.255.252
ip mtu 1420
tunnel source Ethernet1/0
tunnel destination 20.1.1.2
crypto map test
!
interface Ethernet0/0
ip address 20.1.1.1 255.255.255.0
crypto map test
!
ip classless
no ip http server
!
!
access-list 101 permit gre host 20.1.1.1 host
20.1.1.2
!




대안적 VTI 설정
7206-VTI-1:
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname 7206-VTI-1
!
clock timezone PST-8
ip subnet-zero
ip domain name cisco.com
!
ip audit notify log
ip audit po max-events 100
!
crypto isakmp policy 1
authentication pre-share
encryption aes 256
crypto ipsec transform-set test esp-aes 256 esp-
sah-hmac

crypto ipsec profile vpn
set transform-set myset

crypto isakmp key cisco address 20.1.1.2
!
interface Tunnel0
ip address 10.10.10.1 255.255.255.252
tunnel mode ipsec ipv4
tunnel source Ethernet1/0
tunnel destination 20.1.1.2
tunnel protection ipsec profile vpn
!
interface Ethernet0/0
ip address 1.1.1.1 255.255.255.0
!
interface Ethernet1/0
ip address 20.1.1.1 255.255.255.0


그림2. IPSec VI는 IPSec 터널에서 서브넷 오버래핑 문제를 해결해준다.





주의사항

동적 VI는 스프리트 터널링(Split tunneling)도 지원하는 반면 정적 VI는 애니-투-애니(any-to-any) 프록시 ID 방식만 제공한다.GRE/IPSec과는 달리 정적 VI는 비(非)IP 트래픽을 암호화하는데 사용될 수 없다.

7206-VTI-1#sh cry ips sa
interface: Tunnel0
Crypto map tag: Tunnel0-head-0, local addr
11.11.11.1
protected vrf: (none)
local ident (addr/mask/prot/port):
(0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port):
(0.0.0.0/0.0.0.0/0/0)
current_peer 11.11.11.2 port 500
PERMIT, flags={origin_is_acl,}


QoS 사전 분류 기능을 가진 VI

음성과 데이터 트래픽 결합이 암호화될 때 트래픽이 출발한 곳에서 아웃바운드 물리적 인터페이스는 실제 플로우를 보지 않는다. 이 때 모든 것은 단일 플로우로 간주되기 때문이다. 시스코 IOS 크립토(crypto) 실행은 이를 처리하기 위해 QoS 사전 분류 기능을 제공하고 있다. 이 기능을 구현하기 위해 qos pre-classify 라는 명령어가 VI 인터페이스 상에서 적용돼야 한다. GRE/IPSec 실행에서 사전 분류 기능을 사용하려면 VI에서 이 명령어를 사용하면 된다.

아래 예를 살펴 보자. 50Kbps라는 안전하고 인증된 대역폭을 가진 완전한 우선순위 대기열(priority queue)은 20000 및 53000, 56000을 통한 16384 포트의 범위 안에서 소스 주소 10.10.10.10부터 도착 주소 10.10.10.20으로 전송되는 트래픽 전용으로 남겨진다. 다음 명령에서 맨 먼저 음성 트래픽 대상을 매칭하기 위해 액세스 리스트 102가 설정된다.

7206-1(config)# access-list 102 permit udp host
10.10.10.10 host 10.10.10.20 range 16384
20000
7206-1(config)# access-list 102 permit udp host
10.10.10.10 host 10.10.10.20 range 53000
56000

다음으로 클래스 맵 보이스(class map voice)가 정의되고, 정책1이라고 불리는 정책 맵이 만들어진다. 클래스 보이스용의 완전한 우선순위 대기열이 보존되고, 20Kpbs 대역폭은 클래스 바(class bar)용으로 설정되며, 디폴트 클래스는 WFQ(Weighted Fair Queuing)용으로 설정된다. 그런 다음 서비스-정책 명령어는 정책 맵을 fa0/0에 첨부한다.

7206-1(config)# class-map voice
7206-1(config-cmap)# match access-group 102
7206-1(config)# policy-map policy1
7206-1(config-pmap)# class voice
7206-1(config-pmap-c)# priority 50
7206-1(config-pmap)# class bar
7206-1(config-pmap-c)# bandwidth 20
7206-1(config-pmap)# class class-default
7206-1(config-pmap-c)# fair-queue
7206-1(config)# interface fa0/0
7206-1(config-if)# service-policy output policy1
!
interface Tunnel0
ip address 10.10.10.1 255.255.255.0
qos pre-classify
tunnel source GigabitEthernet0/1
tunnel destination 11.11.11.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile vpn




NAT/ACL/IOS 방화벽 기능을 가진 IPSec VI

IPSec VI는 클리어-텍스트(예: 로컬 LAN 네트워크 오버래핑 시나리오) 트래픽 상에서 소스/목적지 NAT(Network Address Translation)를 실행하는데 사용될 수 있다. 그 곳에서 NAT가 클리어-텍스트 트래픽 양 측에서 실행된다.

7206-VTI-1:
crypto isakmp policy 1
authentication pre-share
encryption aes 256
crypto isakmp key cisco address 0.0.0.0 0.0.0.0
!
!
crypto ipsec transform-set myset esp-aes 256 esp-
sha-hmac
!
crypto ipsec profile vpn
set transform-set myset
!
!
interface Tunnel0
ip address 10.10.10.1 255.255.255.0
ip nat outside
tunnel source GigabitEthernet0/1
tunnel destination 11.11.11.2
tunnel mode ipsec ipv4
tunnel protetion ipsec profile vpn

interface GogabitEthernet0/3
ip address 172.16. 255.255.255.0
load-interval 30
duplex auto
speed auto
media-type rj45
no negotiation auto
!
ip classless
ip route 0.0.0.0 0.0.0.0 11.11.11.2
!
no ip http server
no ip http secure-server
!
ip nat inside source static 172.16.1.0 172.17.1.0

VI 덕분에 전/후 암호화 트래픽 필터링을 컨트롤하기 훨씬 쉬우며, 사전 암호화나 차후 암호화 트래픽은 VI 상에서 입/출력 ACL을 사용해 필터링 처리할 수 있다. 반면 ESP/IKE 트래픽은 트래픽이 라우터를 드나드는 물리적 인터페이스 상에서 ACL을 사용하면서 필터링된다. VPN 터널에서 호스트-B와 호스트-A의 커뮤니케이션을 보장하고, 프록시 ID가 'permit ip any any'라는 가정 하에 호스트 투 호스트 트래픽만 허용하도록 ACL을 정의하기 바란다.

interface Tunnel0
ip address 10.10.10.1 255.255.255.0
ip access-group 109 in
ip nat outside
ip inspect myins out

tunnel source GigabitEthernet0/1
tunnel destination 11.11.11.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile vpn

access-list 109 permit ip host 172.18.1.1 host
172.17.1.1

NAT, ACL과 CBAC(Context-Based Access Control)이 모두 결합하면 IOS 입/출력 성능 프로세싱의 표준 순서를 따르게 될 것이다. VI의 경우, 일반적으로 클리어-텍스트 트래픽(사전 암호화) 상에서 기능을 실행시키는데 사용되며, 실제 아웃바운드 물리적 인터페이스는 암호화 기능 실행 후에 사용된다.



동적 VI 설정

동적 VI의 경우, 원격 액세스 Easy VPN이나 허브 앤 스포크 설정을 지원하기 위해 온-더-플라이(on-the-fly) VI 사례를 만드는데 사용된다. 동적 VI 기능을 통해 Easy VPN 터널은 Easy VPN 본래의 장점을 계속 제공하는 동시에 라우팅 프로토콜과 멀티캐스트 트래픽도 전송할 수 있다. 다음에 나오는 실제 Easy VPN 사례를 참조하라.

Hub Router:
username afakhancisco passwd cisco123
aaa new-model
aaa session-id common
aaa authentication login users local
aaa authorization network users local
!
crypto isakmp client configuration group mygroup
key cisco
dns 10.10.10.1
wins 10.10.10.2
pool mypool
!
crypto isakmp profile csco-ezvpn
match identity group mygroup
client authentication list users
isakmp authorization list users
client configuration address respond
virtual-template 1
!
crypto ipsec transform-set myset esp-aes 256 esp-
sha-hmac
!
crypto ipsec profile VTI-profile
set transform-set myset
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface FastEthernet2/0
description Egress Interface
ip address 192.1.1.1 255.255.255.0
!
interface Virtual-Templatel type tunnel
description Dynamic VI
ip unnumbered Loopback0
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI-profile
!
ip local pool mypool 172.16.1.1 172.16.1.10
ip route 0.0.0.0 0.0.0.0 192.1.1.2

스포크 라우터는 정기적으로 정적 VI를 가질 수 있다. IPSec VI로 점차 이동하게 되면 몇 가지 시나리오가 설정될 수 있다. 예는 다음과 같다 :

  • 한 피어는 정적 VI, 상대 피어는 정적 크립토 맵으로 구성.

  • 하나의 피어에서만 코드/설정 업데이트가 필요하다. 라우팅 프로토콜 실행은 불가.

  • 양쪽 피어 모두 정적 VI로 구성.
    두 라우터 상에서 코드/설정 업데이트가 필요하며, IPSec나 GRE 중 한 가지를 설정해야 한다. 라우팅 프로토콜, 멀티캐스트 트래픽 등 실행 가능.

  • 허브사이트에는 동적 VI, 스포크사이트에는 정적 크립토 맵 구성.

  • 하나의 라우터에서 코드/설정 업데이트가 필요하다. 라우팅 프로토콜 실행은 불가.

  • 허브 사이트에는 동적 VI, 스포크사이트에는 정적 VI 구성.

  • 두 가지 피어 중 한 군데에서 코드 업그레이드와 설정이 필요하다. 라우팅 프로토콜, 멀티캐스트가 지원되는데, 일반적인 Easy VPN 시나리오와는 달리 허브 상에서 RRI는 필요 없다.

  • IPSec VI

  • 단일 라우터 상에서 미리 공유된 복합 와일드카드를 갖기 위한 차선책으로 사용될 수 있다. 이는 통신서비스 사업자가 네트워크 기반 VPN을 사용할 때 특히 유용하다.






IPSec VI 트러블슈팅(예시와 디버그)

7201-1#sh int tun0
Tunnel0 is up, line protocol is up
Hardware is Tunnel
Internet address is 1.1.1.1/24
MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload
1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 11.11.11.1 (GigabitEthernet0/1),
destination 11.11.11.2
Tunnel protocol/transport IPSEC/IP
Tunnel TTL 255
Fast tunneling enabled
Tunnel transmit bandwidth 8000 (kbps)
Tunnel receive bandwidth 8000 (kbps)
Tunnel protection via IPSec (profile "vpn")
.......

7206-1#sh cry session
crypto session current status

interface : Tunnel10
session status : UP-ACTIVE
peer : 11.11.11.2 port 500
IKE SA : local 11.11.11.1/500 remote 11.11.11.2/500
Active
IPSEC FLOW : permit ip 0.0.0.0/0.0.0.0
0.0.0.0/0.0.0.0
Active SAs : 2, origin: crypto map

실시간 디버깅을 원한다면 크립토 관련 디버그를 이용할 수 있다.


MUHAMMAD AFAQ KHAN
무하마드 아팍 칸(MUHAMMAD AFAQ KHAN)은 시스코의 브로드밴드, 에지, 미드레인지 라우팅 비즈니스 부문 기술 마케팅 이사로 근무하고 있다. 과거에는 시스코 보안/VPN TAC 부문을 담당했다. 라우팅, 스위칭, 보안, 통신서비스 사업자 트랙 부문 CCIE 자격증도 보유하고 있다. 이메일 주소는 afakhan@cisco.com이다.



추가자료

Cisco에 문의하세요



Packet 지난 호 보기