Site-to-Site VPN with Transit Gateway

 

개요

Transit Gateway + Site-to-Site VPN 연결 가이드.

 

환경

네트워크 구성

AWS Transit Gateway와 온프레미스 데이터센터를 Site-to-Site VPN으로 연결하는 상황입니다.

Transit Gateway + Site-to-Site VPN Connection 구성도

 

로컬 작업환경

 

준비사항

AWS CLI

작업자의 로컬 환경에 AWS CLI가 설치되어 있어야 합니다.

$ aws version
aws-cli/2.10.1 Python/3.11.2 Darwin/22.3.0 source/arm64 prompt/off

 

macOS 사용자의 경우 패키지 관리자인 brew를 사용하면 간단하게 설치 가능합니다.

$ brew --version
Homebrew 4.0.4
Homebrew/homebrew-core (git revision 18b3215d6d3; last commit 2023-02-17)
Homebrew/homebrew-cask (git revision 90f1b9d0c9; last commit 2023-02-17)

$ brew install awscli

 

충분한 IAM 권한

AdministratorAccess IAM 권한 혹은 EC2, VPC 서비스에 대한 충분한 IAM 권한을 보유하고 있어야 VPN 구성 작업 진행이 가능합니다.

 

배경지식

VPN Tunneling

Site-to-Site VPN 연결을 생성할 때 각 터널 구성 정보를 포함하여 디바이스 구성 정보가 포함된 고객 게이트웨이 디바이스별 구성 파일을 다운로드합니다. Site-to-Site VPN 연결을 만들 때 선택적으로 일부 터널 옵션을 직접 지정할 수 있습니다. 따로 설정하지 않으면 AWS에 지정된 기본값으로 VPN Tunneling 옵션이 설정됩니다.

관련 문서 : Site-to-Site VPN Tunnel 옵션 설명

 

Transit Gateway + VPN 구성

Virtual Private Gateway 대신 Transit Gateway에 VPN을 연결하면 아래와 같은 장단점이 있습니다.

관련 문서 : 네트워크간의 연결 옵션 설명

 

장점

 

한계점

 

작업절차

Customer Gateway 정보 수집

AWS에서 Customer Gateway는 온프레미스 사이트에 위치해서 VPN 연결을 제공하는 네트워크 장비를 의미합니다.
일반적으로 네트워크 라우터, UTM 장비, VPN 장비 등에 Customer Gateway에 해당됩니다.

VPN 연결을 하기 위해 필요한 Customer Gateway 장비 정보는 다음과 같습니다.

위와 같은 네트워크 정보는 온프레미스 데이터센터를 관리하는 네트워크 엔지니어나 VPN 장비 및 연결을 관리하는 보안 엔지니어에게 문의해서 얻을 수 있습니다.

 

Customer Gateway 생성

얻은 정보를 바탕으로 AWS CLI의 create-customer-gateway 명령어를 사용해서 Customer Gateway를 생성합니다.

# Customer Gateway 생성
aws ec2 create-customer-gateway \
  --type ipsec.1 \
  --bgp-asn 65000 \
  --ip-address "11.11.11.11" \
  --tag-specifications 'ResourceType="customer-gateway",Tags=[{Key="Name",Value="test-customer-gateway"}]'

Customer Gateway 생성 시 옵션 설명

자세한 정보는 AWS 공식문서 “Site-to-Site VPN 연결을 위한 고객 게이트웨이 옵션“을 참고합니다.

 

Customer Gateway가 정상적으로 생성된 경우, 다음과 같이 json 포맷으로 결과값이 출력됩니다.

{
    "CustomerGateway": {
        "BgpAsn": "65000",
        "CustomerGatewayId": "cgw-0ead937284c8c2383",
        "IpAddress": "11.11.11.11",
        "State": "available",
        "Type": "ipsec.1",
        "Tags": [
            {
                "Key": "Name",
                "Value": "test-customer-gateway"
            }
        ]
    }
}

 

AWS 콘솔 → VPC → Customer gateways 메뉴에 접속합니다.

