AWS와 온프레미스의 VPN 연결
VPN이란 ?
- 인터넷을 이용해 가상 사설망(Virtual Private Network)을 구성하는 것
- VPN 트 래픽은 VPN 프로토콜로 보호됨
IPSec
: Site-to-Site VPN 암호화 프로토콜IKE(Internet Key Exchange)
: 암호화 키 관리 프로토콜
VPN은 Virtual Private Network의 약자입니다. 물리적으로 전용선이 아닌 공중망을 이용해 논리적으로 직접 연결한 것처럼 망을 구성하는 기술입니다. 이렇게 논리적으로 직접 연결된 것처럼 만들어주는 통로를 터널(Tunnel)이라고 하며 VPN을 이용하면 터널을 통해 직접 연결한 것처럼 동작합니다.
터널링 기법만 제공할 수 있다면 VPN이라고 할 수 있지만 터널링만 제공하는 기법은 자주 사용되지 않습니다. VPN은 주로 인터넷과 같은 공중망을 전용선과 같은 사설망처럼 사용하기 위해 도입하므로 강력한 보안을 제공해야 합니다. 그래서 IPSec
, SSL
과 같은 암호화 기법을 제공하는 프로토콜이 VPN에 주로 사용됩니다.
AWS VPN 연결 옵션
AWS Site-to-Site VPN (AWS Managed VPN) 사이트간 VPN 연결
- AWS VPC와 온-프레미스와 터널을 구성하여 연결
IPsec
프로토콜 사용
AWS Client VPN
- AWS 리소스와 노트북 등의 클라이언트와 VPN 연결
SSL
/TLS
프로토콜 사용
AWS VPN CloudHub
- AWS VPC와 여러 곳의 온-프레미스를 연결하여 서로 통신할 수 있게 AWS Site-to-Site VPN을 구성
Software Site-to-Site VPN (타사 소프트웨어 VPN 어플라이언스)
- 서드 파티 소프트웨어 VPN 어플라이언스를 실행 중인 VPC의 Amazon EC2 인스턴스에 VPN 연결을 생성
Software Site-to-Site VPN
- EC2 인스턴스에 VPN 소프트웨어를 설치하여 VPN 기능을 구현한 것
- AWS Managed VPN(Site-to-Site VPN)에 비해 더 많은 기능들을 구현
- 원하는 종류의 VPN 생성 및 보안, 정책 요청사항을 자유롭게 적용 가능
AWS VPN CloudHub
- 여러 개의 AWS Site-to-Site VPN 연결을 사용하여 AWS VPN CloudHub로 온-프레미스 사이트 간에 프라이빗 연결을 제공
- 온-프레미스가 VPC 및 다른 온-프레미스와 통신 가능
Client VPN
- AWS 리소스와 클라이언트 PC와 연결하는 OpenVPN 기반의 VPN 서비스
- Active Directory 등의 자격증명을 이용해 클라이언트가 VPN에 사용하는 권한을 부여
- 클라이언트는 VPN 접속을 위한 VPN 구성 파일이 담긴 소프트웨어를 설치
AWS Site-to-Site VPN (AWS Managed VPN)
- IPSec 암호화 프로토콜을 사용하여 AWS VPC와 온-프레미스간에 프라이빗 네트워크를 구성
- VPC와 연결을 위한 Virtual Private Gateway 및 온-프레미스의 Customer Gateway Device의 정보를 구성하기 위한 Customer Gateway를 설정하여 VPN Tunnel 연결을 만듦
- AWS Direct Connect의 백업으로 사용 가능
- VPN 터널당 최대 대역폭은 1.25Gbps
- VPN 사용을 위해 UDP 500, IP Protocol 50, UDP 4500 (NAT Traversal)을 방화 벽에서 허용해야 함
일반적으로 IPsec VPN에서 VPN 연결 설정을 위한 IKE는 UDP 500을 통해 통신 실제 VPN 터널을 통해 통신하는 데이터는 ESP (IP protocol 50)을 사용
NAT은 IP가 변경되면서 원본 IP/port number와 변경된 IP/port number를 매칭하는데, ESP는 port number가 없기 때문에 NAT을 지원하지 않는다.
이를 해결하기 위해 NAT Traversal 기능을 사용하는데 NAT Traversal을 enable하면 처음에 UDP 500을 통해 VPN 협상을 시도하다가 중간에 NAT 장치가 발견되면 UDP 4500을 통해 VPN 협상을 진행하며 협상이 완료되고 실제 데이터 통신도 UDP 4500을 사용한다.
Virtual Private Gateway (VPC 라우터) ↔ Customer Gateway (데이터 센터 라우터) (물리적 설치가 아닌 가상 게이트웨이)
Virtual Private Gateway
- AWS VPC와 AWS가 관리하지 않는 온-프레미스 네트워크를 연결하는 라우터 역할을 함
- VGW는 여러 개의 외부 연결이 가능, VPC는 하나의 VGW만 연결 가능 (1:1)
- VGW는 Site-to-Site VPN, Direct Connect 연결을 통해 온-프레미스와 연결
- VGW 생성시 ASN(Autonomous System Number)를 지정
- 가상 프라이빗 게이트웨이는 IPv6 트래픽을 지원하지 않습니다.
- 가상 프라이빗 게이트웨이의 Site-to-Site VPN 연결에는 ECMP가 지원되지 않습니다.
Autonomous Systems
- Autonomous System은 하나의 관리자에 운용되는 네트워크 그룹
- 인터넷에 연결되는 Public ASN과 내부적으로 사용되는 Private ASN이 있음
- Private ASN은
64512
-65534
- AWS 디폴트 ASN은 64512
Amazon FAQ
Q: 선택할 수 있는 ASN은 무엇입니까 ?
원하는 프라이빗 ASN을 선택할 수 있습니다. 16비트 프라이빗 ASN의 범위는 64512에서 65534 사이이며, 32비트 ASN은 4200000000에서 4294967294 사이입니다.
Q: AWS측 BGP 세션에 퍼블릭 ASN을 지정하려고 시도하면 어떤 일이 발생합니까 ?
AWS에서는 고객이 AWS Direct Connect 게이트웨이를 생성하랴고 하면 프라이빗 ASN을 다시 입력하도록 요청합니다.
Q: AWS측 BGP 세션에 대한 ASN을 제공하지 않을 경우 AWS는 무엇을 제공합니까 ?
AWS는 고객이 ASN을 선택하지 않는 경우 AWS Direct Connect 게이트웨이에 대해 64512 ASN을 제공합니다.
Customer Gateway
- 온-프레미스의 고객 라우터의 설정 값을 AWS에 제공하는 게이트웨이
- Customer Gateway는 온-프레미스에 물리적으로 설치되는 것이 아닌 AWS에서 구성되는 가상 게이트웨이
- AWS VPC에서 고객 라우터의 퍼블릭 IP 주소 및 동적 라우팅의 경우 ASN 설정을 함
- Virtual Private Gateway는 Customer Gateway의 값을 참조해서 고객 라우터에 연결
Customer Gateway Device (CGD)
- Site-to-Site VPN 연결을 위해 온-프레미스에 설치된 라우터 등의 물리적 디바이스 또는 소프트웨어 애플리케이션
- AWS 콘솔에서 VPN 라우팅 구성 파일을 다운받아 고객 게이트웨이 디바이스(라우터)에 설치하여 VPN 연결 터널을 구성
VPN Tunnel
- 각 Site-to-Site VPN 연결에 2개의 터널이 있으며 각 터널은 고유의 가상 프라이빗 게이트웨이 퍼블릭 IP 주소를 사용
- 터널 하나가 사용 불가능하게 되면 네트워크 트래픽은 사용 가능한 터널로 자동 라우팅
- 암호화, Dead Peer Detection (DPD) 시간 초과, IP 주소 등의 터널 옵션을 사용자가 직접 지정 가능
터널의 IPsec SA는 터널이 구성되고 난 후 일반적으로 만료될 때까지 다시 협상하지 않는다. 대부분 설정한 시간이 지나면 IPSec SA는 만료된다. 그런데 IPsec SA가 만료되기 전에 네트워크 장애가 발생하여 사이트의 통신이 중단되더라도 피어는 계속해서 터널을 통해 트래픽을 보내는 문제가 발생한다.
DPD가 활성화되면 DPD 프로브가 전송되어 fail된 터널을 감지하고, 해당 IPSec SA를 중지한다. DPD는 동일한 목적지에 대한 redundant 터널이 구성된 상태에서, primary 터널에 문제가 생기면 DPD로 체크하여 backup 터널로 fail-over하는 방식에 매우 유용한 방법이다.
Direct Connect & VPN
- VPC를 Private VIF가 아닌 Public VIF를 사용하여 연결을 생성하면 VPN 설정이 가능 (각 터널은 VGW 퍼블릭 IP 주소를 사용하므로 Public VIF)
- Direct Connect는 암호화가 제공되지 않으므로 전송 중 암호화가 필요할 때 사용
AWS Route Learning
정적 라우팅 (Static Routing)
- IP CIDR 대역 / Network Prefix를 수동으로 직접 구성
- 소규모 네트워크에 적합
- Site-to-Site VPN에서 지원
동적 라우팅 (Dynamic Routing)
- 라우팅 프로토콜에 의해 연결된 라우터끼리 Network Prefix를 자동으로 공유
- 대규모 네트워크에 적합
Direct Connect
,Site-to-Site VPN
에서 지원- AWS에서는 Dynamic Routing 프로토콜에 BGP(Border Gateway Protocol)만 사용 가능
Direct Connect는 정적 라우팅을 지원하지 않는다.
라우팅 옵션 Amazon은 라우팅 테이블에서 LPM(Longest Prefix Match)을 통해 트래픽과 일치하는 가장 구체적인 라우팅을 사용하여 트래픽의 라우팅 방법을 결정합니다. 라우팅 테이블에 겹치거나 일치하는 경로가 있는 경우 다음 규칙이 적용됩니다.
- Site-to-Site VPN 연결 또는 AWS Direct Connect 연결에서 전파된 경로가 VPC의 로컬 경로와 중첩되는 경우 전파된 경로가 더 특정하더라도 로컬 경로가 가장 우선적으로 적용됩니다.
- Site-to-Site VPN 연결 또는 AWS Direct Connect 연결에서 전파된 경로에 다른 기존 정적 경로와 동일한 대상 CIDR 블록이 있는 경우(가장 긴 접두사 일치 항목이 적용될 수 없음) 대상이 인터넷 게이트웨이, 가상 프라이빗 게이트웨이, 네트워크 인터페이스, 인스턴스 ID, VPC 피어링 연결, NAT 게이트웨이, 전송 게이트웨이 또는 게이트웨이 VPC 엔드포인트인 정적 경로가 우선적으로 적용됩니다.
AWS Route Learning
온-프레미스 네트워크에 라우팅하기 위해서는 VPC 서브넷에 연결된 VPC 라우팅 테이블 사용
라우팅 테이블에 라우트를 추가하는 방법
- 관리자가 수동으로 직접 추가
- 라우트 전파(Route Propagation) 옵션을 활성화해서 자동으로 추가
- 라우트 전파의 경우 VGW를 통해 라우트를 전파
라우팅 테이블이 겹치거나 일치하는 경로가 있는 경우
- Dynamic과 Static의 테이블이 동일 하게 겹칠 경우 Static 라우트 선택
- 일반적으로 가장 구체적인 라우트(Longest Prefix)를 선택하지만 라우팅 전파 라우트와 겹칠 경우 Local Route를 먼저 선택
10.1.10.0/24
가10.1.0.0/16
보다 더 구체적인 라우트이지만 Local Route인10.1.0.0/16
선택 - Direct Connect -> Static VPN -> BGP VPN (Dynamic)순으로 선택
BGP (Border Gateway Protocol)
- 다른 자율시스템(AS)의 라우터 간 라우터 정보를 교환하는 Exterior Gateway Protocol
- 조직 외부에서 사용하는 라우팅 프로토콜
- 서로 Peer 관계로 연결된 라우터끼리 Network Routes (Prefix) 정보를 공유
- BGP는 Peer 끼리 연결만 볼 수 있음 (직접 연결되지 않은 다른 라우터는 볼 수 없음 - NextHop)
- 동일한 목적지로 향하는 라우팅 경로가 여러 개가 있을 경우 Best-Path 알고리즘을 사용해 라우팅을 선택
- TCP 179 프로토콜(BGP) 사용
- ASN(Autonomous System Number)로 BGP 라우터를 구분
BGP - 라우팅 경로 선택
라우팅 경로 선택 순서
Network | Next Hop | Metric(MED) | LocPref | Weight | AS Path |
---|---|---|---|---|---|
192.168.1.0/24 | 0.0.0.0 | 0 | 100 | 32768 | i |
192.168.2.0/24 | Router 2 | 0 | 100 | 0 | 102, i |
192.168.3.0/24 | Router 3 | 0 | 100 | 0 | 103, i |
1. Highest Weight
- 값이 높은 것을 우선하여 선택
- 자기 자신의 라우터는 기본값이 32768이며 다른 라우터에서 학습한 값은 0
2. Highest Local Preference
- 값이 높은 것을 우선하여 선택
- 기본값은 100
3. Shortest AS Path
- 가장 짧은 경로를 우선하여 선택
- 자기 자신의 라우터는 i (internal)이며 여러 라우터를 거칠 경우 AS Path가 추가됨
4. Lowest Metric
- 값이 낮은 것을 우선하여 선택
예시) 라우팅 경로 선택
10Mbps 대역폭을 사용하기보다 100Mbps를 두 번 사용하는 경로로 변경하고 싶다면 라우팅 경로 선택에 영향을 주는 속성값이 우선순위를 가질 수 있도록 변경합니다. 즉 그림에서 노란색 경로가 아닌 빨간색 경로로 라우팅을 하고 싶다면 다음과 같이 속성값을 변경합니다.
Manipulating Routes (라우트 속성값 조정)
Weight 값 변경
AS Path 임의 추가 (AS Prepending)
VPN 실습
- 고객 게이트웨이 생성
- 라우팅: (정적 선택)
- 동적 (Dynamic)
- 정적 (Static)
- IP 주소: 1.2.3.4 (데이터 센터가 없으므로 연결 테스트 불가, 임의로 설정)
- 가상 프라이빗 게이트웨이 생성
- ASN: (기본 옵션 선택)
- Amazon 기본 옵션
- 사용자 지정 ASN
- 가상 프라이빗 게이트웨이와 VPC 연결
가상 프라이빗 게이트웨이 - 작업 - VPC에 연결 - VPC 선택
- 라우팅 전파 활성화
VPC → 라우트 테이블 → 연결할 서브넷과 연결된 라우팅 테이블 선택 → 라우팅 전파 → 라우팅 전파 편집 → 전파: 활성화
- Site-to-Site 연결 생성
- 대상 게이트웨이 유형: 가상 프라이빗 게이트웨이
- 생성된 가상 프라이빗 게이트웨이 선택
- 고객 게이트웨이: 기존
- 고객 게이트웨이: 선택
- 라우팅 옵션: 동적 (Dynamic)
- 터널 내부 IP 버전 IPv4
- 터널 옵션 - 기본 옵션 적용
구성 다운로드
- Cisco - Cisco ASR 1000
구성파일 요소 뜯어보기
- VPN Connection ID (VPN 커넥션 ID)
- Virtual Private Gateway ID (가상 프라이빗 게이트웨이 ID)
- Customer Gateway ID (고객 게이트웨이 ID)
- Internet Key Exchange (IKE) Configuration
- IPSec Configuration
- Tunnel Interface Configuration (Tunnel #1)
interface Tunnel1
ip address 169.254.212.194 255.255.255.252
ip virtual-reassembly
tunnel source 1.2.3.4
tunnel destination 13.215.36.83
tunnel mode ipsec ipv4
tunnel protection ipsec profile ipsec-vpn-087de9769f27a7ae6-0
ip tcp adjust-mss 1379
no shutdown
exit
Tunnel #1
- Tunnel Inside IP: 169.254.212.194/30
- 1.2.3.4 (CGW) -> 13.215.36.83 (Tunnel External IP)
VPN 채널 안쪽(내부) IPv4 주소 범위
169.254.0.0/16
~169.254.0.0/30
Tunnel Interface Configuration (Tunnel #2)
interface Tunnel1
ip address 169.254.209.110 255.255.255.252
ip virtual-reassembly
tunnel source 1.2.3.4
tunnel destination 54.151.219.100
tunnel mode ipsec ipv4
tunnel protection ipsec profile ipsec-vpn-087de9769f27a7ae6-1
ip tcp adjust-mss 1379
no shutdown
exit
Tunnel #2
- Tunnel Inside IP: 169.254.209.110/30
- 1.2.3.4 (CGW) -> 54.151.219.100 (Tunnel External IP)
- Border Gateway Protocol (BGP) Configuration (Tunnel #1)
router bgp 65000
neighbor 169.254.212.193 remote-as 64512
neighbor 169.254.212.193 activate
neighbor 169.254.212.193 timers 10 30 30
address-family ipv4 unicast
neighbor 169.254.212.193 remote-as 64512
neighbor 169.254.212.193 timers 10 30 30
neighbor 169.254.212.193 default-originate
neighbor 169.254.212.193 activate
neighbor 169.254.212.193 soft-reconfiguration inbound
exit
- Border Gateway Protocol (BGP) Configuration (Tunnel #2)
router bgp 65000
neighbor 169.254.209.109 remote-as 64512
neighbor 169.254.209.109 activate
neighbor 169.254.209.109 timers 10 30 30
address-family ipv4 unicast
neighbor 169.254.209.109 remote-as 64512
neighbor 169.254.209.109 timers 10 30 30
neighbor 169.254.209.109 default-originate
neighbor 169.254.209.109 activate
neighbor 169.254.209.109 soft-reconfiguration inbound
구성 파일은 예시일 뿐이며 의도한 Site-to-Site VPN 연결 설정과 완전히 일치하지 않을 수 있습니다. 이 파일은 AWS 리전 및 AWS GovCloud 리전 내의 AES128, SHA1 및 Decvelman Gellman 그룹 2의 Site-to-Site VPN 연결에 대한 최소 요구 사항을 명시합니다. 또한 인증을 위해 사전 공유키를 지정합니다. 추가 보안 알고리즘
, Diffie-Hellman 그룹
, 프라이빗 인증서
및 IPv6 트래픽
을 활용하려면 예제 구성 파일을 수정해야 합니다.
구성파일 보고 Site-to-Site Connection 아키텍처 그려보기
255.255.255.252
는 서브넷 비트로/30