구성 문제 해결

이 가이드는 Cloud NAT의 일반적인 문제 해결을 위한 도움을 제공합니다.

일반적인 문제

VM에서 Cloud NAT를 사용하지 않고 예기치 않게 인터넷에 연결할 수 있음

가상 머신(VM) 인스턴스나 컨테이너 인스턴스에서 Cloud NAT를 사용하지 않고 인터넷에 연결할 수 있지만 이를 원하지 않으면 다음 문제를 확인합니다.

  • VM 네트워크 인터페이스에 외부 IP 주소가 있는지 확인합니다. 네트워크 인터페이스에 할당된 외부 IP 주소가 있으면 Google Cloud에서 소스가 인터페이스의 기본 내부 IP 주소와 일치하는 패킷에 일대일 NAT를 자동으로 수행합니다. 자세한 내용은 Cloud NAT 사양을 참조하세요.

    VM에 외부 IP 주소가 있는지 확인하려면 외부 IP 주소 변경 또는 기존 인스턴스에 할당을 참조하세요.

  • Google Kubernetes Engine(GKE) 클러스터가 비공개 클러스터인지 확인합니다. 비공개가 아닌 클러스터의 각 노드 VM에는 외부 IP 주소가 있으므로 각 노드는 다음 홉이 Cloud NAT에 의존하지 않는 기본 인터넷 게이트웨이인 가상 프라이빗 클라우드(VPC) 네트워크의 경로를 사용할 수 있습니다. 비공개가 아닌 클러스터가 Cloud NAT 게이트웨이와 상호작용하는 방법을 포함한 자세한 내용은 Compute Engine 상호작용을 참조하세요.

  • 가상 프라이빗 클라우드 네트워크의 경로를 나열하여 기본 인터넷 게이트웨이와 다른 다음 홉을 통해 인터넷 연결을 제공할 수 있는 경로를 찾습니다. 예를 들면 다음과 같습니다.

    • 다음 홉이 VM, 내부 패스 스루 네트워크 부하 분산기 또는 Cloud VPN 터널인 정적 경로는 인터넷 연결을 간접적으로 제공할 수 있습니다. 예를 들어 내부 패스 스루 네트워크 부하 분산기의 다음 홉 VM 또는 백엔드 VM에 외부 IP 주소 자체가 있거나 Cloud VPN 터널이 인터넷 액세스를 제공하는 네트워크에 연결될 수도 있습니다.

    • VPC 네트워크의 Cloud Router에 의해 온프레미스 네트워크에서 학습된 동적 경로가 인터넷 액세스를 제공하는 네트워크에 연결할 수 있습니다.

  • VPC 네트워크의 다른 커스텀 경로는 다음 홉이 기본 인터넷 게이트웨이인 경로보다 우선순위가 높을 수 있습니다.Google Cloud 에서 경로를 평가하는 방법은 라우팅 적용성 및 순서를 참조하세요.

생성된 로그 없음

  • NAT 로깅이 사용 설정되었는지 확인합니다.
  • 보려는 로그가 필터링되지 않은 로그 뷰가 표시되었는지 다시 한번 확인합니다. 안내는 로그 보기를 참조하세요.

  • 방화벽 규칙이 트래픽을 차단하지 않는지 확인합니다. 이그레스(아웃바운드) 트래픽을 차단하는 방화벽 규칙은 트래픽이 NAT 게이트웨이에 전송되기 전에 적용됩니다. 방화벽 규칙 로깅을 사용하여 커스텀 이그레스 규칙에서 아웃바운드 트래픽을 차단하고 있는지 확인할 수 있습니다.

  • Cloud NAT 유형을 검토합니다. 트래픽 대상이 NAT에서 처리되지 않을 수 있습니다.

특정 로그가 제외됨

  • NAT 로깅이 사용 설정되어 있는지 확인하고 로그 필터에서 보관할 로그를 제외하지 않는지 확인합니다. 어떤 항목도 제외되지 않도록 로그 필터를 삭제할 수 있습니다.

  • Cloud NAT는 모든 단일 이벤트를 로깅하지 않습니다. 이그레스 트래픽이 많은 기간 동안 NAT 로깅은 VM 머신 유형에 비례해서 제한됩니다. 변환 또는 오류 로그가 삭제될 수 있으며 제한 중에 생략된 항목을 확인할 수 없습니다.

