구글 클라우드 NAT Gateway 구성하기

 
최유석

이 글에서는 구글 클라우드의 구글 컴퓨트 엔진의 VPC 네트워크 서비스와 기능 및 인스턴스, 인스턴스 템플릿과 그룹을 이용하여 NAT Gateway를 구성하는 방법에 대해서 알아보겠다. 작년에 작성했던 글(http://whitechoi.tistory.com/24)의 내용에서 주의해야 할 부분이 추가되어 새로 글을 작성하게 되었다. 이미 많은 글들을 통해 무료평가판 등록, 프로젝트 생성, 과금설정하는 부분에 대해서 언급하였다. 따라서 이러한 부분은 생략하고 NAT Gateway를 구성하는 방법에 대해서만 간략하게 설명하겠다.

이 글을 통해 구성될 NAT Gateway의 구성도이다.

 


 

VPC 네트워크 생성

다음과 같이 VPC네트워크를 맞춤설정 네트워크로 서브넷을 추가하여 새로 생성한다.

  • VPC 네트워크 이름: nat-nw
  • 서브넷(맞춤설정)          

            - 이름 : sub-asia

- 지역: asia-east1

- IP 주소 범위: 192.168.0.0/24

- 비공개 Google 액세스: 사용 설정(이 구성과 연관성은 없지만 사용하는게 보안적으로 좋음)

  • 나머지 기본값

 

방화벽 규칙 생성

다음과 같이 SSH접속을 위한 tcp 22포트, 네트워크 내부 통신을 위한 서브넷 범위의 tcp, udp, icmp 허용 규칙을 생성한다.

SSH접속을 위한 TCP 22포트 허용

  • 방화벽 규칙 이름: asia-allow-ssh
  • 네트워크: nat-nw
  • 대상: 네트워크의 모든 인스턴스
  • 소스 필터: IP 범위
  • 소스 IP 범위: 0.0.0.0/0
  • 프로토콜 및 포트(지정된 프로토콜 및 포트): tcp:22
  • 나머지 기본값

 

서브넷(sub-asia)범위의 내부통신을 위한 TCP, UDP, ICMP 허용

  • 방화벽 규칙 이름: asia-allow-internal
  • 네트워크: nat-nw
  • 대상: 네트워크의 모든 인스턴스
  • 소스 필터: 하위 네트워크
  • 하위 네트워크: sub-asia 192.168.0.0/24
  • 프로토콜 및 포트(지정된 프로토콜 및 포트): tcp;udp;icmp
  • 나머지 기본값

 

인스턴스 생성

 

다음과 같이 NAT Gateway로 사용될 인스턴스를 생성한다.

  • 인스턴스 이름: nat
  • 영역: asia-east1-a
  • 부팅 디스크: Ubuntu 14.04 LTS
  • ID 및 API 액세스: 모든 Cloud API에 대한 전체 액세스 허용
  • 네트워크 태그: nat
  • 네트워크 인터페이스

- 네트워크: nat-nw

- 하위 네트워크: sub-asia(192.168.0.0/24)

- 외부IP: nat-ip(고정 IP로 생성, 임시로 해도 무방) 

- IP 전달: 사용

  • 나머지 기본값

인스턴스 템플릿 생성

다음과 같이 인스턴스 그룹에 사용될 인스턴스 템플릿을 생성한다. 여기에서는 NAT Gateway구성만 할 예정이지만, 인스턴스 템플릿과 그룹을 이용하여 로드밸런서, 오토스케일링에 사용할 수 있는 백엔드로 사용할 수 있다.

  • 인스턴스 템플릿 이름: instance-template

 

  • 머신 유형(맞춤설정): vCPU 1개, 1GB 메모리

 

  • 부팅 디스크: Ubuntu 14.04 LTS
  • ID 및 API 액세스: 모든 Cloud API에 대한 전체 액세스 허용
  • 네트워크 태그: no-ip
  • 네트워크 인터페이스

- 네트워크: nat-nw

- 하위 네트워크: sub-asia(192.168.0.0/24)

- 외부IP: 없음

  • 나머지 기본값

인스턴스 그룹 생성

다음과 같이 인스턴스 템플릿을 사용할 인스턴스 그룹을 생성한다.

  • 인스턴스 그룹 이름: instance-group
  • 영역: asia-east1-a
  • 인스턴스 템플릿: instance-template
  • 나머지 기본값

네트워크 경로 생성

다음과 같이 NAT Gateway 구성에 사용될 네트워크 경로를 생성한다.

  • 경로 이름: nat-route
  • 네트워크: nat-nw
  • 대상 IP 범위: 0.0.0.0/0
  • 우선순위: 800
  • 인스턴스 태그: no-ip (인스턴스 템플릿에 설정한 네트워크 태그와 동일해야하며, NAT Gateway로 사용될 인스턴스와 다른 네트워크 태그이어야 한다.) 
  • 다음 홉: 인스턴스 지정
  • 다음 홉 인스턴스: nat

iptables을 이용한 NAT 설정

iptables를 이용해서 NAT 설정을 위해 VM 인스턴스 페이지의 nat(NAT Gateway 인스턴스)의 우측에 있는 SSH버튼을 클릭하여 SSH 터미널로 접속한다.

 

nat 인스턴스의 SSH에 접속하였다면, NAT 설정을 위해 다음의 명령어를 실행 한다.

$ sudo sysctl -w net.ipv4.ip_forward=1

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 

NAT Gateway 구성 확인하기

NAT Gateway 구성이 정상적으로 되었는지 확인하기 위해 다음의 명령어를 이용해서 인스턴스 그룹을 통해 생성된 인스턴스에 SSH로 접속한다.

$ ssh instance-group-nwb2

참고

$ ssh "인스턴스 그룹으로 자동 생성된 인스턴스 명"

NAT Gateway 구성 확인을 위한 traceroute 설치

인스턴스 그룹으로 자동 생성된 인스턴스의 SSH 터미널에서 NAT Gateway가 정상적으로 구성되고 동작되는지 확인을 위해 다음의 명령어로 traceroute를 설치한다.

$ sudo apt-get install -y traceroute

traceroute명령을 이용해서 NAT Gateway 동작 확인하기

traceroute로 외부로 나가는 네트워크 이동경로 확인을 위해 다음의 명령어를 실행한다.

$ traceroute www.google.com

* traceroute 명령을 통해 www.google.com까지 위에서 구성한 nat(NAT Gateway)인스턴스의 내부 IP를 통해서 접근하는 것을 확인할 수 있다.

* 네트워크 이동 경로를 보면 내부 IP를 통해서 이동한 것으로 확인되는데 실제로는 인스턴스의 내부IP -> 외부IP로 외부 네트워크(CF. 인터넷)와 통신하게 된다. 내부IP는 외부 네트워크와의 통신이 되지 않는다.

* NAT 구성에서 주의할 점은 백엔드로 사용 될 인스턴스(또는 인스턴스 템플릿)의 네트워크 태그와 경로에 적용할 태그가 같아야하며, NAT Gateway로 사용될 인스턴스의 태그와는 달라야 한다. 예전에는 같은 태그를 적용해도 문제 없었으나, 현재 직접 테스트를 통해 확인해보니 정상적으로 구성되지 않는다. 

참고링크

https://cloud.google.com/compute/docs/vpc/special-configurations#natgateway

 

 

 

+ Recent posts