Amazon Virtual Private Cloud
사용 설명서

NAT 인스턴스

VPC의 퍼블릭 서브넷에 있는 네트워크 주소 변환(NAT) 인스턴스를 사용하여 프라이빗 서브넷에 있는 인스턴스가 인터넷 또는 다른 AWS 서비스로의 아웃바운드 IPv4 트래픽을 시작하되, 인터넷 상의 누군가가 시작한 인바운드 트래픽은 인스턴스가 수신하지 못하게 막을 수 있습니다.

퍼블릭 서브넷과 프라이빗 서브넷에 대한 자세한 내용은 서브넷 라우팅을 참조하십시오. NAT에 대한 자세한 내용은 NAT를 참조하십시오.

NAT는 IPv6 트래픽을— 지원하지 않으므로, 그 대신에 외부 전용 인터넷 게이트웨이를 사용하십시오. 자세한 내용은 외부 전용 인터넷 게이트웨이 단원을 참조하십시오.

참고

더 나은 가용성과 향상된 대역폭을 제공하면서도 관리 작업은 간소화하는 관리형 NAT 서비스인 NAT 게이트웨이를 사용할 수도 있습니다. 일반 사용 사례에서는 NAT 인스턴스보다 NAT 게이트웨이를 사용하는 것이 좋습니다. 자세한 내용은 NAT 게이트웨이NAT 인스턴스 및 NAT 게이트웨이 비교 단원을 참조하십시오.

NAT 인스턴스 기본 사항

다음 그림에서는 NAT 인스턴스 기본 사항을 보여줍니다. 기본 라우팅 테이블은 프라이빗 서브넷과 연결되며 인스턴스에서 퍼블릭 서브넷의 NAT 인스턴스로 트래픽을 전송합니다. NAT 인스턴스는 VPC용 인터넷 게이트웨이로 트래픽을 전송합니다. 트래픽은 NAT 인스턴스의 탄력적 IP 주소에 기인합니다. NAT 인스턴스는 응답에 대해 높은 포트 번호를 지정합니다. 즉, 응답이 되돌아오면 NAT 인스턴스가 응답에 대한 포트 번호를 기준으로 프라이빗 서브넷에 있는 인스턴스로 이 응답을 보냅니다.

 NAT 인스턴스 설정

Amazon은 NAT 인스턴스로 작동하도록 구성된 Amazon Linux AMI를 제공합니다. 이런 AMI에는 이름에 amzn-ami-vpc-nat 문자열이 포함되므로, Amazon EC2 콘솔에서 이런 AMI를 검색할 수 있습니다.

NAT AMI에서 인스턴스를 시작하면 인스턴스에 다음과 같은 구성이 나타납니다.

  • /etc/sysctl.d/10-nat-settings.conf에서 IPv4 전달을 사용하며 ICMP 리디렉션은 사용하지 않음

  • 시작 시 /usr/sbin/configure-pat.sh에 위치한 스크립트가 실행되며 iptables IP 매스커레이딩을 구성.

참고

구성 업데이트를 활용하려면 NAT AMI의 최신 버전을 사용하는 것이 좋습니다.

VPC에서 보조 IPv4 CIDR 블록을 추가 및 제거하는 경우에는 AMI 버전 amzn-ami-vpc-nat-hvm-2017.03.1.20170623-x86_64-ebs 이상을 사용해야 합니다.

NAT 인스턴스 제한은 해당 리전의 인스턴스 유형 제한에 따라 다릅니다. 자세한 내용은 EC2 FAQ를 참조하십시오. 사용 가능한 NAT AMI 목록은 Amazon Linux AMI matrix 단원을 참조하십시오.

NAT 인스턴스 설정