AWS 콘솔에서 확인한 Customer Gateway

새로 생성한 Customer Gateway 정보를 확인합니다.

 

VPN Connection 생성

이후 VPN Connection을 생성합니다.
VPN Connection을 통해 Transit Gateway와 이전에 만든 Customer Gateway를 VPN 연결할 수 있습니다.
VPN Connection을 생성하면 기본적으로 2개의 VPN 터널이 생성됩니다.

 

Config 전달

Customer Gateway(UTM 또는 VPN) 장비에 VPN Config를 입력해야 AWS의 Transit Gateway와 VPN 터널링이 완료됩니다.

 

VPN 샘플 파일을 다운로드를 받기 전에 Customer Gateway의 제조사와 모델명, OS 버전 정보를 먼저 확인합니다.

# VPN Connection 설정파일에서 고를 수 있는 장비타입 확인
aws ec2 get-vpn-connection-device-types \
  --region ap-northeast-2 \
  --query 'VpnConnectionDeviceTypes[]' \
  --output table
-----------------------------------------------------------------------------------------------------------------------
|                                             GetVpnConnectionDeviceTypes                                             |
+-----------------------------+--------------------------------+-------------------------+----------------------------+
|          Platform           |           Software             |         Vendor          | VpnConnectionDeviceTypeId  |
+-----------------------------+--------------------------------+-------------------------+----------------------------+
|  NextGen Firewall F-Series  |  6.2+                          |  Barracuda              |  36ef5d04                  |
|  Gaia                       |  R77.10+                       |  Checkpoint             |  feabc07e                  |
|  Gaia                       |  R80.10+                       |  Checkpoint             |  1b270706                  |
|  MX Series                  |  15.12+ (WebUI)                |  Cisco Meraki           |  42ff1bfc                  |
|  MX Series                  |  9.0+ (WebUI)                  |  Cisco Meraki           |  866e027c                  |
|  ASA 5500 Series            |  ASA 8.2+                      |  Cisco Systems, Inc.    |  6883834a                  |
|  ASA 5500 Series            |  ASA 9.7+ VTI                  |  Cisco Systems, Inc.    |  b556dcd1                  |
|  ASA 5500 Series            |  ASA 9.x                       |  Cisco Systems, Inc.    |  78c1a727                  |
|  Cisco ASR 1000             |  IOS 12.4+                     |  Cisco Systems, Inc.    |  48548f98                  |
|  CSRv AMI                   |  IOS 12.4+                     |  Cisco Systems, Inc.    |  7b754310                  |
|  Firepower                  |  v6.2.2+                       |  Cisco Systems, Inc.    |  ae4cefeb                  |
|  ISR Series Routers         |  IOS 12.4+                     |  Cisco Systems, Inc.    |  b0adb196                  |
|  Netscaler CloudBridge      |  NS 11+                        |  Citrix                 |  d995c2ab                  |
|  CR15iNG                    |  V 10.6.5 MR-1                 |  Cyberoam               |  f8eac8fc                  |
|  BIG-IP                     |  v12.0.0+                      |  F5 Networks, Inc.      |  56c86b54                  |
|  Fortigate 40+ Series       |  FortiOS 4.0+                  |  Fortinet               |  2b2c1a73                  |
|  Fortigate 40+ Series       |  FortiOS 4.0+ (GUI)            |  Fortinet               |  980b2a2d                  |
|  Fortigate 40+ Series       |  FortiOS 5.0+                  |  Fortinet               |  9d9470de                  |
|  Fortigate 40+ Series       |  FortiOS 5.0+ (GUI)            |  Fortinet               |  887cd1a5                  |
|  Fortigate 40+ Series       |  FortiOS 6.4.4+ (GUI)          |  Fortinet               |  7125681a                  |
|  Generic                    |  Vendor Agnostic               |  Generic                |  9005b6c1                  |
|  MSR800                     |  Version 5.20                  |  H3C                    |  670add1b                  |
|  SEIL/B1                    |  SEIL/B1 3.70+                 |  IIJ                    |  40b66cf5                  |
|  SEIL/X1 and SEIL/X2        |  SEIL/X 3.70+                  |  IIJ                    |  a0c6b2f4                  |
|  SEIL/x86                   |  SEIL/x86 2.30+                |  IIJ                    |  4b8b2ed4                  |
|  J-Series Routers           |  JunOS 9.5+                    |  Juniper Networks, Inc. |  8a961875                  |
|  SRX Routers                |  JunOS 11.0+                   |  Juniper Networks, Inc. |  1361227b                  |
|  SSG and ISG Series Routers |  ScreenOS 6.1                  |  Juniper Networks, Inc. |  acabcac0                  |
|  SSG and ISG Series Routers |  ScreenOS 6.2+                 |  Juniper Networks, Inc. |  631f834b                  |
|  SSG and ISG Series Routers |  ScreenOS 6.2+ (GUI)           |  Juniper Networks, Inc. |  d36a4756                  |
|  Windows Server             |  2008 R2                       |  Microsoft              |  dd55903b                  |
|  Windows Server             |  2012 R2                       |  Microsoft              |  411e7147                  |
|  RouterOS                   |  6.36                          |  Mikrotik               |  2b5427d7                  |
|  RouterOS                   |  6.47                          |  Mikrotik               |  37d8aff6                  |
|  Openswan                   |  Openswan 2.6.38+              |  Openswan               |  6e62f3e3                  |
|  PA Series                  |  PANOS 4.1.2+                  |  Palo Alto Networks     |  754a6372                  |
|  PA Series                  |  PANOS 4.1.2+ (GUI)            |  Palo Alto Networks     |  9612cbed                  |
|  PA Series                  |  PANOS 7.0+                    |  Palo Alto Networks     |  5fb390ba                  |
|  pfSense                    |  pfsense 2.2.5+(GUI)           |  pfSense                |  74671aaa                  |
|  NSA, TZ                    |  OS 5.8                        |  SonicWall              |  4280e43e                  |
|  NSA, TZ                    |  OS 5.9                        |  SonicWall              |  60ca5da1                  |
|  NSA, TZ                    |  OS 6.2                        |  SonicWall              |  46154821                  |
|  NSA, TZ                    |  OS 6.5                        |  SonicWall              |  fa2df246                  |
|  ASG                        |  V8.300+                       |  Sophos                 |  758d1557                  |
|  Sophos Firewall            |  v19+                          |  Sophos                 |  90f254e7                  |
|  UTM                        |  V9                            |  Sophos                 |  e5ec51ed                  |
|  Ubuntu 16.04               |  Strongswan 5.5.1+             |  Strongswan             |  51cb26fd                  |
|  Vyatta Network OS          |  Vyatta Network OS 6.5+        |  Vyatta                 |  f1647754                  |
|  XTM, Firebox               |  Fireware OS 11.11.4 (WebUI)   |  WatchGuard, Inc.       |  a0745ade                  |
|  XTM, Firebox               |  Fireware OS 11.12.2+ (WebUI)  |  WatchGuard, Inc.       |  dbeffb53                  |
|  RTX Routers                |  Rev.10.01.16+                 |  Yamaha                 |  e7a2d626                  |
|  ZyWALL                     |  ZLD 4.3+                      |  Zyxel                  |  400e7aee                  |
|  Zywall Series              |  Zywall 4.20+                  |  Zyxel                  |  1153d0d2                  |
+-----------------------------+--------------------------------+-------------------------+----------------------------+