리소스 없음 이유로 패킷이 삭제됨

Cloud NAT를 사용하는 VM에서 패킷이 손실되는 경우 이는 패킷 손실(포트 소모) 시점에 사용할 VM에 사용할 수 있는 NAT 소스 IP 주소와 소스 포트 튜플이 부족하기 때문일 수 있습니다. 5-튜플(NAT 소스 IP 주소, 소스 포트, 대상 3-튜플)은 TCP TIME_WAIT 제한 시간 내에 재사용될 수 없습니다.

사용 가능한 NAT 튜플이 부족하면 dropped_sent_packets_count 이유OUT_OF_RESOURCES입니다. 측정항목에 대한 자세한 내용은 VM 인스턴스 측정항목 사용을 참조하세요.

포트 사용량을 줄이는 방법은 포트 사용량 줄이기를 참조하세요.

동적 포트 할당을 사용하는 경우 동적 포트 할당이 사용될 때 패킷 손실을 줄이는 방법은 다음 섹션을 참조하세요.

동적 포트 할당이 구성될 때 패킷이 손실됨

VM이 포트를 거의 소진하면 동적 포트 할당에서 이를 감지하여 VM에 할당되는 포트 수를 두 배로 늘립니다. 이렇게 하면 포트 낭비를 막는 데 도움이 될 수 있지만 할당된 포트 수가 늘어날 때 패킷이 손실될 수 있습니다.

손실되는 패킷 수를 줄이려면 다음을 고려하세요.

  • 연결을 더 느리게 확대할 수 있으면 Cloud NAT에서 추가 포트 할당 시간을 더 늘릴 수 있습니다.

  • VM이 TCP 연결을 수행할 경우 tcp_syn_retries에 더 큰 값을 사용하여 VM을 구성할 수 있습니다. 이렇게 하면 시스템이 연결을 설정하는 데 더 많은 시간을 할애하고 연결이 성공할 가능성이 높아집니다.

    예를 들어 Linux VM의 경우 현재 설정을 볼 수 있습니다.

      sysctl net.ipv4.tcp_syn_retries
      

    필요한 경우 설정을 늘릴 수 있습니다.

      sudo sysctl -w net.ipv4.tcp_syn_retries=NUM
      

  • 워크로드가 갑자기 증가하고 더 많은 포트를 빠르게 할당해야 할 경우 VM당 최소 포트 수를 조정해야 할 수 있습니다. 포트 사용량을 보고 적합한 VM당 최소 포트 수를 결정합니다.

엔드포인트 독립 충돌로 인해 패킷이 삭제됨

Public NAT를 사용하는 VM에서 패킷이 손실되고 엔드포인트 독립 매핑이 사용 설정된 경우 엔드포인트 독립 충돌에 의해 패킷이 손실될 수 있습니다. 이러한 경우 dropped_sent_packets_count 이유ENDPOINT_INDEPENDENCE_CONFLICT입니다. 측정항목에 대한 자세한 내용은 VM 인스턴스 측정항목 사용을 참조하세요.

