ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오클라우드 - 클라우드 개발자 교육 10주차 후기
    bootcamp 2026. 1. 20. 12:50

    NAT Gateway란?

     

    - NAT Gateway (Network Address Translation Gateway)

      프라이빗 네트워크(Private Subnet)에 있는 서버들이 인터넷에 접속할 수 있도록 도와주면서, 반대로 외부에서 내부로 들어오는 직접적    인 접근은 차단하는 역할을 하는 네트워크 서비스.

      나가는 건 되지만, 들어오는 건 안 되는 문

    필요한 이유? 어디에 쓰는가?

    보통 데이터베이스(DB)나 백엔드 서버는 보안을 위해 외부에서 직접 접속할 수 없는 프라이빗 서브넷(Private Subnet)에 배치함. (8주차 후기 아키텍쳐 이미지 참고..)

    이 서버들도 소프트웨어 업데이트를 하거나 외부 API를 호출하기 위해 인터넷 접속이 필요할 때가 있다.

    ex) sudo apt update

    이때 공인 IP(Public IP)를 직접 할당하면 보안상 위험해지기 때문에, 대신 NAT Gateway를 사용하여 안전하게 통신함.

    • Outbound (내부 → 외부): 허용 (예: apt update, 외부 API 호출)
    • Inbound (외부 → 내부): 차단 (예: 해커의 직접 접속 시도 불가)

    작동 원리

    NAT Gateway는 퍼블릭 서브넷(Public Subnet)에 위치하여, 프라이빗 인스턴스를 대신해 인터넷과 통신한다.

      1. 요청: 프라이빗 서버가 인터넷으로 요청을 보냅니다.

      2. 변환: 이 요청은 NAT Gateway로 전달되고, NAT Gateway는 자신의 공인 IP(Elastic IP)로 주소를 바꿔서 인터넷으로 내보냅니다.

       3.응답: 인터넷에서 온 응답은 NAT Gateway가 받아서, 다시 원래 요청했던 프라이빗 서버에게 전달해 줍니다.

     

     ** IG와의 차이점이 뭔가요? 동일한거 같은데.

    가장 많이 혼동하는 인터넷 게이트웨이(IGW)와의 차이는 방향성이다.

    구분 NAT Gateway Internet Gateway (IGW)
    통신 방향 단방향 (Outbound 전용) 양방향 (Inbound / Outbound)
    주 사용처 프라이빗 서브넷 (DB, 백엔드 서버) 퍼블릭 서브넷 (웹 서버, 로드 밸런서)
    접근성 외부에서 내부로 접속 불가능 외부에서 내부로 접속 가능 (공인 IP 필요)
    IP 할당 게이트웨이가 공인 IP를 가짐 인스턴스가 공인 IP를 가짐

     

     

    패킷의 흐름에서 NATGateway와 IGW는?

    패킷의 흐름(Packet Flow) 관점에서 보면, IGW는 문(Door)이고, NAT Gateway는 대리인(Proxy)이다.

    특히 프라이빗 서브넷의 패킷이 인터넷으로 나갈 때, NAT Gateway 혼자서는 나갈 수 없고 반드시 IGW를 거쳐야 한다

     

    1. 퍼블릭 서브넷 (IGW만 사용할 때)

    • 상황: 퍼블릭 서브넷에 있는 웹 서버(A)가 인터넷의 구글(8.8.8.8)과 통신함.
    • 특징: 패킷이 직접 나간다. (1:1 변환)

    [패킷 흐름]

    1. 웹 서버(A) 출발: 출발: A의 사설 IP → 목적지: 8.8.8.8
    2. 라우팅: 라우팅 테이블이 0.0.0.0/0을 보고 IGW로 보냄.
    3. IGW 통과: IGW는 A의 사설 IP를 **A의 공인 IP(Public IP)**로 1:1 매핑하여 인터넷으로 보냄.
    4. 인터넷 도달: 구글 서버에 도착.

    2. 프라이빗 서브넷 (NAT Gateway를 사용할 때)

    • 상황: 프라이빗 서브넷에 있는 DB 서버(B)가 업데이트를 위해 구글(8.8.8.8)과 통신함.
    • 특징: NAT Gateway가 중간에서 패킷을 가로채서 자신의 ID(공인 IP)로 바꿔치기한 후 IGW로 보낸다.

    [패킷 흐름 상세 단계]

    1. DB 서버(B) 출발 (Private Subnet)
      • 패킷: 출발: B의 사설 IP → 목적지: 8.8.8.8
      • 라우팅 테이블 확인: 인터넷으로 가려면 NAT Gateway로 가라.
    2. NAT Gateway 도착 (Public Subnet)
      • NAT Gateway는 이 패킷을 받아서 주소 변환(Source NAT)을 수행합니다.
      • 패킷 수정: 출발: NAT Gateway의 공인 IP (EIP) → 목적지: 8.8.8.8
      • 핵심: 출발지 IP가 DB 서버의 IP에서 NAT Gateway의 IP로 바뀝니다.
    3. IGW로 전달
      • NAT Gateway도 결국은 인터넷으로 나가야 하므로, 퍼블릭 서브넷의 라우팅 테이블을 봅니다.
      • 라우팅 테이블 확인: "인터넷으로 가려면 IGW로 가라."
      • 패킷이 IGW로 전달됩니다.
    4. 인터넷 도달 및 복귀
      • 구글 서버는 요청을 받고 응답을 보냅니다. 이때 목적지는 NAT Gateway의 공인 IP가 됩니다.
      • NAT Gateway가 응답을 받으면, 기록해둔 장부를 보고 이전에 요청한것이다 판단하고 다시 목적지: B의 사설 IP로 바꿔서 DB 서버(B)에게 전달한다.

    카카오 클라우드에서 NAT Instance 설정하기.

    1. 프라이빗 서브넷과 퍼블릭 서브넷을 생성한 후, 라우팅 테이블을 설정

    [퍼블릭 서브넷] 라우팅 테이블

    목적지 대상 유형 대상 이름
    VPC CIDR IP Local Local
    0.0.0.0/0 인터넷 게이트웨이 인터넷 게이트웨이 ID


    [프라이빗 서브넷] 라우팅 테이블

    목적지 대상 유형 대상 이름
    VPC CIDR IP Local Local

     

      2. Nginx (NAT 인스턴스 대체) 서버에 아래 명령어 실행

    1. sudo apt-get update -y
    
    2. LINE=$(grep 'net.ipv4.ip_forward=' /etc/sysctl.conf)
    
       sudo sed -i "s/${LINE}/net.ipv4.ip_forward=1/" /etc/sysctl.conf
    
       sudo sysctl -p
    
    
    
       INTERFACE=$(ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print         $2;getline}')
    
       sudo /sbin/iptables -t nat -A POSTROUTING -o ${INTERFACE} -j MASQUERADE
    
       sudo apt-get install -y iptables-persistent

     

    모두 YES를 Enter로 넘깁니다.  

     

     3. 인스턴스의 패킷 송신 허용 IP 수정

    • Nginx인스턴스 접속 -> 우측상단 인스턴스 작업 버튼 -> 패킷 송신 허용 IP 설정 -> 0.0.0.0/0 -> 저장

     

      4. NAT 인스턴스 보안 그룹 설정

    인바운드 규칙

    프로토콜 패킷 출발지 포트 번호 설명
    TCP    10.0.0.0/20(프라이빗 서브넷 CIDR) 80     프라이빗 서브넷 인스턴스의 HTTP 트래픽 인바운드 허용
    TCP 10.0.0.0/20(프라이빗 서브넷 CIDR) 443 프라이빗 서브넷 인스턴스의 HTTPS 트래픽 인바운드 허용
    TCP 관리자 네트워크의 퍼블릭 IP 주소 범위 22 관리자 네트워크에서 NAT 인스턴스의 SSH 접속 인바운드 허용

    아웃바운드 규칙

    프로토콜 패킷 목적지 포트 번호 설명
    TCP 0.0.0.0/0 80 HTTP 트래픽 아웃바운드 허용
    TCP 0.0.0.0/0 443 HTTPS 트래픽 아웃바운드 허용


     5. 프라이빗 라우팅 테이블 업데이트

     

    목적지 대상 유형 대상 이름
    VPC CIDR IP Local      Local
    0.0.0.0/0 인스턴스 선택 Nginx 인스턴스 IP(인스턴스 ID) 선택

     

     

     

    참조 :

    https://docs.kakaocloud.com/tutorial/networking-content-delivery/private-subnet

     

    다중 가용 영역에서 NAT 인스턴스를 이용한 네트워크 구축 | 카카오클라우드

    다중 가용 영역(Multi Availability Zone)의 각 가용 영역에 카카오클라우드 VM의 NAT 인스턴스를 구축하는 방법을 소개합니다.

    docs.kakaocloud.com

     

    https://docs.kakaocloud.com/service/bns/vpc/how-to-guides/vpc-appx-1

     

    부록. NAT 인스턴스 사용 | 카카오클라우드

    NAT 인스턴스 생성과 설명 방식을 설명합니다.

    docs.kakaocloud.com

     

     

     

    —————————————————————————— 
    본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 3기(B-log) 리뷰로 작성 되었습니다.

Designed by Tistory.