본문 바로가기

Cloud/AWS

Azure - AWS 간의 VPN 연동 및 BGP 연결

Today Keys : vpn, private, gateway, aws, azure, vpc, vnet, tunnel, 프라이빗, network, bgp, ipsec


이번 포스팅에서는 Azure와 AWS 간의 가상 네트워크(VNet/VPC)를 VPN을 통해서 연결하고 BGP 구성을 하는 예제입니다.

추후에 AWS와 GCP, Azure와 GCP 간의 VPN 연결 및 BGP 구성을 하는 예제도 다뤄질 예정입니다.

 


이번 포스팅에서 구성하게 될 전체적인 구성도입니다.

Azure와 AWS에 각각의 가상 네트워크(VNet/VPC)를 구성하고, VPN 연결을 통해서 Private하게 서로 연결을 합니다.

각 네트워크 대역은 BGP를 통해서 연결하게 됩니다.

본 포스팅에서는 사전에 기본 네트워크(VPC/VNet) 및 서브넷을 미리 구성하고, 테스트를 위해서 가상 머신 1대를 미리 배포하였습니다.

기본적으로 구성된 네트워크 이후에 VPN을 통해서 Azure와 AWS를 연동하고, BGP 연결하여 정상적으로 통신이 되는지 테스트를 합니다.

 

 

 

 

먼저 Azure에서 가상 네트워크 게이트웨이(Virtual Network Gateway)를 만듭니다    

가상 네트워크 게이트웨이의 이름과 지역(Region)을 먼저 설정합니다.

다음은 게이트웨이 유형을 선택하는 데, VPN과 전용선 연결을 위한 ExpressRoute가 있습니다.

이번 포스팅에서는 VPN 연결 위한 내용이기 때문에 게이트웨이 유형을 VPN으로 선택합니다.

VPN 형식은 경로 기반과 정책 기반을 선택 할 수 있는 데,

BGP를 이용한 동적 라우팅(Routing) 기반으로  경로를 제어하기 위해서 경로 기반을 선택합니다.

가상 네트워크 게이트웨이의 SKU와 세대(Generation)을 선택합니다.

SKU에 따라서 성능이 달라지기 때문에, 필요한 성능을 확인하여 SKU를 선택합니다.

SKU는 Basic(기본)과 VpnGw1 ~ 5 까지 있습니다.

이 중, VpnGw 4/5는 Generation 2에서만 지원됩니다.

※ 참고로, 동일 세대 내에서는 SKU 조정이 가능합니다. (단, 기본은 조정이 불가합니다.)

그리고 가상 네트워크 게이트웨이를 배포 할 가상 네트워크를 선택합니다.

가상 네트워크 게이트웨이는 가상 네트워크 내의 'GatewaySubnet'에 배포됩니다.

 

다음은 가상 네트워크 게이트웨이에서 VPN 연결에 사용할 공용 IP를 선택합니다.

기존에 만들어 둔 PIP를 사용하거나 새로 만들어서 사용할 수 있습니다.

여기에서는 새로 만들어서 사용을 합니다.

그리고, VPN 이중화를 위해서 'Active-Active 모드를 사용하도록 설정'을 '사용'으로 체크합니다.

이중화 구성을 체크하면 두 번째 공용 IP를 추가하는 데, 첫 번째 공용 IP와 동일하게 새로 만들어서 사용합니다.

다음으로 AWS와 BGP로 네트워크를 연결할 것이기 때문에 BGP 구성을 '사용'으로 체크합니다.

BGP 연결을 위해서 가상 네트워크 게이트웨이에서 사용 할 ASN을 지정합니다.

참고로 기본 ASN 값은 65515이며, 본 예제에서도 기본 값을 사용합니다.

그리고, BGP 피어링을 위한 IP 설정을 하는 데 Azure에서는 BGP 기본 값으로는 Gateway Subnet 내의 IP로 자동 설정되지만,

APIPA(automatic private IP addressing)인 169.254.0.0을 이용해서 연동을 해야 하는 경우를 위해서

Azure APIPA BGP IP 주소를 설정 할 수 있습니다.      

AWS와 연동 시에, APIPA를 이용해서 연동해야 하기 때문에 Azure APIPA BGP IP 주소도 함께 설정합니다.

 

