[AWS] 인터넷 게이트웨이(Internet Gateway) 및 라우트 테이블(Route Table)
인터넷 게이트웨이(Internet Gateway)
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Internet_Gateway.html
인터넷 게이트웨이는 퍼블릭 IP 주소를 지닌 인스턴스를 인터넷과 연결하면, 인터넷에서 들어오는 요청을 수신할 수 있도록 합니다.
기본 VPC는 기본설정으로 인터넷 게이트웨이를 제공하지만 직접 커스텀 VPC를 생성해서 사용하는 경우, 인터넷 게이트웨이도 직접 생성한 뒤 연결해야 합니다. 하나의 VPC에는 단 하나의 인터넷 게이트웨이만 연결할 수 있지만, 여러 개의 인터넷 게이트웨이를 생성한 뒤 여러 개의 VPC를 인터넷으로 연결해서 사용할 수 있습니다.
인터넷 게이트웨이는 인터넷 서비스 제공 업체가 온프레미스에 설치하는 인터넷 라우터(Internet Router)와 유사하지만, AWS에서 제공하는 인터넷 게이트웨이는 기존의 인터넷 라우터와 차이점이 있습니다.
전통적인 네트워크에서는 서버가 인터넷과 연결되도록 하려면, 코어 라우터의 기본 라우트가 인터넷 라우터의 내부 IP 주소를 가리키도록 해야합니다. 반면, 인터넷 게이트웨이에는 IP 주소나 네트워크 인터페이스가 없으며, AWS 리소스 ID를 식별용으로 할당합니다. 이 때 리소스 ID는 'igw-'로 시작하며 그 뒤에 영문 및 숫자 문자열이 옵니다.
인터넷 게이트웨이를 사용하려면 라우트 테이블에 인터넷 게이트웨이를 타겟으로하는 기본 라우트를 생성해야 합니다.
라우트 테이블(Route table)
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Route_Tables.html
VPC 내에서 트래픽의 유입, 유출, 이동을 제어하려면 라우트 테이블(route table)에 저장된 라우트(route)를 이용해야 합니다.
기존의 물리적 혹은 가상 라우터와 달리 VPC 아키텍처는 IP 라우팅을 소프트웨어 함수로 구현한 내재된 라우터(implied router)의 특징을 지닙니다.
이는 VPC에는 인터페이스 IP 주소를 설정할 가상의 라우터도, BGP와 같은 동적 라우팅 프로토콜도 없다는 의미이며, 사용자는 내재된 라우터가 사용할 라우트 테이블만 관리하면 된다는 의미입니다.
하나의 라우트 테이블에는 하나 혹은 그 이상의 라우트와 최소 하나의 서브넷 연결을 지닙니다. 여러 개의 서브넷에 연결된 라우트 테이블은 전통적인 라우터가 작동하는 방식과 매우 유사하게 작동합니다.
VPC를 생성할 때, AWS는 메인 라우트 테이블이라 부르는 기본 라우트 테이블을 자동으로 생성한 뒤 이를 VPC의 모든 서브넷에 연결합니다. 필요한 경우 커스텀 라우트 테이블을 생성하여 하나 혹은 그 이상의 서브넷에 연결하면 됩니다.
서브넷은 라우트 테이블 연결 없이 존재할 수 없으며, 서브넷을 커스텀 라우트 테이블에 명시적으로 연결하지 않으면, AWS가 암묵적으로 해당 서브넷을 기본 라우트 테이블에 연결합니다.
라우트
라우트는 라우팅 테이블과 연결된 서브넷 내에서 트래픽 유입 및 유출을 결정합니다.
IP 라우팅은 소스 IP 주소가 아닌, 대상 주소 IP 프리픽승 의해서만 라우트 여부를 결정하는 대상 주소 기반 라우팅 기법입니다.
라우트를 생성할 때는 다음 요소가 반드시 설정돼야 합니다.
- 대상 주소 IP 프리픽스
대상 주소(destination)는 CIDR 표기법으로 작성된 IPv4 또는 IPv6 프리픽스여야합니다.
- 타겟 리소스
대상(target)은 인터넷 게이트웨이 또는 ENI 등 AWS 네트워크 리소스여야만 합니다. IP 프리픽스는 타겟으로 사용할 수 없습니다.
모든 라우트 테이블에는 로컬 라우트(Local)가 포함돼 있어서 인스턴스가 다른 서브넷으로 이동해 서로 소통할 수 있도록 합니다. 다음은 CIDR 172.31.0.0/16 인 VPC의 라우트 내역입니다.
대상 주소 | 대상 |
172.31.0.0/16 | Local |
수정이 가능한 라우트로서 동일 VPC 내 인스턴스 간의 소통을 허용합니다. 이외에 다른 IP 프리픽스를 위한 라우트는 없으므로 외부에서 VPC CIDR 범위로 향하는 모든 트래픽은 차단됩니다.
기본 설정 라우트(default Route)
인터넷을 통해 인스턴스에 접근하도록 하려면, 기본 랄우트(default route)를 생성한 뒤 인터넷 게이트웨이로 향하도록 해야합니다. 여기서 기본 라우트는 인터넷 트래픽의 서브넷에 대한 유입 또는 유출 여부를 결정합니다.
기본 라우트를 추가한 라우트 테이블의 표는 다음과 같습니다.
대상 주소 | 대상 |
172.31.0.0/16 | Local |
0.0.0.0/0 | igw-0e538022a0fddc318 |
0.0.0.0/0 프리픽스는 인터넷 호스트를 포함, 모든 IP 주소를 사용한다는 의미이며, 기본 라우트는 항상 이 값으로 설정됩니다.
퍼블릭 서브넷(Public Subnet)이란 인터넷 게이트웨이로 향하는 라우트를 포함한 서브넷이고, 프라이빗 서브넷(Private Subnet)이란 인터넷 게이트웨이를 대상으로 하는 라우트가 하나도 없는 서브넷을 의미합니다.
그렇다면 0.0.0.0/0과 172.31.0.0/16은 중복된 범위가 존재합니다. 이런 경우 어떻게 될까요?
내재된 라우터는 트래픽을 어디로 보낼지 결정할 때 일치도가 높은 범위를 선택하며, 라우터의 순서는 상관하지 않습니다. 예를 들어 198.51.100.50에 보내지는 패킷은 172.31.0.0/16 프리픽스 범위에 포함되지 않고, 0.0.0.0/0 프리픽스 범위에 속하므로 내재된 라우터는 기본 라우터를 이용해서 패킷을 인터넷으로 보내지게 됩니다.
AWS 개발자 문서에는 VPC 당 내재된 라우터는 하나 있다고 설명합니다. 이 때 내재된 라우터는 실제로 존재하는 개별 리소스가 아니라, IP 라우팅 기능을 추상화한 것이고, 라우트 테이블은 하나 이상의 서브넷에 연결된 개별적인 가상 라우터입니다.
AWS의 인터넷 게이트웨이와 라우트 테이블에 대하여 알아보았습니다.