My Dream Being Visualized

[ AWS ] 인터넷게이트웨이(Internet Gateway) 생성 및 라우팅 본문

Programming/Infrastructure

[ AWS ] 인터넷게이트웨이(Internet Gateway) 생성 및 라우팅

마틴킴 2021. 11. 9. 19:06
728x90

 개인 공부를 위한 공간입니다. 틀린 부분 지적해주시면 감사하겠습니다 (_ _)

 

인터넷게이트웨이란?

[AWS 설명]

인터넷 게이트웨이란 VPC와 인터넷 사이에 통신을 가능하게 하는 수평 확장가능한, 중복가능한, 고가용성 VPC 컴포넌트(요소)이다.

[ AWS ] Subnet 생성 및 라우팅 글에서 설명했던,
VPC는 외부 서비스와의 통신이 기본적으로 안되는데, public 서브넷은 Internet gateway를 통해서 외부와의 통신이 가능하다고 했다.

인터넷 게이트웨이는 2가지 용도를 제공한다.

1) 인터넷에 라우팅 가능한 트래픽을 위해 VPC 라우팅 테이블에 있는 타겟을 제공

2) 공인 IPv4 주소가 할당된 인스턴스를 위한 NAT(네트워크 주소 변환기)를 수행

더 쉬운 말로,
1) VPC에 붙어 있는 라우팅 테이블과 외부 인터넷을 연결해주는 통로
    외부인터넷 -> 인터넷 게이트웨이 -> 라우팅 테이블 -> 퍼블릭 서브넷 -> 인스턴스
    (물론 보안그룹은 잠시 제외하였다.)
2) NAT은 IPv4 주소 부족 문제를 해결하기 위해서, 사설 IP주소를 사용하면서 공인 IP주소와 상호변환 할 수 있도록 함
    (사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위함)

인터넷 게이트웨이는 IPv4와 IPv6 트래픽을 지원한다.

인터넷 게이트웨이는 네트워크 트래픽에 가용성 위험성과 대역폭 제한을 야기하지 않는다.

계정에 인터넷 게이트웨이를 두는 것으로 추가적인 비용이 들지 않는다.

 

VPC 내 서브넷 내에 존재하는 인스턴스들을 위한 인터넷에(혹은 으로부터) 연결을 허용하기 위해, 아래 항목들이 충족되어야 한다.

  • 인터넷 게이트웨이 생성 및 VPC에 붙이기
  • 인터넷 접속 트래픽을 인터넷 게이트웨이로 전달하는 서브넷의 라우팅 테이블에 라우팅하기
  • 서브넷 내에 존재하는 인스턴스들이 유니크한 IP 주소(공인 IPv4 주소, 탄력적 IP 주소 혹은 IPv6 주소)를 갖게 하기
  • 네트워크 허용 리스트 및 보안 그룹 규칙이 인스턴스로(혹은 으로부터) 관련된 트래픽이 오갈 수 있게 허용한다.
위에 설명했던대로,
인터넷 게이트웨이 -> 서브넷에 붙어 있는 라우팅 테이블 적용
보안그룹 셋팅 적용!
(보안그룹 셋팅에는, 아래를 지정할 수 있다.)
  1) VPC과 관련된 보안인 ACL
  2) 인스턴스와 관련된 보안인 Security Group
(향후 다시 다뤄보도록 한다.)

 

인터넷 게이트웨이와 연결된 라우팅 테이블과 연결된 서브넷이 있다면, 그건 public 서브넷이다.

인터넷 게이트웨이와 연결되지 않은 라우팅 테이블과 연결된 서브넷이 있다면, 그건 private 서브넷이다.

이전에 몇번이나 설명했듯이,
VPC 내부에는 public 서브넷과 private 서브넷이 존재하는데 (VPN-only 서브넷 제외)
인터넷과 통신하는 서브넷은 public 서브넷, 인터넷과 통신하지 않는 서브넷은 private 서브넷!

public 서브넷의 라우팅 테이블 내에, not explicitly IP(IPv4: 0.0.0.0/0, IPv6: ::/0)인 모든 경로를 인터넷 게이트웨이를 위한 루트로 명시할 수 있다.

Public 서브넷용 라우팅 테이블

말이 정말 어려운데,
특정 IP가 아닌 모든 인터넷 엑세스인 0.0.0.0/0(IPv4 주소)과 ::/0(IPv6)를 인터넷 게이트웨이'로' 라우팅을 해줄 수 있다.
(위 그림 참조!)