VPC 마법사를 사용하여 NAT 인스턴스가 있는 VPC를 설정할 수 있습니다. 자세한 내용은 시나리오 2: 퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC(NAT) 단원을 참조하십시오. 이 마법사는 NAT 인스턴스 시작 및 라우팅 설정을 포함한 여러 구성 단계를 자동으로 수행합니다. 하지만 사용자가 원할 경우 아래 단계에 따라 VPC와 NAT 인스턴스를 수동으로 생성하고 구성할 수 있습니다.

  1. 두 개의 서브넷이 있는 VPC를 생성합니다.

    참고

    아래 단계는 VPC 마법사를 사용하여 VPC를 생성하는 것이 아니라, VPC를 수동으로 생성하고 구성하기 위한 단계입니다.

    1. VPC를 생성합니다(VPC 만들기 참조).

    2. 두 개의 서브넷을 생성합니다(서브넷 만들기 참조).

    3. 인터넷 게이트웨이를 VPC에 연결합니다(인터넷 게이트웨이 생성 및 연결 참조).

    4. VPC 외부 위치를 목적지로 하는 트래픽을 인터넷 게이트웨이로 보내는 사용자 지정 라우팅 테이블을 생성한 다음, 이를 한 서브넷과 연결하여 퍼블릭 서브넷으로 만듭니다(사용자 지정 라우팅 테이블 생성 참조).

  2. NATSG 보안 그룹을 생성합니다(NATSG 보안 그룹 생성 참조). NAT 인스턴스를 시작할 때 이 보안 그룹을 지정합니다.

  3. NAT 인스턴스로 실행하도록 구성된 AMI에서 퍼블릭 서브넷으로 인스턴스를 시작합니다. Amazon은 NAT 인스턴스로 작동하도록 구성된 Amazon Linux AMI를 제공합니다. 이런 AMI에는 이름에 amzn-ami-vpc-nat 문자열이 포함되므로, Amazon EC2 콘솔에서 이런 AMI를 검색할 수 있습니다.

    1. Amazon EC2 콘솔을 엽니다.

    2. 대시보드에서 [Launch Instance] 버튼을 선택하고 다음과 같이 마법사가 안내하는 단계를 완료하십시오.

      1. [Choose an Amazon Machine Image (AMI)] 페이지에서 [Community AMIs] 범주를 선택하고 amzn-ami-vpc-nat를 검색합니다. 결과 목록에서 각 AMI의 이름에는 가장 최근의 AMI를 선택할 수 있는 버전이 포함됩니다(예: 2013.09). [Select]를 선택합니다.

      2. [Choose an Instance Type] 페이지에서 인스턴스 유형과 [Next: Configure Instance Details]를 차례로 선택합니다.

      3. [Configure Instance Details] 페이지의 [Network] 목록에서 사용자가 생성한 VPC를 선택하고 [Subnet] 목록에서 퍼블릭 서브넷을 선택합니다.

      4. (선택 사항) [Public IP] 확인란을 선택하여 NAT 인스턴스가 퍼블릭 IP 주소를 수신하도록 요청합니다. 지금 퍼블릭 IP 주소를 배정하지 않는 것으로 선택하는 경우 탄력적 IP 주소를 할당하고 인스턴스가 시작된 후에 이 주소를 인스턴스에 배정할 수 있습니다. 시작 시 퍼블릭 IP 배정에 대한 자세한 내용은 인스턴스 시작 시 퍼블릭 IPv4 주소 배정 단원을 참조하십시오. [Next: Add Storage]를 선택합니다.

      5. 인스턴스에 스토리지를 추가하도록 선택할 수 있고, 다음 페이지에서 태그를 추가할 수 있습니다. 모두 마쳤으면 [Next: Configure Security Group]을 선택합니다.

      6. [Configure Security Group] 페이지에서 [Select an existing security group] 옵션을 선택하고, 사용자가 생성한 NATSG 보안 그룹을 선택합니다. [Review and Launch]를 선택합니다.

      7. 선택한 설정을 검토합니다. 필요한 사항을 변경한 후 [Launch]를 선택하여 키 페어를 선택하고 인스턴스를 시작합니다.

  4. (선택 사항) NAT 인스턴스에 연결하고, 필요한 수정 작업을 수행한 다음, NAT 인스턴스로 작동하도록 구성된 자체 AMI를 생성합니다. 다음에 NAT 인스턴스를 시작할 필요가 있을 때 이 AMI를 사용할 수 있습니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서Amazon EBS 지원 AMI 생성을 참조하십시오.

  5. NAT 인스턴스에 대한 SrcDestCheck 속성을 비활성화합니다(원본/대상 확인 비활성화 참조).

  6. 시작 도중에(3단계) 퍼블릭 IP 주소를 NAT 인스턴스에 배정하지 않았다면, 탄력적 IP 주소를 NAT 인스턴스와 연결할 필요가 있습니다.

    1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

    2. 탐색 창에서 [Elastic IPs]와 [Allocate New Address]를 차례로 선택합니다.

    3. [Allocate]를 선택합니다.

    4. 목록에서 탄력적 IP 주소를 선택한 다음, [Actions], [Associate Address]를 선택합니다.

    5. 네트워크 인터페이스 리소스를 선택한 다음 NAT 인스턴스에 대한 네트워크 인터페이스를 선택합니다. [Private IP] 목록에서 탄력적 IP 주소와 연결할 주소를 선택한 다음 [Associate]를 선택합니다.

  7. NAT 인스턴스로 트래픽을 보내기 위해 기본 라우팅 테이블을 업데이트합니다. 자세한 내용은 기본 라우팅 테이블 업데이트 단원을 참조하십시오.