다음 기법을 사용하여 엔드포인트 독립 충돌 가능성을 줄일 수 있습니다.

  • 엔드포인트 독립 매핑을 사용 중지합니다. 이렇게 하면 지정된 소스 IP 주소와 포트의 새 연결에서 이전에 사용된 주소 및 포트와 다른 NAT 소스 IP 주소와 포트를 사용할 수 있습니다. 엔드포인트 독립 매핑을 사용 중지하거나 사용 설정할 때 설정된 연결이 중단되지 않습니다.

  • 포트 예약 절차에서 각 클라이언트 VM에 더 많은 NAT 소스 IP 주소와 소스 포트 튜플을 할당할 수 있도록 VM 인스턴스당 최소 기본 NAT 포트 수를 늘립니다. 이렇게 하면 클라이언트 IP 주소와 임시 소스 포트 튜플 2개 이상에 같은 NAT 소스 IP 주소와 소스 포트 튜플이 할당될 가능성이 줄어듭니다.

  • 사용 중인 임시 소스 포트 수를 확인합니다.

    • Linux VM의 경우:

      netstat -an | egrep 'ESTABLISHED|TIME_WAIT|CLOSE_WAIT' | wc -l
      
    • Windows VM의 경우:

      netstat -tan | findstr "ESTABLISHED TIME_WAIT CLOSE_WAIT" | find /c /v ""
      
  • 더 큰 임시 소스 포트 집합을 사용하도록 VM 인스턴스를 구성합니다.

    • Linux VM의 경우:

      • 다음 명령어로 구성된 포트 범위를 볼 수 있습니다.

        cat /proc/sys/net/ipv4/ip_local_port_range
        
      • 다음 명령어를 사용하여 ip_local_port_range를 최대 임시 소스 포트 수(64,512)로 설정할 수 있습니다.

        echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
        
    • Windows VM의 경우:

      • 다음 명령어로 구성된 포트 범위를 볼 수 있습니다.

        netsh int ipv4 show dynamicport tcp
        netsh int ipv4 show dynamicport udp
        
      • 다음 명령어를 사용하여 임시 소스 TCP 및 UDP 포트 수를 최댓값(64,512)으로 설정할 수 있습니다.

        netsh int ipv4 set dynamicport tcp start=1024 num=64512
        netsh int ipv4 set dynamicport udp start=1024 num=64512
        
      • Google Kubernetes Engine 노드에서 권한이 있는 DaemonSet을 사용하여 이 구성을 자동화할 수 있습니다.

  • GKE 클러스터의 경우 관심 대상으로 전송된 패킷의 각 노드에서 수행되는 소스 NAT를 중지합니다. 두 가지 방법 중 하나로 이를 수행할 수 있습니다.

중단된 수신 패킷

Cloud NAT 게이트웨이는 활성 연결 세부정보와 IP 주소 및 포트 매핑(VM IP 주소와 포트가 NAT IP 주소와 포트로 변환되는 방식)을 저장하기 위해 연결 추적 테이블을 유지보수합니다. 연결 추적 테이블에 연결 항목이 포함되어 있지 않으면 Cloud NAT 게이트웨이에서 인그레스 데이터 패킷을 삭제합니다.

테이블에 연결 항목이 없는 이유는 다음 중 하나 때문일 수 있습니다.

  • 비활성 상태로 인해 TCP 설정 연결 유휴 상태 제한 시간이 만료되어 설정된 TCP 연결이 타임아웃되었습니다.
  • 외부 엔드포인트에서 TCP 임시 연결 유휴 상태 제한 시간이 만료되기 전에 새 연결을 설정하지 못했습니다. 예를 들어 Google Cloud 리소스가 TCP SYN으로 연결을 시작하지만 외부 엔드포인트에서 SYN ACK로 응답할 수 없습니다.
  • 프로버와 같은 외부 엔드포인트에서 NAT IP 주소와 포트에 연결을 시도합니다. Cloud NAT는 요청하지 않은 인바운드 연결을 허용하지 않습니다. 이러한 유형의 연결 항목은 연결 테이블에 표시되지 않습니다. 따라서 수신된 패킷이 삭제됩니다.
  • NAT 연결이 아직 활성 상태인 동안에 게이트웨이에서 NAT IP를 삭제하면 NAT 매핑이 무효화되고 이러한 연결은 즉시 연결 추적 테이블에서 삭제되어 모든 반환 트래픽이 삭제됩니다.

인그레스 패킷 삭제를 해결하기 전에 삭제가 실제로 애플리케이션에 영향을 미치는지 확인합니다. 확인하려면 삭제된 인그레스 패킷이 급증할 때마다 애플리케이션에 오류가 있는지 확인합니다.

