본문 바로가기

Cloud/AWS

AWS Private NAT Gateway - Part 1

Today Keys :  private, nat, gateway, natgw, 사설, transit gateway, tgw, 연동, connectivity


 

이번 포스팅은 AWS에서 제공하는 Managed NAT 서비스인 NAT Gateway에 대한 포스팅입니다. NAT Gateway는 Private 서브넷에서 인터넷과 통신하기 위한 용도로 보통 사용되었으나, 필요 시 사설 대역 연동을 위해서도 구성할 수 있었습니다.

(기존 포스팅 : https://zigispace.net/1102)

다만, 이 경우에도 NAT Gateway 구성 시에 무조건 EIP를 연결해야 했었습니다. 이번에 Private 환경의 Managed NAT 지원을 위해서 별도의 EIP 연결이 없이 NAT Gateway를 사용 할 수 있도록 NAT Gateway에서 Connectivity Type을 선택할 수 있도록 제공되었습니다. 오늘 포스팅에서는 Private Connectivity Type으로 NAT Gateway를 만들어서 VPC 간의 연결을 Private NAT Gateway를 통해서 하는 예시입니다.


 

Private NAT Gateway를 이용해서 오늘 구성하게 될  전체 아키텍처입니다.

 

아키텍처를 구성하기 전에 전에,

먼저 구성하고자 하는 아키텍처에 대해서 알아 보겠습니다.

 

ZIGI-VPC1과 ZIGI-VPC2 라는 2개의 사용자 VPC가 있습니다.

2개의 사용자 VPC는 Transit Gateway를 각각 연결(Attached)되어 있습니다.

 

각 사용자 VPC에는 Sub1과 Sub2라는 2개의 서브넷 대역이 존재합니다.

 

Sub1은 Transit Gateway를 통해서 VPC 간에 연동이 되지 않는 대역입니다.

            연동을 하지 않는 대역이기 때문에 VPC1과 VPC2에서 동일한 IP 대역 사용이 가능합니다.

            물론 IP 설계를 하는 데 있어서, IP 대역에 대한 부족이 없다면 Unique한 대역을 사용하셔도 무방합니다.

 

Sub2는 Transit Gateway를 통해서 VPC 간에 연동을 하는 대역입니다.

            Transit Gateway에서 라우팅 처리를 통해서 연동을 해야하기 때문에 각 VPC 간의 Unique한 대역을 사용합니다.

 

ZIGI-VPC1에는 Sub1 서브넷에는 Private NAT Gateway를 사용 할 가상 서버 1대가 위치합니다.

Sub2 서브넷에는 오늘 구성의 핵심인 Private NAT Gateway가 위치합니다.

 

기존의 사설망에서 공인망으로 NAT하기 위해서 인터넷과 연동이 가능한 공인 서브넷에 NAT Gateway가 위치한 것처럼

Private NAT Gateway는 다른 VPC와 연동이 가능한 서브넷에 위치하게 됩니다.

 

테스트를 위해서 ZIGI-VPC2에는 ZIGI-VPC1의 가상 서버가 통신할 수 있는 가상 서버 1대가 위치합니다.

 

 

 

그럼 이제부터  오늘 구성할 아키텍처의 서비스를 만들어 보겠습니다.

오늘은 Private NAT Gateway에 대한 내용을 다루기 때문에,

VPC(ZIGI-VPC1, ZIGI-VPC2)와 각 VPC에 속한 서브넷(ZIGI-VPC1-Sub1, Sub2, ZIGI-VPC2-Sub1, Sub2)

그리고 테스트에 사용 할 가상 머신(ZIGI-VPC1-SVR, ZIGI-VPC2-SVR)은 구성되어 있다고 가정 하겠습니다.    

먼저 Private NAT Gateway를 생성합니다.

기존의 NAT Gateway를 생성하는 것과 동일하게 '이름'과 '서브넷'을 지정합니다.

(여기에서 선택하는 서브넷은 Transit Gateway를 통해서 연동이 가능한 대역으로 설계한 'Sub2' 입니다.)

 

추가로 'Connectivity type'을 'Public'과 'Private'으로 선택 할 수 있습니다.

Private NAT Gateway를 만든느 것이기 때문에 Private을 선택합니다.

Private type을 선택하게 되면,  아래와 같은 알림 메시지가 표기됩니다.

Private NAT Gateway traffic cant't reach the internet

Private NAT Gateway의 경우 Internet과 통신하기 위한 EIP를 갖고 있지 않기 때문에 인터넷과 통신할 수 없다는 메시지입니다.

원하는 Tag가 있다면 추가로 입력을 하고, 'NAT 게이트웨이 생성'을 클릭합니다.

 

 

 

참고로 'Public' Type을 선택하면 기존처럼 탄력적 IP(EIP) 정보를 입력합니다.       

 

 

  

정상적으로 NAT Gateway가 생성된 것을 볼 수 있습니다.

EIP는 연결하지 않기 때문에 '-'로 표기가 되고, Connectivity type은 'Private'인 것을 볼 수 있습니다.       

NAT Gateway IP 주소는 ZIGI-VPC1-Sub2 서브넷 대역에 포함되는 10.1.0.120 입니다.

 

 

 

 다음은 ZIGI-VPC1과 ZIGI-VPC2 를 연결 할 Transit Gateway 입니다.

Transit Gateway는 'ZIGI-TGW'라는 이름으로 아래와 같이 구성해 두었습니다.

이제 ZIGI-TGW에 각 VPC를 연결(Attach)합니다.        

 

 

먼저 ZIGI-VPC1을 ZIGI-TGW에 다음과 같이 연결합니다.

여기에서 VPC Attachment로 연결 할 Subnet은 Transit Gateway를 통해 연결 할 수 있는 Sub2를 선택합니다.       

 

 

다음으로 ZIGI-VPC2를 ZIGI-TGW에  연결합니다.

마찬가지로 VPC Attachment로 연결 할 Subnet은 Transit Gateway를 통해 연결 할 수 있는 Sub2를 선택합니다.       

 

 

 

현재 ZIGI-TGW에 연결된 VPC1-Attachment와 VPC2-Attachment에 적용된 라우팅 테이블인 ZIGI-TGW-RT를 보겠습니다.

라우팅 설정을 위해서 각 Attachment를 Propagations해서 설정해도 되지만,

여기에서는 Transit Gateway로 연결 할 Sub2의 대역에 대해서만 각각의 VPC로 라우팅 되도록 설정합니다.   

 

Transit Gateway를 이용해서, ZIGI-VPC1-과 ZIGI-VPC2를 연결하고,

각각의 VPC로 가기 위한 라우팅을 Transit Gateway에서 설정했으니,

이제 ZIGI-VPC1과 ZIGI-VPC2에서 라우팅 설정을 합니다.

VPC 내의 각 서브넷은 개별 라우팅 테이블에 연결되도록 설정합니다.

Sub2가 Transit Gateway를 통해서 연동이 가능한 대역을 가진 서브넷이므로,

Sub2에 대한 라우팅 테이블을 설정합니다.

먼저  ZIGI-VPC1-Sub2의 라우팅 테이블에서 ZIGI-VPC2-Sub2와 통신하기 위해 ZIGI-VPC2-Sub2 대역(10.2.0.0/24)에 대해서 Transit Gateway로 향하도록 설정합니다.

 

 

 

설정 후, 라우팅 테이블을 확인하면 10.2.0.0/24에 대한 라우팅이 아래와 같이 추가된 것을 볼 수 있습니다. 

 

 

 

다음은  ZIGI-VPC2-Sub2의 라우팅 테이블에서 ZIGI-VPC1-Sub2와 통신하기 위해 ZIGI-VPC1-Sub2 대역(10.1.0.0/24)에 대해서 Transit Gateway로 향하도록 설정합니다.

 

 

 

설정 후, 라우팅 테이블을 확인하면 10.1.0.0/24에 대한 라우팅이 아래와 같이 추가된 것을 볼 수 있습니다. 

(※ 참고 :  라우팅 테이블 제일 하단의 0.0.0.0/0에 대한 라우팅은 테스트를 위해서 외부에서 가상 머신에 접속하기 위해서 사용한 라우팅 테이블입니다.)

 

 

 

 

이제, Private NAT Gateway를 통해서 통신하게 될 ZIGI-VPC1-Sub1의 라우팅 테이블을 설정합니다.

ZIGI-VPC2-Sub2 서브넷 대역인 10.2.0.0/24에 대한 Target을 처음에 만든 Private NAT Gateway인 ZIGI-VPC1-NATGW로  설정합니다.

 

 

라우팅 테이블을 추가하고 나면, 아래와 같이 NAT Gateway를 통한 라우팅이 잡힌 것을 볼 수 있습니다. 

(※ 참고 :  라우팅 테이블 제일 하단의 0.0.0.0/0에 대한 라우팅은 테스트를 위해서 외부에서 가상 머신에 접속하기 위해서 사용한 라우팅 테이블입니다.)

 

 

여기까지 구성을 마치고 마치고 나면, 처음에 보여드렸던 아키텍처의 그림대로 모두 구성이 완료되었습니다.   

 

 

이제 ZIGI-VPC1-Sub1 내에 있는 ZIGI-VPC1-SVR이 ZIGI-VPC1-NATGW를 통해서 통신하는지 확인해보겠습니다.

ZIGI-VPC1-SVR의 10.0.0.0/22 대역 내에서 10.0.1.180 IP를 갖고 있습니다.

여기에서 ZIGI-VPC2-SVR로 ping을 보내면 Transit Gateway 연동되지 않은 대역이지만, 정상적으로 통신되는 것을 볼 수 있습니다.

 

 

ZIGI-VPC2-SVR에서 통신 된 내역을 tcpdump로 살펴보면,

10.1.0.120 이라는 출발지에서 ping을 위한 ICMP request가 들어와서 정상적으로 reply한 것을 볼 수 있습니다.

 

 

IP 주소 10.1.0.120 은 처음에 만든 NAT Gateway의 IP 인것을 아래와 같이 확인 할 수 있습니다.

즉, ZIGI-VPC1-SVR은 ZIGI-VPC1-NATGW를 통해서 ZIGI-VPC2-SVR과 통신하게 된 것입니다.

 

물론 여기에서 다뤄진 예시는 Private Gateway를 이용해서 Managed NAT 서비스를 Private 환경에서도 쓸 수 있다는 것을 보여드리기 위한 예시이며, 실제 상용 환경에서의 구성은 이중화 구성을 포함해서 서비스 환경에 맞춰서 구성 변경 추가로 필요할 수 있습니다.   

 

 

 

 

  • hhj 2021.06.14 10:57

    안녕하세요! 글 잘 읽었습니다.
    Private NAT에 대한 공식 블로그도 읽어보았는데, 궁금한 것이 있어서 질문드립니다.

    다른 VPC와 연결은 보통 피어링이나 TGW로 하면 되는데, NAT로 하는 이유는 동일한 IP 대역이 각 VPC에 존재하기 때문인거죠?
    이 경우 말고 또 Private NAT를 사용해야 하는 경우가 있을까요?