모든 설정이 끝나고 나면, 현재 설정한 값을 검토 후에 '만들기' 버튼을 클릭해서 가상 네트워크 게이트웨이를 생성합니다. 

 

 

생성된 가상 네트워크 게이트웨이를 아래와 같이 확인 할 수 있습니다.   

Active-Active로 구성하였지만, 개요에는 첫 번째 IP 주소만 확인이 됩니다.

 

 

하지만, [설정]-[구성]에서 확인하시면, 초기에 설정한 대로 2개의 IP 주소가 모두 보이는 걸 볼 수 있습니다.

방금 전에 설정한 APIPA BGIP IP 주소 외에,

VPN 연결을 위한 공용 IP 주소와 BGP 연결에 사용하는 피어 IP도 자동 할당된 것을 볼 수 있습니다.

여기에서는 앞서 얘기한 것처럼 APIPA 주소로 BGP를 연결할 것이기 때문에 피어 IP 주소는 사용하지 않고,

VPN 연결을 위해서 공용 IP 주소만 기록해 둡니다.

 

 

 

이제 VPN 연결을 위해서 AWS 쪽 설정을 진행합니다.

먼저 VPN 연결을 위해서 가상 프라이빗 게이트웨이(Virtual Private Gateway:VGW)를 생성합니다.

가상 프라이빗 게이트웨이 생성 시에는 BGP 연결에 사용하는 ASN을 설정하는 데,

Amazon 기본 ASN을 사용하거나, 사용자가 직접 지정 할 수 있습니다.

여기에서는 Amazon 기본 ASN을 사용합니다. 

참고로, Amazon 기본 ASN은 64512 입니다.

 

 

 

가상 프라이빗 게이트웨이를 생성하고 나면, VPC에 연결해줘야 합니다.

현재는 연결되지 않은 상태이기 때문에 상태가 'detached'인 것을 볼 수 있습니다. 

 

 

가상 프라이빗 게이트웨이를 선택하고, [작업]-[VPC에 연결]을 선택합니다.  

 

 

  사전에 만들어 둔, VPC인 'ZIGI-AWS-VPC'에 연결합니다.

 

 

  정상적으로 가상 프라이빗 게이트웨이가 'attached' 상태로 변경된 것을 볼 수 있습니다.

 

 

 

이제 가상 프라이빗 게이트웨이에 연결 할 고객 게이트웨이를 생성합니다.

고객 게이트웨이에는 AWS와 연결 될 Azure의 가상 네트워크 게이트웨이의 ASN과 VPN 연결을 위한 IP 주소를 입력합니다.

앞서 설정했던 Azure ASN인 65515를 입력하고, 가상 네트워크 게이트웨이의 구성에서 확인한  공용 IP 주소를 입력합니다.

나머지 설정 값은 기본 값대로 비워두고 고객 게이트웨이를 생성합니다.

 

 

Azure에서 가상 네트워크 게이트웨이를 Active-Active로 이중화 구성했기 때문에 두 번째 고객 게이트웨이를 설정합니다.

 

 

이제 가상 프라이빗 게이트웨이(VGW)와, 고객 게이트웨이(CGW) 를 모두 만들었고, 마지막으로 VPN 연결(Connection)을 생성합니다.

앞서 만든 가상 프라이빗 게이트웨이와 고객 게이트웨이를 선택합니다.

BGP 연동을 할 것이기 때문에 동적 설정으로 선택하고, 나머지 값은 기본 값으로 그대로 둡니다.

아래의 터널 옵션에 BGP 연결을 위한 내부 IPv4를 설정합니다.

Azure에서는 서브넷 없이 IP로 입력하지만, AWS에서는 네트워크 대역으로 서브넷 비트(bit)를 포함해서 입력합니다.

Azure에서 설정한 APIPA의 동일 네트워크 대역(/30)으로 설정합니다.

그리고 VPN 연결 시에 사용 할 암호화 키 값을 설정합니다. 여기에서는 'zigikey1'로 설정 했습니다.

 

 

두 번째 VPN 연결을 생성합니다.

이미 앞에서 터널 1/2로 이중화 구성을 했지만, 

Azure에서는 가상 네트워크 게이트웨이에, AWS에서는 하나의 VPN 연결에 이중화 설정을 하기 때문에 추가로 VPN 연결을 만듭니다.

(여기에서는 2개의 AWS VPN 연결에서 1번 터널로만 연결을 하고, 2번 터널은 사용하지 않습니다)

 

 

 

 

