부록. NAT 인스턴스 사용
프라이빗 서브넷의 인스턴스가 인터넷으로 통신할 때, NAT 통신을 하기 위해 NAT 인스턴스를 사용할 수 있습니다.
라우팅 테이블에 연결된 프라이빗 서브넷은 라우팅 정책에 의해 퍼블릭 서브넷의 NAT 인스턴스로 트래픽을 전송합니다. 그리고 NAT 인스턴스는 인터넷 게이트웨이로 트래픽을 전송합니다. 이때 인터넷 게이트웨이로 통신 시 사용되는 IP는 NAT 인스턴스의 퍼블릭 IP입니다. 따라서 NAT 인스턴스는 퍼블릭 서브넷 내에 생성되어야 하며, 퍼블릭 IP 주소가 연결되어야 하고, 인터넷으로 통신해야 합니다.
프라이빗 서브넷이 NAT 인스턴스를 사용해 인터넷으로 NAT 통신을 하는 방법은 다음과 같습니다.
NAT 인스턴스 라우팅 경로
Step 1. 서브넷 생성 및 라우팅 테이블 설정
프라이빗 서브넷과 퍼블릭 서브넷을 생성한 후, 라우팅 테이블을 설정합니다.
-
프라이빗 서브넷과 퍼블릭 서브넷을 생성합니다. 자세한 설명은 서브넷 생성 및 관리를 참고하시기 바랍니다.
-
프라이빗 서브넷과 퍼블릭 서브넷으로 사용할 라우팅 테이블을 설정합니다. 이때 서브넷을 용도에 맞도록 라우팅 테이블에 연결합니다. 자세한 설명은 라우팅 테이블 생성 및 관리를 참고하시기 바랍니다.
[퍼블릭 서브넷] 라우팅 테이블
목적지 대상 유형 대상 이름 VPC CIDR IP Local Local 0.0.0.0/0 인터넷 게이트웨이 인터넷 게이트웨이 ID [프라이빗 서브넷] 라우팅 테이블
목적지 대상 유형 대상 이름 VPC CIDR IP Local Local
Step 2. NAT 인스턴스 설정
퍼블릭 서브넷에 NAT 인스턴스를 생성한 후, 퍼블릭 IP를 연결합니다.
-
NAT 인스턴스로 사용할 인스턴스를 퍼블릭 서브넷에 만듭니다.
-
NAT 인스턴스에 퍼블릭 IP를 연결합니다. 자세한 설명은 퍼블릭 IP 생성 및 관리를 참고하시기 바랍니다.
-
NAT 인스턴스에 접속하여 아래와 같이 설정합니다. 인스턴스의 운영체제에 따라 명령이 다르며, 아래 탭을 확인하여 사용자 환경에 맞게 설정합니다. 예제 명령어는 재부팅 후에 동작하지 않습니다. 재부팅 시에도 해당 설정이 지속적으로 유지되길 원한다면 추가적인 설정이 필요합니다.
- Ubuntu
- CentOS
Ubuntu 20.04 버전을 기준으로 다음의 명령을 사용합니다.
BASHsudo sysctl -w net.ipv4.ip_forward=1
sudo /sbin/iptables -t nat -A POSTROUTING -o {interface} -j MASQUERADECentos8 버전을 기준으로 다음의 명령을 사용합니다.
BASHsudo sysctl -w net.ipv4.ip_forward=1
sudo yum install -y iptables
sudo iptables -t nat -A POSTROUTING -o {interface} -j MASQUERADE파라미터 설명 {interface}
NAT 통신을 위한 Network Interface 이름으로 수정하여 설정
- 예시:eth0
,enp3s0
등
Step 3. 출발지/목적지 확인 변경 설정
인스턴스는 기본적으로 출발지/목적지를 확인하며 본인을 목적지로 하는 트래픽만을 수신합니다. 그러나 NAT 인스턴스는 트래픽의 출발지와 목적지가 자신이 아니어도 트래픽을 보내고 받을 수 있어야 합니다.
인스턴스의 출발지/목적지 확인 변경 기능을 통해, 생성한 인스턴스를 NAT 인스턴스 용도로 설정할 수 있습니다.
-
카카오클라우드 콘솔에서 Virtual Machine 메뉴로 이동합니다.
-
인스턴스 탭에서 NAT 인스턴스로 사용할 인스턴스의 [더 보기] 아이콘 > 출발지/목적지 확인 변경을 선택합니다.
-
출발지/목적지 확인 변경 팝업창에서 [비활성화] 버튼을 클릭 후 [닫기] 버튼을 클릭합니다. (기본값: 활성화)
안내출발지/목적지 확인의 기본 설정은 활성화이며, 이 설정은 해당 인스턴스의 IP/MAC 주소만 네트워크 트래픽을 허용하여 안전한 네트워크 트래픽 보안을 유지합니다. 비활성화로 변경 시, 모든 IP/MAC 주소에 대한 트래픽을 허용하고, 보안 그룹 정책에 따른 패킷을 포워딩합니다.
Step 4. NAT 인스턴스의 보안 그룹 설정
출발지/목적지 확인 변경을 비활성으로 설정한 인스턴스를 사용할 경우, 다음의 보안 그룹 정책에 따라 통신할 수 있습니다.
인바운드 규칙과 아웃바운드 규칙에 다음과 같이 보안 그룹을 설정합니다.
프라이빗 서브넷에서 HTTP, HTTPS 이외의 포트를 사용해 통신을 원한다면, NAT 인스턴스의 보안 그룹에서 인바운드/아웃바운드 규칙에 사용할 포트를 모두 추가해야 합니다.
인바운드 규칙
NAT 인스턴스가 프라이빗 서브넷의 인스턴스로부터 패킷을 받아 인터넷으로 전달하고, 시스템 관리자가 SSH를 통해 접근할 수 있도록 인바운드 규칙에 다음과 같이 보안 그룹을 설정합니다.
프로토콜 | 패킷 출발지 | 포트 번호 | 설명 |
---|---|---|---|
TCP | 프라이빗 서브넷 CIDR | 80 | 프라이빗 서브넷 인스턴스의 HTTP 트래픽 인바운드 허용 |
TCP | 프라이빗 서브넷 CIDR | 443 | 프라이빗 서브넷 인스턴스의 HTTPS 트래픽 인바운드 허용 |
TCP | 관리자 네트워크의 퍼블릭 IP 주소 범위 | 22 | 관리자 네트워크에서 NAT 인스턴스의 SSH 접속 인바운드 허용 |
아웃바운드 규칙
NAT 인스턴스를 통해 인터넷으로 나갈 수 있도록 아웃바운드 규칙에 다음과 같이 보안 그룹을 설정합니다.
프로토콜 | 패킷 목적지 | 포트 번호 | 설명 |
---|---|---|---|
TCP | 0.0.0.0/0 | 80 | HTTP 트래픽 아웃바운드 허용 |
TCP | 0.0.0.0/0 | 443 | HTTPS 트래픽 아웃바운드 허용 |
Step 5. 라우팅 테이블 업데이트
NAT 인스턴스로 트래픽을 보낼 프라이빗 서브넷의 라우팅 테이블을 업데이트합니다. 라우팅 테이블을 업데이트하기 위해서는 프라이빗 서브넷이 연결된 라우팅 테이블에 인스턴스 라우팅을 추가해야 합니다. 자세한 설명은 라우팅 추가를 참고하시기 바랍니다.
목적지 | 대상 유형 | 대상 이름 |
---|---|---|
VPC CIDR IP | Local | Local |
0.0.0.0/0 | 인스턴스 | 인스턴스 IP(인스턴스 ID) |