명령줄을 사용하여 NAT 인스턴스 시작

서브넷으로 NAT 인스턴스를 시작하려면 다음 명령 중 하나를 사용합니다. 자세한 내용은 Amazon VPC에 액세스 단원을 참조하십시오.

NAT 인스턴스로 작동하도록 구성된 AMI의 ID를 가져오려면 이미지를 설명하기 위한 명령을 사용하고 Amazon이 소유하고 있고 이름에 amzn-ami-vpc-nat 문자열이 포함된 AMI에 대한 결과만 반환하는 필터를 사용합니다. 다음 예제에서는 AWS CLI를 사용합니다.

aws ec2 describe-images --filter Name="owner-alias",Values="amazon" --filter Name="name",Values="amzn-ami-vpc-nat*"

NATSG 보안 그룹 생성

다음 표에 설명되어 있는 것처럼 NATSG 보안 그룹을 정의하여 NAT 인스턴스가 프라이빗 서브넷에 있는 인스턴스로부터의 인터넷 바인딩 트래픽뿐 아니라, 네트워크로부터의 SSH 트래픽도 수신할 수 있도록 합니다. 또한. NAT 인스턴스는 인터넷으로 트래픽을 전송할 수 있으며 따라서 프라이빗 서브넷의 인스턴스가 소프트웨어 업데이트를 받을 수 있습니다.

NATSG: 권장 규칙

Inbound
Source Protocol Port Range Comments

10.0.1.0/24

TCP

80

프라이빗 서브넷의 서버로부터의 인바운드 HTTP 트래픽 허용

10.0.1.0/24

TCP

443

프라이빗 서브넷의 서버로부터의 인바운드 HTTPS 트래픽 허용

홈 네트워크의 공인 IP 주소 범위

TCP

22

홈 네트워크로부터 NAT 인스턴스에 대한 인바운드 SSH 액세스 허용(인터넷 게이트웨이를 통해)

Outbound

Destination Protocol Port Range Comments

0.0.0.0/0

TCP

80

IPv4를 통해 인터넷에 접근하는 아웃바운드 HTTP

0.0.0.0/0

TCP

443

인터넷에 대한 아웃바운드 HTTPS 액세스 허용