인그레스 패킷 삭제가 애플리케이션에 영향을 미치면 다음 기법을 사용하여 문제를 해결해 보세요.

  • 애플리케이션에서 연결 유지 메커니즘을 사용하여 장기 실행 연결이 더 오래 열려 있을 수 있도록 합니다.
  • Cloud NAT 게이트웨이를 통해( Google Cloud 리소스에서 시작된) 트래픽을 수신하는 외부 엔드포인트가 응답하고 연결을 설정하는 데 더 많은 시간을 확보할 수 있도록 TCP 임시 연결 유휴 상태 제한 시간 값을 늘립니다.
  • 기본값을 크게 줄인 경우 TCP 설정 연결 유휴 상태 제한 시간 값을 늘립니다.

더 많은 IP 주소 할당 필요

NAT IP 주소가 부족하여 VM에서 인터넷에 연결하지 못하는 경우가 있습니다. 이 문제는 여러 가지 요인에 의해 발생할 수 있습니다. 자세한 내용은 다음 표를 참조하세요.

근본 원인 증상 해결 방법
주소를 수동으로 할당했지만 현재 포트 사용량에 비해 할당된 주소가 부족합니다.
  • Google Cloud 콘솔에 모든 인스턴스의 인터넷 액세스를 허용하려면 최소한 'X'개 이상 IP 주소를 할당해야 합니다라는 오류 메시지가 표시됩니다.
  • nat_allocation_failed 측정항목 값은 true입니다.

다음 중 하나를 수행합니다.

NAT IP 주소에 대한 엄격한 한도를 초과했습니다.

IP 주소 수 부족으로 인한 오류를 모니터링하려면 nat_allocation_failed 측정항목에 대한 알림을 만듭니다. Google Cloud 에서 NAT 게이트웨이의 VM에 IP 주소를 충분하게 할당할 수 없으면 이 측정항목은 true로 설정됩니다. 알림 정책에 대한 자세한 내용은 알림 정책 정의를 참조하세요.

포트 사용량 줄이기

더 많은 NAT IP 주소를 할당할 수 없거나 원하지 않은 경우 각 VM에서 사용하는 포트 수를 최소화할 수 있습니다.

포트 사용량을 줄이려면 다음 단계를 완료합니다.

  1. 엔드포인트 독립 매핑을 사용 중지합니다.

  2. 동적 포트 할당을 사용 설정합니다. 동적 포트 할당을 사용하려면 VM당 최소 포트 수와 VM당 최대 포트 수를 설정합니다. Cloud NAT는 최소 및 최대 포트 수 사이에 여러 NAT 소스 IP 주소와 소스 포트 튜플을 자동으로 할당합니다. 최소 포트 수를 작은 수로 설정하면 활성 연결이 더 적은 VM에서의 NAT 소스 IP 주소와 소스 포트 튜플 낭비가 줄어듭니다. 포트 할당 중에 연결 제한 시간이 발생하면 동적 포트 할당으로 패킷 삭제 줄이기를 참조하세요.

  3. 니즈를 충족하면서 최소 포트 수를 최대한 낮게 결정합니다. 이를 수행하는 방식에는 여러 가지가 있으며 대부분의 경우 의사 결정 과정에서 입력으로 사용된 포트 수(compute.googleapis.com/nat/port_usage)를 검토하여 결정합니다. 포트 사용량을 찾는 방법은 포트 사용량 보기를 참조하세요. 다음은 최소 포트 수를 결정하는 방식의 두 가지 예시입니다.

    • 대표 기간 동안 대표 VM 수에 대한 compute.googleapis.com/nat/port_usage 평균값을 고려합니다.
    • 대표 기간 동안 대표 VM 수에 대한 compute.googleapis.com/nat/port_usage 최빈값을 고려합니다.
  4. 니즈를 충족하면서 최대 포트 수를 최대한 낮게 결정합니다. 이번에도 의사 결정 과정에서 입력된 compute.googleapis.com/nat/port_usage를 검토합니다. 대표 기간 동안 대표 VM 수에 대한 compute.googleapis.com/nat/port_usage 최댓값을 출발점으로 참고하여 최대 포트 수를 결정합니다. 최대 수를 너무 높게 설정하면 다른 VM에서 NAT 소스 IP 주소와 소스 포트 튜플을 수신하지 못하게 될 수 있습니다.

  5. 적절한 최소 및 최대 포트 수를 찾으려면 테스트를 반복해야 합니다. 최소 및 최대 포트 수를 변경하는 단계는 동적 포트 할당이 구성되었을 때 최소 또는 최대 포트 수 변경을 참조하세요.

  6. NAT 제한 시간, 의미, 기본값을 검토합니다. 같은 대상 3-튜플에 대한 일련의 TCP 연결을 신속하게 만들어야 하는 경우 Cloud NAT에서 NAT 소스 IP 주소와 소스 포트 튜플을 더욱 빠르게 재사용할 수 있도록 TCP 시간 대기를 줄이는 것이 좋습니다. 이렇게 하면 Cloud NAT는 전송 중인 각 VM에 NAT 소스 IP 주소와 소스 포트 튜플을 추가 할당해야 할 수 있는 고유한 5-튜플을 사용할 필요 없이 같은 5-튜플을 더 빠르게 사용할 수 있습니다. NAT 제한 시간을 변경하는 단계는 NAT 제한 시간 변경을 참조하세요.

