일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 테스트코드
- jest
- JavaScript
- axios-mock-adaptor
- VPC
- 리스코프치환원칙
- docker commands
- 도커
- test code
- Unit Test
- 인터넷게이트웨이
- IPv4
- nestjs
- 서브넷
- AWS
- subnet
- forbetterme
- TDD
- mock객체
- jest.fn
- docker
- 라우팅테이블
- TypeScript
- mock함수
- 단위테스트
- parameter group
- javascript unit test
- 의존관계역전원칙
- 미라클모닝
- axios mock
- Today
- Total
My Dream Being Visualized
[ AWS ] 라우팅테이블(Route Table) 생성 및 라우팅 본문
※ 개인 공부를 위한 공간입니다. 틀린 부분 지적해주시면 감사하겠습니다 (_ _)
라우팅테이블이란?
[AWS 설명]
라우팅 테이블(route table)은 서브넷 혹은 게이트웨이를 통해서 네트워크 트래픽이 어디로 향하는지에 대해 결정할 때 사용되는 routes라는 몇가지 룰을 포함한다.
라우팅 테이블은 네트워크 트래픽을 통과시켜주기 위해 서브넷과 게이트웨이를 통과함을 알 수 있다!
라우팅 테이블 개념
라우팅 테이블에 대한 주요 개념이다.
한번 읽어봐도 되며, bold된 것만 읽어도 된다.
- 메인 라우팅 테이블: VPC와 자동적으로 딸려오는 라우팅 테이블. 다른 라우팅 테이블과 분명하게 연결이 된 모든 서브넷을 위한 라우팅을 조정한다.
- 커스텀 라우팅 테이블: VPC를 위해 만든 라우팅 테이블 (기본적으로 생성된 메인 라우팅테이블과 달리 따로 만든 것!)
- 목적지(Destination): destination CIDR인 트래픽을 보낼 IP 주소 범위. 예를들어, CIDR 172.16.0.0/12를 가진 외부 기업 네트워크(external corporate network) -- target보다 큰 개념
- 대상: destination 트래픽을 보낼 게이트웨이, 네트워크 인터페이스(네트워크를 위한 물리 링크 연결, 라우터 같은!) 혹은 연결. 예를들어 인터넷 게이트웨이 -- destination보다 작은 개념
- 라우팅테이블 연결: 라우팅 테이블과 서브넷, 인터넷 게이트웨이 혹은 가상 사설 게이트웨이(virtual private gateway) 사이의 연결
- 서브넷 라우팅 테이블: 서브넷과 연결된 라우팅 테이블
- 로컬 라우트: VPC 내에서 통신을 위한 기본 라우트
- 전파: 라우트 전파는 가상 사설 게이트웨이가 자동으로 라우팅 테이블들에게 라우트를 전파하게한다. 즉, 라우팅 테이블에 수동으로 VPN(가상사설망) 라우트를 입력할 필요가 없다. (ㅜㅜ 무슨 말인지 모르겠다. 다음에 봐야지)
- 게이트웨이 라우팅 테이블: 인터넷 게이트웨이 혹은 가상 사설 게이트웨이와 연결된 라우팅 테이블
- 엣지 연결: 내부로 들어오는 VPC 트래픽을 기기로 라우트하는데 사용하는 라우팅 테이블. 라우팅테이블과 인터넷게이트웨이 혹은 가상사설게이트웨이와 연결하고 VPC 트래픽을 위한 타겟으로서 기기의 네트워크 인터페이스를 명시한다.
- 전송 게이트웨이 라우팅 테이블(Transit gateway route table): 전송 게이트웨이(고객이 자신이 VPC와 온프레미스 네트워크를 단일 게이트웨이에 연결할 수 있도록 지원해 주는 서비스))와 연결된 라우팅 테이블.
- 로컬 게이트웨이 라우팅 테이블(Local gateway route table): AWS Outposts(일관된 하이브리드 환경을 위해 동일한 AWS 인프라, AWS 서비스, API 및 도구를 모든 데이터 센터, 코로케이션 공간, 온프레미스 시설에 제공하는 완전관리형 서비스) 로컬 게이트웨이와 연결된 라우팅 테이블
라우팅 테이블 종류와 어떤 역할을 하는지 정도만 알아두면 될 것 같다. 네트워크 트래픽을 위한 VPC와 게이트웨이 사이에서 통로 역할을 해준다!
VPC는 내제되어 있는 라우터를 가지고 있으며, 네트워크 트래픽이 어디로 향할지를 컨트롤하는 라우팅 테이블을 사용한다. VPC내 각 서브넷은 라우팅 테이블과 필히 연결되어 있어야 하며, 이는 서브넷을 위한 라우팅(서브넷 라우팅 테이블)을 컨트롤한다. 당연히 서브넷과 특정 라우팅 테이블과 연결을 할 수 있는데, 그러지 않으면 서브넷은 메인 라우팅 테이블과 연결된다. 하나의 서브넷은 하나의 라우팅테이블과 연결할 수 있으나, 같은 서브넷 라우팅 테이블과 여러개의 서브넷을 연결할 수 있다.
위에 설명했던대로,
VPC내 서브넷은 내(VPC내), 외부(인터넷) 통신을 위하여 필히 라우팅 테이블과 연결되어야 한다.
보통(?)은 public 서브넷은 인터넷 게이트웨이가 연결된 라우팅 테이블과,
private 서브넷은 내부 통신만 가능한 라우팅 테이블과 연결된다!
테이블 내 각 라우트는 목적지(destination)와 대상(target)을 명시한다. 예를들어, 인터넷 게이트웨이를 통해 서브넷이 인터넷에 접근을 허용하기 위해서는, 왼쪽과 같이 서브넷 라우팅 테이블에 라우트를 등록하면 된다. 해당 라우트에 대한 목적지는 IPv4의 모든 주소를 나타내는 0.0.0.0/0이다. 대상은 VPC에 연결되어 있는 인터넷 게이트웨이이다.
IPv4와 IPv6를 위한 CIDR 블록은 별도로 처리된다. 예를들어, 0.0.0.0/0의 목적지 CIDR을 가진 라우트는 자동적으로 모든 IPv6 주소를 포함하지 않는다. 모든 IPv6 주소를 위한 ::/0 이라는 목적지 CIDR을 라우트에 등록해야 한다.
위에 명시 그리고, 지난 시간([ AWS ] 인터넷게이트웨이(Internet Gateway) 생성 및 라우팅) 편에서 설명한 바가 있다.
public 서브넷과 연결된 라우팅 테이블은 인터넷 게이트웨이를 거쳐야 인터넷 연결이 가능하기에, 라우팅 테이블에 필히 0.0.0.0/0(IPv4) (+혹은 필요하다면, ::/0(IPv6))를 인터넷 게이트웨이와 연결해야 한다.
모든 라우팅 테이블은 VPC내 통신을 위하여 로컬 라우트를 포함하고 있다. 이 라우트는 모든 라우팅 테이블에 자동 셋팅되어 있다.
만약 VPC가 하나 이상의 IPv4 CIDR 블록을 갖고 있다면, 라우팅 테이블들은 각 IPv4 CIDR 블록을 위한 로컬 라우트를 포함하고 있다. 만약 IPv6 CIDR 블록과 VPC를 연결한다면, 라우팅 테이블들은 IPv6 CIDR 블록을 위한 로컬 라우트를 포함한다. 이러한 라우트를 서브넷 라우팅 테이블 혹은 메인 라우팅 테이블에서 변환하거나 지울 수 없다. 타겟은 NAT 게이트웨이, 네트워크 인터페이스 혹은 게이트웨이 로드 밸런서 엔드포인트여야 한다.
아래 라우팅테이블에, IPv4 CIDR 블록과 IPv6 CIDR 블록을 둘 다 가지고 있는 VPC가 있다고 가정해보자.
- 2번째 줄에 있는 VPC (2001:~~~~/56)내 IPv6 트래픽은 'Local' 이라는 라우트에 의해 다뤄지며 VPC 내부에서 라우팅된다.
- IPv4와 IPv6 트래픽은 각각 다뤄지기에, (VPC내 트래픽을 제외한) 모든 IPv6 트래픽은 egress-only 인터넷 게이트웨이에 라우팅된다.
- 피어링 커넥션(VPC 피어링 서비스를 말하는 듯)을 가리키는 172.31.0.0/16 이라는 IPv4 트래픽을 위한 라우트가 있다.
- 인터넷 게이트웨이를 가리키는 0.0.0.0/0 이라는 모든 IPv4 트래픽을 위한 라우트가 있다.
- egress-only(오직 서버 내부에서 외부로 나가는 트래픽) 인터넷 게이트웨이를 가리키는 ::./0 이라는 모든 IPv6 트래픽을 위한 라우트가 있다.
라우팅 테이블에는,
Local내 서비스(EC2 등)들이 서로 통신을 하기 위해 라우팅 시켜주는 주소(IPv4 & IPv6)와
VPC 피어링(VPC간 통신을 위함), egress-only 인터넷 게이트웨이 그리고 내외부 통신을 가능하게 해주는(public 서브넷과 연결되는) 인터넷 게이트웨이와 연결이 존재한다.
해당 그림은, 인터넷 게이트웨이, 가상 사설 게이트웨이, public 서브넷, VPN-only 서브넷과 연결된 VPC에 대한 라우팅을 보여준다.
메인 라우팅테이블(아래)은 가상 사설 게이트웨이에 라우팅(파란색)이 되어있다.
커스텀 라우팅 테이블(위)은 public 서브넷과 연결(초록색)되어 있다.
VPC에 새로운 서브넷을 만든다면, 트래픽을 가상 사설 게이트웨이로 라우팅하는 메인 라우팅 테이블과 자동적으로 연결된다.
만약 반대로 설정을 한다면(메인 라우팅 테이블이 인터넷 게이트웨이로, 커스텀 라우팅 테이블이 가상 사설 게이트웨이로), 새로운 서브넷은 자동적으로 인터넷 게이트웨이로 연결된다.
각각의 서브넷이 어떤 라우팅 테이블과 연결되어 있는지 보여주고 있다.
한 VPC내 모든 서브넷이 하나의 라우팅 테이블에 연결되어도 되고, 위 처럼 각각 연결되어도 된다.
(그림엔 하나만 그려져있지만, 사실상 2개이며 Local 연결때문에 하나로 그린 듯 하다.)
각각의 서브넷이 가리키는 라우팅 테이블은 당연히 옮길 수 있다!
라우팅테이블 생성 및 적용
우리는 2개의 라우팅 테이블을 생성할 것이다.
1) 로컬 및 인터넷 게이트웨이와 public 서브넷을 연결시켜줄 라우팅 테이블
2) 로컬 (혹은 필요하다면 NAT 게이트웨이)과 private 서브넷을 연결시켜줄 라우팅 테이블
이제, 보안그룹 하나만 남았다!글 그만쓰고 어서 작업 들어가고싶다 ㅜㅜ
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html
'Backend > Infrastructure' 카테고리의 다른 글
[ AWS ] RDS(Relational Database Service) 생성 및 적용 (0) | 2021.11.21 |
---|---|
[ AWS ] ACL 및 보안그룹 비교, 생성 및 적용 (0) | 2021.11.19 |
[ AWS ] 인터넷게이트웨이(Internet Gateway) 생성 및 라우팅 (2) | 2021.11.09 |
[ AWS ] Subnet 생성 및 라우팅 (0) | 2021.11.09 |
[ AWS ] VPC 생성하기 (0) | 2021.11.07 |