NATSG 보안 그룹을 생성하려면

  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 [Security Groups]를 선택한 다음, [Create Security Group]을 선택합니다.

  3. [Create Security Group] 대화 상자에서 보안 그룹의 이름을 NATSG로 지정하고 설명을 입력합니다. [VPC] 목록에서 VPC ID를 선택한 다음 [Yes, Create]를 선택합니다.

  4. 방금 만든 NATSG 보안 그룹을 선택합니다. 세부 정보 창에는 인바운드 및 아웃바운드 규칙 작업을 위한 탭과 함께 보안 그룹에 대한 세부 정보가 표시됩니다.

  5. 다음과 같이 [Inbound Rules] 탭을 사용하여 인바운드 트래픽에 대한 규칙을 추가합니다.

    1. [Edit]를 선택합니다.

    2. [Add another rule]을 선택하고, [Type] 목록에서 [HTTP]를 선택합니다. [Source] 필드에 프라이빗 서브넷의 IP 주소 범위를 지정합니다.

    3. [Add another rule]을 선택하고, [Type] 목록에서 [HTTPS]를 선택합니다. [Source] 필드에 프라이빗 서브넷의 IP 주소 범위를 지정합니다.

    4. [Add another rule]을 선택하고, [Type] 목록에서 [SSH]를 선택합니다. [Source] 필드에 네트워크의 퍼블릭 IP 주소 범위를 지정합니다.

    5. [Save]를 선택합니다.

  6. 다음과 같이 [Outbound Rules] 탭을 사용하여 아웃바운드 트래픽에 대한 규칙을 추가합니다.

    1. [Edit]를 선택합니다.

    2. [Add another rule]을 선택하고, [Type] 목록에서 [HTTP]를 선택합니다. [Destination] 필드에 0.0.0.0/0을 지정합니다.

    3. [Add another rule]을 선택하고, [Type] 목록에서 [HTTPS]를 선택합니다. [Destination] 필드에 0.0.0.0/0을 지정합니다.

    4. [Save]를 선택합니다.

자세한 내용은 VPC의 보안 그룹 단원을 참조하십시오.

원본/대상 확인 비활성화

각각의 EC2 인스턴스는 기본적으로 원본/대상 확인을 수행합니다. 이는 인스턴스가 보내거나 받는 트래픽의 원본 또는 대상이어야 한다는 의미입니다. 하지만, NAT 인스턴스는 원본 또는 대상이 그 자신이 아닐 때 트래픽을 보내고 받을 수 있어야 합니다. 따라서 NAT 인스턴스에서 원본/대상 확인을 비활성화해야 합니다.

콘솔 또는 명령줄을 사용하여 실행 중이거나 중지된 NAT 인스턴스에 대해 SrcDestCheck 속성을 비활성화할 수 있습니다.

콘솔을 사용하여 원본/대상 확인을 비활성화하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances를 선택합니다.

  3. NAT 인스턴스를 선택하고 작업, 네트워킹, 소스/대상 확인 을 선택합니다.

  4. NAT 인스턴스에 대해 이 속성이 비활성화되어 있는지 확인합니다. 그렇지 않으면 [Yes, Disable]을 선택합니다.

  5. NAT 인스턴스에 보조 네트워크 인터페이스가 있다면 설명 탭의 네트워크 인터페이스에서 선택한 다음 인터페이스 ID를 선택해 네트워크 인터페이스 페이지로 이동합니다. 작업, 소스/대상 확인 을 차례로 선택하고 설정을 비활성화한 다음 저장을 선택합니다.

명령줄을 사용하여 원본/대상 확인을 비활성화하려면

다음 명령 중 하나를 사용할 수 있습니다. 자세한 내용은 Amazon VPC에 액세스 단원을 참조하십시오.

기본 라우팅 테이블 업데이트

VPC의 프라이빗 서브넷은 사용자 지정 라우팅 테이블과 연결되지 않으므로 기본 라우팅 테이블을 사용합니다. 기본적으로, 기본 라우팅 테이블을 통해 VPC의 인스턴스가 서로 통신할 수 있습니다. NAT 인스턴스로 다른 모든 서브넷 트래픽을 보내는 경로를 추가해야 합니다.

