본문 바로가기
Amazon Web Service Network 쉽게 이해하기

Virtual Private Cloud(VPC) 쉽게 이해하기 #3

by 네트워크 엔지니어 환영 2020. 4. 28.
반응형

이번 문서에서는 NAT Gateway에 대해 알아보도록 하겠습니다. 그전에 NAT가 무엇인지 알아야겠죠? ㅎㅎ

 

NAT(Network Address Translation)

네트워크 주소 변환(영어: network address translation, 줄여서 NAT)은 컴퓨터 네트워킹에서 쓰이는 용어로서, IP패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. NAT를 이용하는 이유는 대개 사설 네트워크(Private Network)에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다. NAT가 호스트 간의 통신에 있어서 복잡성을 증가시킬 수 있으므로 네트워크 성능에 영향을 줄 수 있는 것은 당연하다.

- 출처 : 위키백과 - 

위키백과의 설명대로 NAT는 Network Address Translation의 약자입니다. 한 마디로 Network Address인 IP를 변환(Translation)하겠다는 뜻이지요. 그렇다면 NAT를 왜 하는 것일까요? NAT를 하는 이유는 다양합니다만 위키백과에서는 이렇게 설명하고 있군요.

NAT를 이용하는 이유는 대개 사설 네트워크(Private Network)에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함이다. 

이게 무슨 뜻인지 한 번 살펴보도록 하겠습니다. IP 주소에는 Public IP(공인 IP)와 Private IP(사설 IP)가 있습니다. IP를 굳이 두 종류로 나눈 이유를 간단히 말씀드리면 IPv4 주소의 낭비를 막고 공인 인터넷을 굳이 사용하지 않아도 되는 단말들에게 어느 망이든 중복 사용 가능한 IP를 주기 위함이지요.(공인망에서는 공인 IP만이 유통됩니다.) 그런데 사설 IP를 할당받은 단말이 인터넷을 사용해야 한다면 단말의 IP는 어떻게 변화하는 것일까요?

 

사례를 들어보겠습니다. 저는 지금 카페에서 글을 쓰고 있는데요. 무선 공유기를 통해 IP를 할당받았습니다. 그리고 그 정보는 다음과 같습니다.

<글쓴이의 컴퓨터가 할당받은 사설 IP>

IP를 확인해보니 172.30.1.36이군요. 172.30.1.36은 Private Network에 속하는 Private IP(사설 IP)입니다. 

* Private Network에서 사용 가능한 Private IP(사설 IP)
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

이 공유기에 연결된 모든 단말들은 Private IP(사설 IP)를 보유하게 됩니다. 그렇다면 인터넷을 사용할 때는 어떻게 되는 것일까요? 사설 IP를 Source Address로 유지한 채 인터넷으로 나아가는 것일까요? 아닙니다. 공인인터넷망과 제 컴퓨터 사이에는 제 컴퓨터에게 IP를 할당해주는 공유기가 있습니다. 그리고 공유기는 공인 IP를 보유하며 인터넷과 맞닿아있지요. Private IP(172.30.1.36)뿐인 제 컴퓨터가 외부 서비스(8.8.8.8)을 사용하고자 공유기로 나아가면 공유기는 Private IP(172.30.1.36)뿐인 제 컴퓨터의 IP를, 즉 Network Address를 공유기 자신의 공인 IP로 변환(Translation)합니다. 즉 공유기를 지나 외부 인터넷으로 나아갈 때에는 공유기의 공인 IP를 가지고 원하는 Destination Address로 향하는 것이지요. 이것이 NAT입니다.(다양한 용도가 있습니다. 지금은 극히 일부를 설명한 것입니다.)

 

NAT Gateway

<Public Subnet과 Private Subnet>

이전 문서에서 사용하던 그림을 다시 가져왔습니다. ㅎㅎ Private Subnet이 2개가 보이는군요. 제가 외부 인터넷을 차단하고 내부에서만 사용하기 위해 만든 Subnet이지요. Database Service인 RDS를 넣어두려고 합니다. 그리고 RDS는 외부에서의 접속을 철저히 차단하고 싶습니다. 그런데 RDS가 외부 인터넷을 통해 업데이트를 해야 할 일이 생긴다면 어떻게 해야할까요? 공인 IP를 생성해서 Internet Gateway를 연결해줘야할까요? 그러면 외부에서도 침입이 가능해질텐데 보안이 걱정됩니다. 

이러한 경우에 사용하는 것이 NAT Gateway입니다. Internet 접속이 가능한 Public Subnet에 NAT Gateway를 생성해두고 Private Subnet이 외부 인터넷으로 나아갈 경우에만 사용하도록 라우팅을 추가해주는 것이지요. 위 NAT에서 설명한 것처럼 Private Subnet의 서비스들은 외부 인터넷으로 나갈 때 공인 IP로 NAT되어 인터넷망을 헤엄치게 됩니다. 그러나 NAT Gateway는 내부에서 외부로의 접속만 가능하며 외부에서 NAT Gateway를 이용하여 접속하는 것은 불가능합니다.

<NAT Gateway 생성>

