AWS

VPC에 대해 조금 더 자세히 알아보자 (3) - NAT Instance, NAT Gateway

S_N_Y 2024. 4. 18. 11:32

 

나트 인스턴스는 종료될 서비스이기도 하고

나트 인스턴스보다 더 좋은 나트 게이트웨이가 있긴 하지만 먼저 다뤄보려고 한다.

 

#0 NAT Instance

- NAT라는 것 자체의 의미는 네트워크 주소 변환을 뜻한다.

- NAT Instance는 private subnet EC2 인스턴스가 인터넷에 연결되도록 허용한다.

- NAT Instance는 public subnet에서 실행되어야 하고 public - private을 연결한다.

- 그리고 NAT Instance에는 탄력적 IP(Elastic IP)가 무조건 연결되어야 한다.

그림을 보고 더 설명해보겠다.

서버가 있는데 공용 서버이고 IP는 50.60.4.10이다. 이때 private subnet에서 액세스를 하겠다.

...

여기에서 private subnet에서 어떻게 서버로 연결할까?🔍

public subnet에 고유의 보안 그룹이 있는 NAT Instance를 실행하면 된다. 다음은 NAT Instance에 탄력적 IP를 연결한다. 또한 라우팅 테이블을 수정하여 private subnet과 public subnet의 두 subnet에 있는 EC2 인스턴스로부터 NAT 인스턴스로 트래픽을 전송하도록 한다. 그리고 인스턴스의 IP는 public 서버로 액세스하는데 NAT 인스턴스를 통과해야 한다.

=> 따라서 요청에는 소스 IP가 10.0.0.20 즉, privte IP이고 목적지는 50.60.4.10인데 NAT 인스턴스는 트래픽을 다른 곳으로 전송하려는 것을 깨닫고 해당 서버로 트래픽을 보낸다.

...

그런데 그 서버에는 다른 점이 있다.

목적지 IP는 같지만 소스 IP는 12.34.56.78이다 (NAT 인스턴스의 public IP에 해당)

그러면 NAT 인스턴스가 다시 EC2 인스턴스로 트래픽을 회신한다. 어떤 인스턴스로 갈지는 잘 알고 있다. 소스는 public 서버이고 목적지는 private IP이다. 이런 이유 때문에 일부의 IP가 재작성이 되고 또 NAT 인스턴스를 위해 소스 및 목적기 확인 설정을 EC2 인스턴스에서 비활성화해야 한다는 것..!

 

<NAT Instance의 작동 방식>🚴

public subnet에 NAT Instance를 생성하고 거기에 탄력적 IP를 연결한다. 

그리고 라우팅 테이블을 통해 private 인스턴스가 NAT 인스턴스에서 internet gateway까지 통신되도록 한다.

 

⛔근데 사실 NAT Instance는 사라질 서비스이다!⛔

NAT 인스턴스를 보면 사전에 구성된 AMI를 사용할 수 있었지만 2020년 이후로 표준 지원이 종료됐기 때문에 이제 NAT Gateway를 권장하고 NAT 인스턴스는 사실 가용성이 높지 않고 초기화 설정으로 복원할 수 없어서 여러 AZ에 ASG를 생성해야 하고 복원되는 사용자 데이터 스크립트가 필요하기 때문에 꽤 복잡하다. 그리고 작은 인스턴스는 큰 인스턴스에 비겨해서 대역폭도 더 작다. 그리고 보안 그룹과 규칙을 관리해야 한다. 인바운드에서는 private subnet의 HTTP/HTTPS 트래픽을 허용하고 홈 네트워크의 SSH도 허용한다. 

인스턴스 말고 게이트웨이를 쓰는 것을 권장한다.

 

#1 NAT Gateway

위에서 다뤘던 NAT Instance의 업그레이드 버전인데 관리형 NAT Instance이고 높은 대역폭을 가지고 있다.

(사용량이나 NAT Gateway의 대역폭에 따라 청구되는데 필자도 생각보다 돈이 많이 나가서 놀란 적이 있으니 학생은 사용을 신중하게 고려하길 바란다.)

또한 NAT Gateway는 특정 AZ에서 생성되고 탄력적 IP를 이어받는다.

EC2 인스턴스와 같은 서브넷에서 사용할 수 없어서 다른 서브넷에서 액세스할 때만 NAT Gateway가 도움이 된다!

그리고 NAT Gateway에는 인터넷 게이트웨이가 당연히 있어야하고 보안 그룹을 관리할 필요가 없다.

 

<NAT Gateway 작동 방식>🚴

NAT Gateway를 public subnet에 배포한다.

NAT Gateway가 public subnet에 있으니 public subnet은 이미 internet gateway에 연결됐고 NAT Gateway에 인터넷 연결이 생긴다. 그 다음 private subnet의 루트를 수정하는데 그렇게 해야 EC2 인스턴스를 NAT Gateway에 연결할 수 있다.

 

+) NAT Gateway의 고가용성

NAT Gateway는 단일 AZ에서 복원 가능하고 단일 AZ 내에서만 중복되지만

AZ가 중지될 경우를 위해 다중 NAT Gateway를 여러 AZ에 두면 결함을 허용할 수 있다.

 

작동 방식은 아래 그림을 참고하면서 알아보자!

현재 하나의 NAT Gateway가 하나의 특정 AZ에 있다. 두 번째 AZ에 두 번째로 NAT Gateway를 생성한다. 각 네트워크 트래픽은 AZ 안에 제한된다. 그래서 AZ가 중지되면 전체 AZ가 중지되는 것이다.

그런데 아직 AZ-B가 작동된다.

=> AZ-B에도 NAT Gateway가 있어서 그런 것

 

라우팅 테이블에 서로 연결할 필요는 없고 만약 AZ가 중지되면 그 AZ의 EC2 인스턴스가 액세스 불가 상태가 된다.

 

#1 NAT Gateway와 NAT Instance의 차이점 정리

앞서 나온 개념들을 추가 정리하면 다음과 같은 차이점이 있다는 것을 알 수 있다!

  NAT Gateway NAT Instance
관리 주체 AWS (AWS가 제공하는 서비스) 사용자 (EC2 인스턴스에서 동작하기 때문)
성능 456bps까지 확장 가능 - 선택한 인스턴스의 성능에 기초
- 수동으로 확장 설정을 하거나 로드 밸런싱으로 다수의 인스턴스가 필요
고가용성 - AZ 안에서 제공
- 다수의 AZ로 자동 복제
- 사용자가 직접 다른 AZ에서 설정 필요
- EIP나 ASP의 추가적인 설정 필요
ELP 사용 여부 자동 생성 및 재시작 후에도 사용 가능 재시작하면 변경
보안 더 높은 보안 레벨 제공 - 일반적인 EC2 인스턴스 사용
- 보안 그룹과 방화벽 설정 필요