기본 라우팅 테이블을 업데이트하려면

  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 [Route Tables]를 선택합니다.

  3. VPC에 대한 기본 라우팅 테이블을 선택합니다([Main] 열이 [Yes]로 표시되어 있음). 세부 정보 창에는 경로, 연결 및 경로 전파 작업을 위한 탭이 표시됩니다.

  4. [Routes] 탭에서 [Edit]를 선택하고, [Destination] 상자에서 0.0.0.0/0을 지정하고, [Target] 목록에서 NAT 인스턴스의 인스턴스 ID를 선택한 다음, [Save]를 선택합니다.

  5. [Subnet Associations] 탭에서 [Edit]를 선택한 다음, 서브넷에 대한 [Associate] 확인란을 선택합니다. [Save]를 선택합니다.

자세한 내용은 라우팅 테이블 단원을 참조하십시오.

NAT 인스턴스 구성 테스트

NAT 인스턴스를 시작하고 위의 구성 단계를 완료한 후, NAT 인스턴스를 접속 서버로 사용하여 프라이빗 서브넷의 인스턴스가 NAT 인스턴스를 통해 인터넷에 액세스할 수 있는지 확인하는 테스트를 수행할 수 있습니다. 이를 위해, 인바운드 및 아웃바운드 ICMP 트래픽과 아웃바운드 SSH 트래픽을 허용하도록 NAT 인스턴스의 보안 그룹 규칙을 업데이트하고, 프라이빗 서브넷으로 인스턴스를 시작하고, 프라이빗 서브넷에 있는 인스턴스에 액세스하도록 SSH 에이전트 전달을 구성하고, 인스턴스에 연결한 다음, 인터넷 연결을 테스트합니다.

NAT 인스턴스의 보안 그룹을 업데이트하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Security Groups]를 선택합니다.

  3. NAT 인스턴스와 연결된 보안 그룹을 찾고, [Inbound] 탭에서 [Edit]를 선택합니다.

  4. 규칙 추가를 선택하고, 유형 목록에서 모든 ICMP - IPv4를, 소스 목록에서 사용자 지정을 선택합니다. 프라이빗 서브넷의 IP 주소 범위를 입력합니다(예: 10.0.1.0/24). [Save]를 선택합니다.

  5. [Outbound] 탭에서 [Edit]를 선택합니다.

  6. 규칙 추가를 선택하고, 유형 목록에서 SSH를, 대상 목록에서 사용자 지정을 선택합니다. 프라이빗 서브넷의 IP 주소 범위를 입력합니다(예: 10.0.1.0/24). [Save]를 선택합니다.

  7. 규칙 추가를 선택하고, 유형 목록에서 모든 ICMP - IPv4를, 대상 목록에서 사용자 지정을 선택합니다. 0.0.0.0/0을 입력한 다음 [Save]를 선택합니다.

프라이빗 서브넷으로 인스턴스를 시작하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances를 선택합니다.

  3. 프라이빗 서브넷으로 인스턴스를 시작합니다. 자세한 내용은 서브넷에서 인스턴스 시작 단원을 참조하십시오. 시작 마법사에서 다음 옵션을 구성한 다음, [Launch]를 선택합니다.

    • [Choose an Amazon Machine Image (AMI)] 페이지의 [Quick Start] 범주에서 Amazon Linux AMI를 선택합니다.

    • [Configure Instance Details] 페이지의 [Subnet] 목록에서 프라이빗 서브넷을 선택하고, 인스턴스에 퍼블릭 IP 주소를 배정하지 마십시오.

    • [Configure Security Group] 페이지에서 보안 그룹에 NAT 인스턴스의 프라이빗 IP 주소에서 또는 퍼블릭 서브넷의 IP 주소 범위에서의 SSH 액세스를 허용하는 인바운드 규칙이 포함되어 있는지 확인하고, 아웃바운드 ICMP 트래픽을 허용하는 아웃바운드 규칙이 있는지 확인합니다.

    • [Select an existing key pair or create a new key pair] 대화 상자에서 NAT 인스턴스를 시작하는 데 사용한 것과 동일한 키 페어를 선택합니다.

