
우선 이렇게 VPC를 만들었다.
1. public subnet 생성

방금 만든 VPC에 public subnet을 생성한다.
public 서브넷은 10.0.1.0/24, private은 10.0.2.0/24로 네트워크 영역을 분리할 것이다.
2. private subnet 생성
private subnet도 동일한 방식으로 만들어준다.(서브넷 cidr 블록만 다르게)
test-internet-gateway라는 이름으로 IGW 생성했다.
다음 단계를 Public subnet 대역을 실질적으로 public으로 설정하기 위한 작업이다.(라우팅 테이블 설정)

그리고 VPC에 연결해야 함
우선 라우팅 테이블을 생성해준다. (라우팅 테이블은 서브넷 단위!)


위와 같은 설정을 추가해서, 0.0.0.0/0(외부)로 나가려는 것들은 모두 IGW를 거치도록 설정해준다.
원래는 0.0.0.0/0이 아니라 public subnet의 주소블록을 쓰는 건 줄 알았는데, 생각해보니까 내가 할당받은 건 사설 ip 대역이지, 실제 IP가 아니기 때문에 말도 안 되는 생각이란 걸 깨달음.
외부에서 들어오는 건 실제로 할당 받은 하나의 IP가 있어야 가능한거임.
IGW에서 하는 것이 아님~
라우팅 테이블은 연결된 서브넷에서 나가는 패킷의 목적지에 따라 어디(다음 홉)로 보낼지 결정하는 규칙이다.
따라서 위에서 내가 했던 건 라우팅 테이블에 대해 제대로 이해하지 못해서 했던 생각임.
private의 외부 접근을 위한 NAT Gateway를 생성해야 한다.
이 때 NAT의 위치는 Public Subnet으로 두어야 한다. 왜일까?
이걸 이해하기 위해 NAT의 동작 원리를 다시 한번 보겠다.
NAT는
Private 인스턴스가 인터넷으로 나갈 때
사설 IP → 공인 IP로 변환해주는 장치
예:
Private EC2 (10.0.2.15)
↓
NAT Gateway (3.3.3.3)
↓
Internet
① Private EC2가 외부 API 호출
출발지:
10.0.2.15:54321
② NAT가 변환
3.3.3.3:40001
(자기 공인 IP로 바꿈 + 포트도 바꿈)
③ 응답이 돌아옴
Internet → 3.3.3.3:40001
NAT는 매핑 테이블 보고:
→ 10.0.2.15:54321
으로 다시 전달
NAT가 제대로 동작하려면:
그래서 NAT는 반드시 Public Subnet에 둬야 함
❌ 만약 NAT를 Private Subnet에 둔다면?
그 Subnet은 IGW 라우트가 없음.
그럼 NAT는 사설 IP 변환은 가능해도 인터넷으로 못 나감
→ 의미 없음

따라서 이처럼 내 public subnet 영역에 NAT gateway를 생성해줬다.
참고로 EIP를 할당받아야 NAT를 사용할 수 있다! 왜냐하면 내 사설 IP -> 공인 IP로 바꿔야하니까 NAT의 공인 IP가 있어야 함.

위와 같이 설정하여 private subnet -> 외부로 나가는 요청은 nat를 거치도록 규칙을 추가한다.

그리고 private 서브넷 연결!
public 라우트 테이블도 public 서브넷에 연결되어있어야 함!
원래는 이제 public EC2, private EC2를 띄워서 여러 테스트를 진행해보려고 했는데

public 인스턴스를 만드는 중에 소스 유형을 내 IP로 하면 대체 '내 IP'는 어떻게 아는거지,,? 하는 의문이 생김.
이에 대한 내용은 따로 글로 정리해보겠다.
우선은 내 IP로 설정하고 넘어가겠다.
private 인스턴스는 아래와 같이 소스 유형을 public sg로 설정했다.

이렇게 하면 실험 준비 완료임!
다음 글부터는 실제로 실험해보면서 더 깊게 공부해보겠다.