자주 묻는 질문(FAQ)

Cloud NAT에 대한 리전 제한 사항

리전 두 개 이상에서 같은 Cloud NAT 게이트웨이를 사용할 수 있나요?

아니요. Cloud NAT 게이트웨이를 리전 두 개 이상, VPC 네트워크 또는 Cloud Router와 연결할 수 없습니다.

다른 리전이나 VPC 네트워크에 연결해야 하는 경우에는 연결에 사용할 Cloud NAT 게이트웨이를 추가로 만듭니다.

외부 NAT IP 주소가 Cloud NAT 게이트웨이에서 전역 또는 리전으로 사용되나요?

Cloud NAT 게이트웨이는 리전 외부 IP 주소를 NAT IP 주소로 사용합니다. 리전이지만 공개적으로 라우팅할 수 있습니다. NAT IP 주소를 할당하는 다른 방법에 대한 자세한 내용은 NAT IP 주소를 참조하세요.

Cloud NAT를 사용하거나 사용할 수 없는 경우

외부 IP 주소가 있는 GKE 노드 VM을 포함하여 인스턴스에 Cloud NAT가 적용되나요?

일반적으로는 아닙니다. VM 네트워크 인터페이스에 외부 IP 주소가 있으면 Google Cloud 에서 Cloud NAT를 사용하지 않고 네트워크 인터페이스의 기본 내부 IP 주소에서 전송된 패킷에 항상 일대일 NAT를 수행합니다. 그러나 Cloud NAT는 같은 네트워크 인터페이스의 별칭 IP 주소 범위에서 전송된 패킷에 NAT 서비스를 계속 제공할 수 있습니다. 자세한 내용은 Cloud NAT 사양Compute Engine 상호작용을 참조하세요.

Public NAT를 사용하면 소스와 대상이 같은 VPC 네트워크에 있더라도 네트워크 인터페이스에 외부 IP 주소가 부족한 소스 VM에서 외부 IP 주소가 있는 대상 VM 또는 부하 분산기에 트래픽을 전송할 수 있나요?

예. 네트워크 경로에는 기본 인터넷 게이트웨이를 통해 VPC 네트워크 외부로 트래픽을 전송한 후 같은 네트워크에서 수신하는 과정이 포함됩니다.

소스 VM에서 패킷을 대상으로 전송하면 Public NAT는 패킷이 두 번째 인스턴스에 전달되기 전에 소스 NAT(SNAT)를 수행합니다. Public NAT는 두 번째 인스턴스에서 첫 번째 인스턴스로의 응답에 대상 NAT(DNAT)를 수행합니다. 단계별 예시는 기본 Public NAT 구성 및 워크플로를 참조하세요.

같은 VPC 네트워크에서 VM 간 통신에 Private NAT를 사용할 수 있나요?

아니요. Private NAT는 같은 VPC 네트워크의 VM 간의 트래픽에 NAT를 수행하지 않습니다.

요청하지 않은 수신 연결이 지원되지 않음