Internet Gateway가 있는 Public Subnet(10.0.1.0/24)에 NAT Gateway를 생성했습니다. NAT Gateway는 반드시 Internet Gateway가 있는 Public Subnet(10.0.1.0/24, 10.0.2.0/24)에 생성해야 합니다. 그리고 Elastic IP(탄력적 IP 주소)를 하나 만들어 NAT Gateway에 할당하였습니다. 그러면 Private Subnet(10.0.3.0/25, 10.0.4.0/25)에 있는 인스턴스들은 외부 인터넷으로 나아갈 때 Elastic IP(공인 IP)로 Source IP NAT되어 나가게 됩니다. 

EC2(10.0.3.x/24, Private Subnet) - > NAT Gateway - > Internet Gateway - > 외부 인터넷

<Subnet에 Routing 추가>

 

그리고나서 Private Subnet(10.0.3.0/25, 10.0.4.0/25)이 사용하는 Routing Table에 '0.0.0.0/0'에 대하여 NAT Gateway(nat-0b5aefbf38b83cec6)으로 라우팅되도록 설정해줍니다. 즉 공인 인터넷(0.0.0.0)에 대해서는 NAT Gateway가 있는 Public Subnet으로 이동하여 Elastic IP(공인 IP)로 주소를 변환한 후 Internet Gateway를 통해 공인 인터넷으로 나아가라는 것입니다.

 

설정방법을 정리하면 다음과 같습니다.

1. Internet Gateway가 있는 Public Subnet에 NAT Gateway 생성, Elastic IP(공인 IP) 할당
2. Private Subnet의 Routing table에 0.0.0.0/0에 대하여 nat-id 추가

<Private Subnet에 추가된 nat-gateway-id>

이를 이미지로 표현하면 위와 같습니다. 이제 Private Subnet에 있는 서비스들은 인터넷 통신이 가능합니다. 

 

다음 문서에서는 Endpoint Service에 대해서 알아보도록 하겠습니다.

반응형

댓글14

  • Favicon of https://authentication.tistory.com BlogIcon sheriff 2021.06.29 18:43 신고

    감사합니다.
    답글

  • Favicon of https://web-km.tistory.com BlogIcon _min's 2021.08.17 13:34 신고

    감사합니다 !
    답글

  • Favicon of https://kingofbackend.tistory.com BlogIcon KoB 2021.09.01 21:08 신고

    좋은 글 잘읽었습니다 :)

    이해가 안가는 부분이 있어서 질문드립니다. RDS를 업데이터 할때 내부에서 외부로만 접근 가능케 하려고 NAT GATEWAY 쓰신다고 했는데 업데이트 소스를 결국 다운로드하는게 외부에서 내부로 들어오는거 아닌가요??
    답글

    • RDS가 Private Subnet에 존재하기 때문에 IGW가 없어 외부로 통할 방법은 NAT Gateway를 뚫어 내부에서 외부 접근시도만 가능하게 하는 것뿐입니다. 외부에서 내부로 들어오는 'Response'는 이미 RDS가 보낸 요청에 대한 응답이기에 자동 허용됩니다.

    • Favicon of https://kingofbackend.tistory.com BlogIcon KoB 2021.09.01 21:58 신고

      아 요청에 대한 응답은 자동으로 허용이 되는군요... 매번 새로운걸 배우네요 ㅜㅜ 감사합니다!!

  • Favicon of https://kingofbackend.tistory.com BlogIcon KoB 2021.09.01 22:11 신고

    기초적인것 같아서 좀 부끄럽지만 하나 더 질문드리고 싶습니다.

    EC2 -> NAT GW -> IGW -> 인터넷 이렇게 통신한다고 하셨는데 AWS에서 NAT GW 생성할때 퍼블릿 서브넷을 지정해주는 이유는 뭔가요?
    답글

  • lee 2021.11.09 15:53

    궁금한 사항이 있습니다
    당연한 이야기일수도 있겠지만 vpc를 만들때 프라이빗 서브넷만 만든다면 igw는 생성되지 않는거겟죠 ?
    답글

  • 박정규 2022.06.22 17:39

    안녕하세요 올려주신 VPC관련 글을 전부 읽어보았습니다 지식을 공유해주셔서 감사합니다.
    부끄러움을 무릎쓰고 질문 드리고싶습니다 ㅠㅜ
    개발자가 RDS에 쌓인 데이터를 확인하기 위해 로컬에서 RDS를 접속해야하는 경우가 있다면
    RDS를 Public subnet에 두고 디비 인스턴스의 보안 그룹을 서비스가 돌아가는 서버와 개발자 IP에만 설정해두는게 최선인지 궁금합니다.
    답글

    • "RDS를 Public subnet에 두고 디비 인스턴스의 보안 그룹을 서비스가 돌아가는 서버와 개발자 IP에만 설정해두는게 최선인지 궁금합니다." 이 부분이 조금 이해가 안되는데 RDS는 Private Subnet에 두어야 하구용! RDS의 보안그룹을 Public subnet만 허용해야죠!

      개발자가 접속하는건 콘솔에서!

    • BlogIcon 박정규 2022.06.24 13:39

      퍼블릭 서브넷에 둔 웹서버 콘솔을 말씀하시는걸까요?
      개발자가 데이터그립이나 SqlYog같은 GUI툴을 사용해서 운영중인 RDS에 직접 접촉해야하는 경우가 잦아서요.

    • 아니옹 AWS 콘솔이요 :)