위 표는 AWS에서 Site-to-Site VPN 연결을 지원하는 전체 VPN 장비 목록입니다.

 

제 경우 온프레미스 데이터센터에서 FortiGate 제조사의 UTM을 VPN 장비로 사용하고 있습니다.
또한 FortiOS 7.x를 사용하고 있어서 이에 맞게 VpnConnectionDevieTypeId 값을 찾았습니다.

주의사항
이 과정은 제 글 그대로 따라하면 오류가 발생하므로, 각자 사용중인 온프레미스 데이터센터 환경에 맞는 값으로 진행해야 합니다.

-----------------------------------------------------------------------------------------------------------------------
|                                             GetVpnConnectionDeviceTypes                                             |
+-----------------------------+--------------------------------+-------------------------+----------------------------+
|          Platform           |           Software             |         Vendor          | VpnConnectionDeviceTypeId  |
+-----------------------------+--------------------------------+-------------------------+----------------------------+
|  ...                        |  ...                           |  ...                    |  ...                       |
|  Fortigate 40+ Series       |  FortiOS 5.0+                  |  Fortinet               |  9d9470de                  |
|  Fortigate 40+ Series       |  FortiOS 5.0+ (GUI)            |  Fortinet               |  887cd1a5                  |
|  Fortigate 40+ Series       |  FortiOS 6.4.4+ (GUI)          |  Fortinet               |  7125681a                  |
|  ...                        |  ...                           |  ...                    |  ...                       |
+-----------------------------+--------------------------------+-------------------------+----------------------------+