Linux 또는 OS X에 대한 SSH 에이전트 전달을 구성하려면

  1. 로컬 시스템에서 인증 에이전트에 프라이빗 키를 추가합니다.

    Linux의 경우 다음 명령을 사용합니다.

    ssh-add -c mykeypair.pem

    OS X의 경우 다음 명령을 사용합니다.

    ssh-add -K mykeypair.pem
  2. -A 옵션을 사용하여 NAT 인스턴스에 연결해 SSH 에이전트 전달을 활성화합니다. 예를 들면 다음과 같습니다.

    ssh -A ec2-user@54.0.0.123

Windows(PuTTY)에 대한 SSH 에이전트 전달을 구성하려면

  1. Pageant가 아직 설치되어 있지 않으면 PuTTY 다운로드 페이지에서 Pageant를 다운로드하여 설치합니다.

  2. 프라이빗 키를 .ppk 형식으로 변환합니다. 자세한 내용은 PuTTYgen을 사용하여 프라이빗 키 변환 단원을 참조하십시오.

  3. Pageant를 시작하고 작업 표시줄의 Pageant 아이콘을 마우스 오른쪽 버튼으로 클릭한 다음 [Add Key]를 선택합니다. 생성한 .ppk 파일을 선택하고 필요한 경우 암호를 입력한 다음 [Open]을 선택합니다.

  4. PuTTY 세션을 시작하여 NAT 인스턴스에 연결합니다. [Auth] 범주에서 [Allow agent forwarding] 옵션을 선택하고 [Private key file for authentication] 필드를 공백 상태로 둡니다.

인터넷 연결을 테스트하려면

  1. ICMP를 활성화한 웹 사이트에 대해 ping 명령을 사용하여 NAT 인스턴스가 인터넷과 통신할 수 있는지 테스트합니다. 예를 들면 다음과 같습니다.

    ping ietf.org
    PING ietf.org (4.31.198.44) 56(84) bytes of data. 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=48 time=74.9 ms 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=48 time=75.1 ms ...

    키보드에서 [Ctrl+C]를 눌러 ping 명령을 취소합니다.

  2. NAT 인스턴스에서 프라이빗 IP 주소를 사용하여 프라이빗 서브넷의 인스턴스에 연결합니다. 예를 들면 다음과 같습니다.

    ssh ec2-user@10.0.1.123
  3. 프라이빗 인스턴스에서 ping 명령을 실행하여 인터넷에 연결할 수 있는지 테스트합니다.

    ping ietf.org
    PING ietf.org (4.31.198.44) 56(84) bytes of data. 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=47 time=86.0 ms 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=47 time=75.6 ms ...

    키보드에서 [Ctrl+C]를 눌러 ping 명령을 취소합니다.

    ping 명령에 실패하면 다음 정보를 확인합니다.

    • NAT 인스턴스의 보안 그룹 규칙이 프라이빗 서브넷에서의 인바운드 ICMP 트래픽을 허용하는지 확인합니다. 허용하지 않으면, NAT 인스턴스가 프라이빗 인스턴스에서 ping 명령을 수신할 수 없습니다.

    • 라우팅 테이블을 올바로 구성했는지 확인합니다. 자세한 내용은 기본 라우팅 테이블 업데이트 단원을 참조하십시오.

    • NAT 인스턴스에 대해 원본/대상 확인을 비활성화했는지 확인합니다. 자세한 내용은 원본/대상 확인 비활성화 단원을 참조하십시오.

    • ICMP가 활성화된 웹 사이트에 대해 ping을 실행 중인지 확인합니다. 그렇지 않으면 회신 패킷이 수신되지 않을 것입니다. 이를 테스트하려면 사용자 자신의 컴퓨터의 명령줄 터미널에서 똑같은 ping 명령을 수행하십시오.

  4. (선택 사항) 프라이빗 인스턴스가 더 이상 필요하지 않으면 이를 종료하십시오. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서에서 인스턴스 종료를 참조하십시오.