Cloud NAT에서 외부 IP 주소가 없는 인스턴스에 대한 인바운드 연결(예: SSH)을 허용하나요?

아니요. Cloud NAT는 요청하지 않은 수신 연결을 지원하지 않습니다. 자세한 내용은 Cloud NAT 사양을 참조하세요. 그러나 대상 IP 주소가 VM 인스턴스 최소 하나 이상에 대한 활성 포트 매핑이 있는 Cloud NAT 게이트웨이 외부 IP 주소이면 Google Cloud의 네트워크 에지가 핑에 응답할 수 있습니다. Cloud NAT 게이트웨이에 할당된 IP 주소를 확인하려면 gcloud compute routers get-nat-ip-info 명령어를 사용하세요. IN_USE로 표시된 외부 IP 주소는 핑에 응답할 수 있습니다.

외부 IP 주소가 없는 VM에 연결해야 할 경우에는 내부 전용 VM에 대한 연결 옵션 선택을 참조하세요. 예를 들어 Cloud NAT 예시 Compute Engine 설정의 일부로 IAP(Identity-Aware Proxy)를 사용하여 외부 IP 주소가 없는 VM에 연결합니다.

Cloud NAT 및 포트

VM에 포트 수가 고정되어(기본값: 64) 있는 이유는 무엇인가요?

Cloud NAT 게이트웨이가 VM에 NAT를 제공하는 경우 포트 예약 절차에 따라 소스 주소와 소스 포트 튜플을 예약합니다.

자세한 내용은 포트 예약 예시를 참조하세요.

VM에 예약된 최소 포트 수를 변경할 수 있나요?

예. 새 Cloud NAT 게이트웨이를 만들거나 나중에 수정하여 VM 당 최소 포트 수를 늘리거나 줄일 수 있습니다. 각 Cloud NAT 게이트웨이는 포트 예약 절차에 따라 소스 주소와 소스 포트 튜플을 예약합니다.

최소 포트 수를 줄이는 방법에 대한 자세한 정보는 다음 질문을 참조하세요.

Cloud NAT 게이트웨이를 만든 후 VM당 최소 포트 수를 줄일 수 있나요?

예. 그러나 최소 포트 수를 줄이면 포트 예약 절차에서 VM당 포트를 더 적게 예약할 수 있습니다. 이 경우 기존 TCP 연결이 재설정될 수 있으며 재설정되면 연결을 다시 설정해야 합니다.

NAT 매핑을 기본 및 보조 범위에서 기본 범위로만 전환할 때 각 인스턴스에 할당된 추가 포트가 즉시 해제되나요?

아니요. 보조 범위에서 사용되는 추가 포트는 VM당 최소 포트 설정이 줄어들 때까지 인스턴스에서 보관됩니다. Cloud NAT가 서브넷의 보조(별칭) 범위를 매핑하도록 구성된 경우 Cloud NAT는 포트 예약 절차에 따라 인스턴스당 포트를 최소 1,024개 할당합니다.

기본 범위로만 전환하면 Cloud NAT는 이미 할당된 포트가 있는 인스턴스에 할당된 추가 포트를 보존합니다. Cloud NAT가 기본에만 적용되는 범위가 변경된 경우 해당 인스턴스에 할당된 실제 포트 수는 VM당 최소 포트 설정도 줄어들 때까지는 변경되지 않습니다.

인스턴스에 할당된 포트 양을 줄이려면 기본 범위로 전환한 후 VM당 최소 포트 설정을 줄여야 합니다. 이 값을 줄이면 Cloud NAT가 인스턴스당 할당된 포트 수를 자동으로 조정하여 포트 소비를 줄입니다.

Cloud NAT 및 기타 Google 서비스

Cloud NAT를 사용하면 Google API 및 서비스에 액세스할 수 있나요?

Cloud NAT를 서브넷 기본 IP 범위에 사용 설정하면 Google Cloud 에서 자동으로 비공개 Google 액세스를 사용 설정합니다. 자세한 내용은 비공개 Google 액세스 상호작용을 참조하세요.

다음 단계