제 경우 VpnConnectionDeviceTypeId 값인 7125681a을 사용해서 VPN 설정파일을 생성해야 합니다.

 

이제 Customer Gateway의(VPN, UTM 장비을 의미) 장비 타입을 확인했으니, 그 버전에 맞는 샘플 Config 파일을 다운로드 받습니다.

명령어 형식

aws ec2 get-vpn-connection-device-sample-configuration \
  --vpn-connection-id <vpn-id> \
  --vpn-connection-device-type-id <device-type-id> \
  --internet-key-exchange-version <ike-version> \
  --region <aws-region> \
  --output text

 

실제 명령어

새로 만든 VPN Connection에 대한 Config 파일 전체 내용을 다운로드 받습니다.

# 지정한 VPN Connection의 Config 파일 다운로드
aws ec2 get-vpn-connection-device-sample-configuration \
  --vpn-connection-id vpn-012d34567c8d901a2 \
  --vpn-connection-device-type-id 7125681a \
  --internet-key-exchange-version ikev2 \
  --region ap-northeast-2 \
  --output text

 

VPN 구성 작업

이후 과정은 VPN 네트워크와 온프레미스 장비를 관리하는 보안 엔지니어 혹은 네트워크 엔지니어가 진행합니다.
다운로드 받은 VPN Config 파일을 VPN 담당 보안/네트워크 엔지니어에게 전달합니다.

 

구성 완료 후 AWS 콘솔 → VPC → VPN → Site-to-Site VPN connections 메뉴로 이동합니다.
여기서 Site-to-Site VPN Connection의 터널링 연결상태를 확인할 수 있습니다.

터널링 연결상태 확인

2개의 VPN Tunnel 상태가 모두 Up이면 정상적으로 구성 완료된 것입니다.

 

Transit Gateway 라우팅

VPN 내부 대역 사용자가 VPC 내부에 있는 서비스들에 접근 가능하도록 Transit Gateway에서 다음 설정을 진행합니다.

 

VPN 터널 Failover 테스트

Failover 테스트

 

테스트 시 주의사항

VPN 터널 싱글 구성인 경우 AWS 콘솔에서 출력되는 경고문

 

절체 테스트를 마친 후에는 Site-to-Site VPN 네트워크 구성 작업은 종료됩니다.

 

구성 결과

완성된 Customer Gateway와 Transit Gateway간의 Site-to-Site VPN 구성은 다음과 같습니다.

 

Resource Access Manager 구성

RAM을 통해 공유된 Transit Gateway 구성

 

Site-to-Site VPN Connection 구성

완성된 VPN 네트워크 구성도

 

Route 53 Inbound Resolver

Route 53 Inbound Resolver를 구성해서 온프레미스 네트워크 내부에 Route 53 Private DNS를 제공했습니다.

Route 53 Inbound Resolver를 사용한 DNS 쿼리 제공

 

이상으로 Site-to-Site VPN 구축 가이드를 마치겠습니다.