2개의 VPN 연결 설정을 마치고 나면 다음과 같이 설정이 완료된 모습을 볼 수 있습니다.

각 연결에서, 하단의 '터널 세부 정보' 탭을 선택하면, 터널 별로 VPN 연결을 위한 외부 IP 주소(공인)를 확인할 수 있고

이 값을 기록해서, Azure의 Local Gateway에 입력합니다.

현재는 AWS만 설정이 완료된 상태이기 때문에, 하단의 세부 정보에 IPSec이 아직 연결 전이고, 상태가 작동 중지임을 볼 수 있습니다.

 

 

두 번째 Connection에서 1번 터널의 외부 IP 주소도 함께 기록합니다.

 

 

이제 Azure의 마지막 설정을 위해서 로컬 네트워크 게이트웨이(Local Network Gateway)를 설정합니다.

로컬 네트워크 게이트웨이에 입력하는 IP 주소는 AWS의 VPN 연결(Connection)의 터널에 생성된 공인 IP를 입력합니다.

주소 공간은 AWS 쪽의 VPC 네트워크 대역을 입력하는 곳이지만, BGP로 광고를 받을 것이기 때문에 비워 둡니다.

BGP 설정 구성을 체크하고, AWS의 가상 프라이빗 게이트웨이의 ASN과 VPN 연결의 터널에 설정한 터널 내부 IPv4 CIDR 내에 속한 AWS IP를 입력합니다.  참고로, 30비트의 첫 번째 IP주소가 AWS의 IP 입니다.

 

 

두 번째, 로컬 네트워크 게이트웨이(Local Network Gateway)를 설정합니다.

 

 

이제 마지막 설정인 Azure의 연결(Connection) 설정을 합니다.

VPN 연결이기 때문에 연결 형식을 '사이트 간(IPsec)'로 선택하고, 앞서 만들어 두었던 가상 네트워크 게이트웨이와 로컬 네트워크 게이트웨이를 입력합니다.

AWS VPN 연결의 터널에서 설정한 값과 동일하게 VPN 연결을 위한 키 값(zigikey1)을 입력합니다.

마지막으로 BGP 사용을 체크하고, 남은 값은 기본 값으로 둡니다.

 

 

  마지막으로 2번째 연결(Connection)을 설정하면 모든 설정이 완료되었습니다.

 

 

  이제 AWS의 VPN 연결에서 확인해 보면, 각 연결이 모두 '사용 가능' 상태인 것을 볼 수 있고

하단의 터널 중의 VPN 연결 및 BGP 연동을 한 1번 터널의 상태가 '작동'인 것을 확인할 수 있습니다.

뒤의 세부 정보에서는 BGP를 통해서 전달 받은 네트워크 대역이 몇 개인지 확인할 수 있습니다.

Azure의 가상 네트워크(VNet)에 1개 대역을 설정했기 때문에 1개 대역을 광고 받고 있습니다. 

 

 

두 번째 터널에서도 동일하게 확인 할 수 있습니다. 

 

 

  Azure에서도 VPN 연결 상태를 보면 정상적으로 '연결됨'으로 표기 된 것을 볼 수 있습니다.

 

또한, BGP 피어 상태를 보면, AWS와 Azure 간의 BGP 연결 상태도 확인이 가능합니다.

 

 

 

 

이제 Azure와 AWS에 각각 가상 머신을 1개 만들어서 서로 통신이 되는지 확인합니다.

AWS는 10.1.0.75라는 IP를 갖고 있고, Azure는 10.2.0.4라는 IP를 갖고 있습니다.   

현재 모든 설정이 완료되고, BGP 연동까지 되었으나 통신이 되지 않는 것을 볼 수 있습니다.

 

Azure의 경우에는 광고 받은 대역을 System Route를 통해서 내부로 전파하는 것이 기본이지만,

AWS에서는 가상 프라이빗 게이트웨이(VGW)를 통해서 받은 네트워크 대역을 전파하는 옵션을 '활성화' 해주어야 합니다.

AWS의 가상 머신이 있는 라우팅 테이블에서 가상 프라이빗 게이트웨이를 통해서 라우팅을 전파 받을 수 있도록 '활성화'합니다. 

 

이제 AWS와 Azure의 가상 머신 간에 서로 통신이 되는 것을 확인 할 수 있습니다.