IPv4를 위한 인터넷 연결을 가능하게 하려면, 인스턴스는 공인 IPv4 주소 혹은 사설 IPv4와 관련이 있는 탄력적 IP 주소를 가지고 있어야 한다. 인스턴스는 VPC와 서브넷 내에 정의된 사설(내부) IP 주소 공간만을 인식한다. 인터넷 게이트웨이는 인스턴스를 위해서 일대일 NAT을 제공하기 때문에, 트래픽이 VPC 서브넷 공간을 떠나 인터넷으로 갈 때, 응답 주소 필드는 사설 IP 주소가 아닌, 공인 IPv4 주소 혹은 인스턴스의 탄력적 IP 주소로 설정된다. 역으로, 인스턴스의 공인 IPv4 주소나 탄력적 IP 주소로 정의된 트래픽은 트래픽이 VPC로 전달되기 전에, 인스턴스의 사설 IPv4로 변환된 지정 주소를 갖게 된다.

번역하기도 까다로웠는데, 까다로운 만큼 이해가 쏙쏙된다.
인스턴스를 만들기 전에 VPC 및 서브넷이 만들어져 있어야 하는데, (이전 글들을 읽었다면 다 만들어져 있을 것이다.)
인스턴스를 만들 때, 만들었던 VPC와 서브넷에 등록하면, 자동으로 공인 IPv4 주소가 지정된다. (Subnet편 마지막에 설정했음)
우선, 공인 IPv4 주소가 할당되어있다.

그렇기 때문에,
외부 인터넷과의 통신을 할 때, 서두에 명시했던대로


(내부 -> 외부) 인스턴스 -> 내부 트래픽 -> public 서브넷 -> 라우팅 테이블 -> VPC -> 인터넷게이트웨이 -> 외부 인터넷
                                                                                                                            (NAT역할: 사설주소->공인주소)
(외부 -> 내부) 외부 트래픽 -> 인터넷게이트웨이 -> VPC -> 라우팅 테이블 -> public 서브넷 -> 내부 인스턴스
                                     (NAT역할: 공인주소->사설주소)


(어.. 뭔가 내가 봐도 잘 정리한거 같다....)

IPv6를 위한 인터넷 통신을 가능하게 하려면, VPC와 서브넷은 당연히 IPv6 CIDR 블록과 연결이 되어 있어야 하고 인스턴스는 서브넷 범위로부터 IPv6 주소가 할당되어 있어야 한다. IPv6 주소는 유니크하며 default로 공인주소이다.

 

그림에 있는 VPC 내부의 Subnet은 public 서브넷이다.

인터넷 게이트웨이로 모든 인터넷 IPv4 트래픽을 가리키고 있는 커스텀 라우팅 테이블과 연결되어 있다.

커스텀이라고 명시된 이유는, public 서브넷이 직접 외부와 통신을 하기 위해 0.0.0.0/0(IPv4)과 ::/0(IPv6)이 인터넷게이트웨이를 연결해주는 작업을 했기 때문에 그런 것 같다.

인스턴스는 탄력적 IP 주소를 갖고 있으며, 인터넷과의 통신을 가능하게 한다.

(AWS 제공 그림)

 

 

 

인스턴스에 공인 IP 주소를 할당하지 않고 인터넷 접근을 허용하려면, NAT devices(NAT gateways, NAT instances인 듯)을 사용해야 한다. NAT devices는 private 서브넷 내에 존재하는 인스턴스를 인터넷과 연결되게 해주나, 인터넷에 있는 호스트가 인스턴스와 연결을 못하게 한다.

저번 시간에 언급했던,
pirvate 서브넷 내에 있는 인스턴스는 외부와 통신을 할 수 없는데 (by default) 이를 가능케 하려면,
(public 서브넷이 NAT 기능을 하는 인터넷게이트웨이와 연결되었던 것 처럼)
NAT devices을 활용해서 외부 인터넷과 통신할 수 있다.

 

인터넷 게이트웨이 생성 및 연결

인터넷 게이트웨이 생성
VPC와 인터넷게이트웨이 연결
VPC 선택 및 인터넷게이트웨이 연결

 

길고 길었지만,
또 한번 더 개념적인 접근을 하며 정리하길 잘했다고 생각한다.
내 자신 화이팅.....

참고:

https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html

 

Internet gateways - Amazon Virtual Private Cloud

If you assigned a public IPv4 address to your instance during launch, then your instance is reachable from the internet, and you do not need to assign it an Elastic IP address. For more information about IP addressing for your instance, see IP Addressing i

docs.aws.amazon.com