HA VPN 통신이란 IPSec VPN연결을 통해 GCP의 VPC와 On-premise 네트워크를 연결해주는 통신을 말합니다.
우리는 이 VPN을 통해 On-premise는 물론, AWS나 Azure의 VPC 환경과도 연결을 구성할 수 있습니다.
이번 포스팅에는 AWS의 VPC와 GCP의 VPC 을 HA VPN 연결을 통해 구성해보겠습니다.
이 구성을 통해 우리는 두 가상 프라이빗 네트워크 환경에서 외부 IP를 노출시킬 필요 없이 안전하게 연결할 수 있습니다.
VPC간 이동하는 트래픽은 퍼블릭 인터넷으로 나가게 된다는 단점이 있지만, IPSec을 통한 암호화 및 인증으로 데이터 노출에 대한 위험 없이 데이터를 주고 받을 수 있습니다.
1. HA VPN이란??
HA VPN은 GCP에서 제공하는 고가용성 VPN 서비스입니다.
기본적으로 BGP를 사용한 리전 동적 라우팅 모드를 활성화하며, VPC 설정에서 전역(Global) 동적 라우팅을 On하면 리전 간 라우팅 경로 학습을 지원하는 전역 동적 라우팅 모드를 활성화할 수도 있습니다.
HA VPN의 가장 큰 이점은 무엇보다 가용성을 보장하는 VPN 서비스라는 것입니다.
엔드 투 엔드 연결이 적절히 구성되었을 경우 99.99%의 가용성을 보장합니다.
무엇보다 기존에 정적 라우팅을 지원하는 Classic VPN의 지원이 2021년 10월부터 중단되기 때문에 앞으로 VPN 구성을 원하시는 분들이라면 HA VPN 구성을 하셔야 할 것으로 보입니다.
다음은 HA VPN을 사용한 두 네트워크 간 연결 구성 토폴로지입니다.
중요한 포인트는,
1. GCP측 VPN Gateway의 NIC가 2개라는 점
2. On-premise측 VPN Gateway 2개가 각각의 NIC와 연결된다는 점,
3. Cloud Router로 향하는 Control plane 연결이 존재한다는 점 3가지 입니다.
이 3가지 포인트에서 말미암아 HA VPN은 3가지 시나리오를 지원합니다.
- 피어 VPN 게이트웨이 기기가 두 개 있으면 Cloud VPN 게이트웨이의 각 인터페이스에서 각 터널을 자체 피어 게이트웨이에 연결해야 합니다.
- 인터페이스가 두 개 있는 단일 피어 VPN 게이트웨이 기기가 있으면 Cloud VPN 게이트웨이의 각 인터페이스에서 각 터널을 피어 게이트웨이의 자체 인터페이스에 연결해야 합니다.
- 인터페이스가 하나 있는 단일 피어 VPN 게이트웨이 기기가 있으면 Cloud VPN 게이트웨이의 각 인터페이스에서 두 터널 모두 피어 게이트웨이의 동일한 인터페이스에 연결해야 합니다.
본 포스팅에서는 AWS VPN와의 연결을 구성하는 3번째 시나리오를 시연해보겠습니다.
2. HA VPN 구성
AWS VPC와 HA VPN 구성을 하는 Step은 다음과 같습니다.
- HA VPN gateway 및 Cloud Router 생성
- AWS virtual private gateways 생성
- AWS site-to-site VPN connections 과 customer gateways 생성
- AWS configuration files 다운로드
- HA VPN gateway에 VPN tunnel 생성
- 다운로드받은 AWS configuration file의 BGP IP 사용하여 Cloud Router에 BGP session 설정
각각의 Step에 맞춰서 구성을 진행하도록 하겠습니다.
2-1. HA VPN gateway 및 Cloud Router 생성
첫 Step은 GCP측에서 진행합니다.
GCP의 VPN 탭에서 새 VPN 생성을 클릭합니다.
VPN option 선택 페이지에서 High-availability(HA) VPN을 체크합니다.
이어지는 생성 페이지에서 적절한 VPN gateway 이름과 VPC, Region을 선택합니다.
이 과정에서 GCP측의 VPN Gateway가 생성되며 2개의 Public IP address가 붙게 됩니다.
다음 과정에서는 VPN 연결에 필요한 Cloud Router를 생성합니다.
이전과 동일하게 적절한 이름과 VPC, Region을 지정하되, Google ASN에는
64512 - 65534, 4200000000 - 4294967294
범위에 해당하는 값을 넣어야 합니다.
만약 AWS 측에서 사용하고 있는 ASN 값이 이미 존재한다면 그 값을 피해야 합니다.
본 포스팅에서는 GCP와 AWS 두 환경 모두 아무런 리소스가 없다고 가정하기 때문에 GCP측에서 먼저 ASN을 정할 수 있습니다.
위 범위에 해당하는 값 중 원하는 값을 Google ASN에 넣습니다.
여기까지 GCP VPN Gateway와 Cloud Router를 생성했습니다.
다음 Step부터는 AWS측에서 진행해야 합니다.
진행하기 전에 GCP측에서 AWS에게 2가지 정보를 전달해야 합니다.
- HA Gateway의 Public IP address
- Cloud Router의 ASN
이 2가지 정보를 AWS측에 넘겨주도록 합니다.
2-2. AWS측 리소스 구성
이제부터는 AWS측에서 VPN 구성에 필요한 리소스를 구성해야 합니다.
GCP측에서 받은 2가지 정보를 기반으로 리소스를 생성합니다.
우선 AWS의 Virtual Private Gateway를 생성합니다.
이름을 적절히 지정하되 ASN은 Custom ASN, ASN 값은 Google ASN과 겹치지 않는 값 중 위의 ASN 범위 내에 속하는 값을 입력합니다.
생성한 Virtual Private Gateway는 VPC에 Attach하도록 합니다.
다음으로 GCP측의 Gateway 정보를 입력하는 Customer Gateway 리소스를 생성합니다.
이름은 적절하게, Routing에 Dynamic을 지정합니다.
BGP ASN에 GCP Cloud Router의 Google ASN을, IP Address에 GCP VPN Gateway의 IP Address를 입력해야 합니다.
다음으로 VPN Tunnel을 구성하는 Site to Site Connection을 생성합니다.
Target Gateway Type에 Virtual Private Gateway를 체크하고 생성한 Virtual Private Gateway를 지정합니다.
Customer Gateway도 Exisiting을 체크하고 생성한 Customer Gateway를 지정합니다.
Routing Options에 Dynamic, IP version에 IPv4를 체크합니다.
Local IPv4 Network Cidr는 AWS측에서 사용하는 라우팅 대역을 입력합니다.
Remote IPv4 Network Cidr는 GCP측의 라우팅 대역을 입력합니다.
추가적으로 Tunnel option에서 IKEv2에만 체크한 뒤 Connection을 생성합니다.
Tunnel은 자동으로 2개가 생성됩니다.
생성을 마친 이후 Download Configuration 버튼을 클릭하면 GCP측에 넘겨줄 정보를 쉽게 다운받을 수 있습니다.
2-3. GCP Peer gateway 생성
다시 GCP측으로 돌아와서 AWS VPN Gateway 정보를 지정하는 Peer Gateway를 생성합니다.
Interfaces는 two interfaces를 선택한 뒤 AWS측에서 제공받은 Tunnel들의 IP adress를 입력합니다.
AWS 콘솔에서는 Outside IP Address에서 확인할 수 있습니다.
이후 GCP측에서 Tunnel을 구성합니다.
Peer VPN gateway name에서 이전에 생성한 Peer gateway를 지정합니다.
High availability에서는 Create a single VPN tunnel을 선택합니다.
Create a pair of VPN tunnels 옵션은 2개의 Peer Gateway와 연결할때 선택하는 옵션입니다.
Cloud Router에서는 이전에 생성한 Cloud Router를 지정합니다.
이어서 Tunnel에 사용할 GCP Gateway의 NIC와 Peer Gateway의 NIC를 지정합니다.
본 포스팅에서는 GCP측 Gateway의 1개 NIC에 AWS측의 2개 NIC에서 나오는 터널을 연결할 것이기 때문에,
Cloud VPN gateway의 0번 NIC에 Peer VPN gateway의 0,1번 NIC를 모두 연결할 것입니다.
두 Interface 모두 NIC 0번으로 지정한 뒤, IKE version을 IKEv2로 지정합니다.
스크린샷에는 나와있지 않지만, Pre-shared Key를 입력하는 중요한 칸이 있습니다.
AWS측에서 넘겨준 Configuration file에서 해당 값을 찾을 수 있습니다.
2-4. BGP session 구성
Tunnel을 생성했다면 마지막으로 터널의 BGP session을 구성해야 합니다.
Peer ASN에 AWS에서 지정한 ASN을 입력합니다.
다음 Cloud Router BGP IP와 BGP peer IP란을 입력하는 칸이 있습니다.
이 칸에 넣을 값 또한 AWS에서 넘겨준 Configuration file에서 찾을 수 있습니다.
Configuration file의 구성 방식에 따라 다르지만 보통 /30으로 구성된 IP address range에서 remote ip address가 Cloud Router의 BGP IP, Local ip address가 AWS, 즉 Peer의 BGP IP입니다.
2-5. Connection test
BGP Session 구성까지 마친 후 Cloud VPN tunnels 탭에서 VPN tunnel status와 BGP session status란이 모두 Established 되었다면 연결이 성공한 것입니다.
이제 위와 같은 방법으로 하되 GCP VPN Gateway의 0번 NIC에 Peer VPN Gateway의 1번 NIC를 연결하는 Tunnel을 하나 더 구성합니다.
최종적으로 위와 같이 2개의 Tunnel이 모두 Established 되었다면 HA-VPN 구성이 성공적으로 완료된 것입니다.
3. HA-VPN 연결 추가 옵션
GCP VPN Gateway에서 1개의 NIC만 연결했으므로 엄밀한 의미에서 HA한 구성은 아니지만 추후 AWS측에서 VPN Gateway를 하나 더 추가한다면 남은 NIC에 연결해 높은 가용성의 VPN 연결을 구성할 수 있습니다.
VPN연결은 리전 동적 라우팅 모드로 구성했으므로 리전 안에서만 라우팅 경로를 학습할 수 있지만, 원한다면 VPC에서 Global routing mode를 활성화해 전역 라우팅 모드로 변경할 수도 있습니다.
4. 마무리
지금까지 AWS와 GCP 간 HA-VPN을 이용한 VPN 연결을 구성해 보았습니다.
앞서 말했듯이 2021년 10월부터는 기본 VPN을 사용한 정적 라우팅은 지원이 중단되기 때문에 앞으로 VPN 연결은 동적 라우팅 모드의 HA-VPN으로 구성해야 합니다.
비단 AWS 뿐만 아니라 On-premise 환경이나 Azure같은 다른 VPC 환경에서도 위와 동일한 방법으로 높은 가용성의 VPN 연결을 구성할 수 있습니다.
이 포스팅을 보는 분들이 많은 도움을 얻으셨으면 합니다.
'GCP' 카테고리의 다른 글
GCP Compute Engine에 Gitlab 서버 구축 + VS Code 연동하기 (0) | 2021.05.19 |
---|---|
GCP Instance Metadata를 100% 활용하는 방법 (0) | 2021.04.27 |
AWS RDS의 데이터를 GCP bigQuery에서 분석해보자 (Federated query, CDC migration) (17) | 2021.03.13 |
GCP Professional Data Engineer Certificate 취득기 (3) | 2021.02.02 |
GCP Cloud monitoring으로 편리하게 Network monitoring을 해보자 (0) | 2021.01.23 |