IT/AWS[Amazon Web Service]

[AWS] NAT instance

송시 2022. 6. 19. 00:22
728x90

앞선 글에서 NAT gateway 라는 것에 대해서 알아 보았다.

 

public zone 에 NAT gateway (마치 공유기와 같이)를 두고 private zone 에서 라우팅을 통해 0.0.0.0/0 이 NAT gateway를 바라보며, 이를 통해 인터넷 통신이 가능하도록 한다.

 

추가로 외부 인터넷이 가능하지만 내부 시스템에(private zone) 대한 보안을 향상 할 수 있다.

 

이때 NAT gateway 는 EIP를 통해서만 지원한다.

 

매우 깔꼼하다.

 

그런데 AWS에서는 NAT instance 라는 것을 또한 제공한다.

 

AWS에는 고객의 여러 다양한 요구사항을 위해 대비되었다고 느껴지는 대목이기도 하다.

 

그런데!! nat instance 는 별로 인기가 없나보다, 어쩌면 고객의 요구사항이 그리 크지 않았거나, NAT gateway 를 대체하기에는 결국 성능적인 이슈(결국에 돈을 투자하면 되는 문제이긴 하지만, 순수하게 NAT 기능만을 위해 돈을 투자하는게 별루여서 일수도 있다. 이부분은 조금 후에 다시 이야기 하자)

 

NAT instance 는 말에서도 알 수 있듯이 instance 다! 그냥 더 쉽게 말해 EC2 인데 NAT 기능을 한다.

 

이를 편히 할 수 있도록 NAT instance 를 위한 AMI 가 존재하며 이를 사용하면 된다.

 

NAT instance를 알아보기 위해 AWS 메뉴얼을 보다보면 재미난 걸 발견하게 된다.

NAT instance 쓰지 말고 NAT gateway 써! 라고 말하고 있다

어쩄든 NAT gateway와 기능적으로 별반 다를게 없는게 NAT instance 다.

 

public zone 에 리눅스를 설치하고 몇 설정을 한 후 instance 설정을 통해 패킷이 전달 될 수 있도록 하면 끝이다.

 

물론 라우팅 테이블도 필요하겠지.

 

NAT gateway 를 사용할 때에는 public zone 에 있던 NAT gateway 는 public subnet 의 0.0.0.0/0 internet gateway ID를 사용하면 됩니다.

 

private zone 에 있는 EC2는 0.0.0.0/0 을 NAT gateway ID를 사용하도록 하면 되었다.

 

NAT instance 도 완전히 같다.

 

public zone 은 건드릴 부분이 없고, private subnet 을 NAT gateway ID가 아닌, public zone 에 있는 EC2를 0.0.0.0/0 EC2 ID 로 라우팅을 해주면 됩니다.

 

1. public zone 에 EC2(NAT instance) 만든다.

2. 보안 그룹에 private zone에서 들어오는 443,80 에 대한 inbound 를 추가 한다.

3. iptables 명령어를 통해 NAT(SNAT) 기능을 사용한다.

아래는 AWS에서 나오는 패킷 전달을 위해 필요한 명령어 가이드 다.

sudo sysctl -w net.ipv4.ip_forward=1
sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo yum install iptables-services
sudo service iptables save

4. EC2(NAT instance)의 소스/대상확인을 중지 한다. (아래는 AWS의 가이드다)

  1. NAT 인스턴스를 선택하고 [작업(Actions)], [네트워킹(Networking), [소스/대상 확인(Change source/destination check)]을 선택합니다.
  2. 소스/대상 확인이 중지되었는지 확인합니다. 그렇지 않은 경우 [중지(Stop)]를 선택합니다.
  3. Save를 선택합니다.

**NAT instance 자신과 관련 없는 패킷이 drop 된다면 private 의 패킷이 외부로 전달되지 않는다. 이를 막기 위해 소스/대상 확인 기능을 중지 한다.

 

5. private zone에 EC2를 만든다

6. private zone에서 외부와 통신을 하는지 확인해 본다.(ex: curl google.com, yum update)

 

NAT instance는 EIP 뿐만 아니라 자동 할당되는 public IP도 사용 가능하다.

 

그런데 왜 같은 기능을 하는 NAT instance를 사용하지 말고 gateway를 사용하라는 것일까?

 

그것은 성능에 대한 문제다.

 

NAT instance는 말그대로 instance다 EC2의 스펙을 따라간다. 

 

네트워크 패킷을 처리하기 위해서는 memory 와 CPU에 영향을 준다.

 

micro spec으로 NAT instance를 사용하게 된다면 1Gbps 의 NIC 속도와 매우 적은 memory, CPU의 맛을 봐야 한다.

 

이는 많은 private subnet의 EC2를 관리하기엔 네트워크 속도의 한계와 서버 성능으로 인해 성능 감소가 예견되어 있다.

 

그래 그럼 네트워크 속도도 높고, 성능도 뛰어난 instance를 만들면 된다. 돈을 투자하면 결국 해결 된다.

 

그런데 단순히  NAT를 하기 위해서 그 비싼 돈을 지불해야할까?

 

게다가 instance 관리 포인트가 하나 더 늘어나는데도 말이다.

 

물론 고객의 상황이나 요구사항에 따라 NAT gateway, NAT instance를 선택하는 것은 매우 좋은 서비스 제공임에는 확실하다.

 

그럼에도 NAT instance를 사용하도록 만들었던 AMI도 종료하고, NAT gateway 로 서비스 이관을 권유하는데에는 그만한 이유가 있을 것 같다.

 

그래도 알아서 나쁠건 없어 보인다.

 

아래의 링크는 NAT gateway vs NAT instance 비교 표이다.

 

https://docs.aws.amazon.com/ko_kr/ko_kr/vpc/latest/userguide/vpc-nat-comparison.html

 

 

 

728x90

'IT > AWS[Amazon Web Service]' 카테고리의 다른 글

[AWS] ENI  (0) 2022.06.22
[AWS] NAT gateway  (0) 2022.06.15
[AWS] VPC public subnet  (0) 2022.06.10
[AWS] VPC 와 private subnet  (0) 2022.06.09
[AWS-network specialty] route 53 트래픽을 분석하고싶오  (0) 2022.06.08