클라우드

서브넷과 라우팅 테이블, 퍼블릭을 정하는 한 줄

AWS에는 서브넷을 퍼블릭으로 켜는 설정이 따로 없다.
경로표에 인터넷 게이트웨이로 가는 줄이 있으면 퍼블릭이고, 그 안의 서버가 실제로 인터넷과 통신하려면 공인 주소도 있어야 한다.

이 글의 목차서브넷과 경로표6
  1. 서브넷과 경로표
  2. 퍼블릭 서브넷은 경로표 한 줄로 정해진다
  3. 줄이 있어도 닿지 않는 서버
  4. 기본 VPC에서 그냥 되는 이유
  5. 경로표에 둘 수 있는 줄
  6. 인터넷에서 닿지 않게 두려면

EC2 서버를 퍼블릭 서브넷에 띄웠는데 바깥으로 나가는 요청이 전부 시간 초과로 끝나는 일이 있다.
서브넷 이름에 public까지 붙여 뒀는데도 그렇다.

AWS에서 서브넷을 만들 때 퍼블릭인지 프라이빗인지 고르는 설정은 따로 없다.
그 구분은 서브넷에 붙는 라우팅 테이블(route table)⁠의 한 줄에서 나온다.
아래에서는 경로표라고 부른다.

그 줄이 있어도 서버가 인터넷에 닿으려면 조건이 하나 더 필요하다.

서브넷과 경로표

VPC(Virtual Private Cloud)⁠는 AWS 계정 안에 따로 떼어 받은 사설 네트워크다.
서버는 VPC 안의 한 서브넷에 놓인다.

서브넷(subnet)⁠은 VPC의 주소 범위를 나눈 구획이다.
서브넷 하나는 가용 영역 하나 안에만 놓이고 여러 영역에 걸칠 수 없다.
가용 영역은 서울 리전처럼 한 지역 안에서 서로 떨어져 있는 데이터센터 묶음이다.

경로표는 네트워크로 오가는 데이터 조각인 패킷을 목적지 주소에 따라 어디로 보낼지 적은 표다.
줄마다 목적지 주소 범위와 대상이 적혀 있어서, 이 범위로 가는 패킷은 저쪽으로 보내라는 규칙이 된다.
서브넷 하나는 한 번에 경로표 하나와 연결되고, 경로표 하나는 여러 서브넷이 함께 쓸 수 있다.

VPC 안의 서브넷과 경로표 연결 서브넷은 VPC 주소 범위의 한 구획으로 가용 영역 하나에 놓이고 경로표 하나와 연결되며, 경로표 하나는 여러 서브넷이 함께 쓴다. 개념 도해 VPC 안의 서브넷과 경로표 연결 VPC 주소 범위를 나눈 구획 서브넷 1 서브넷 2 서브넷 3 아직 나누지 않은 범위 가용 영역과 경로표 연결 VPC 가용 영역 a 가용 영역 c 서브넷 1 서브넷 2 서브넷 3 경로표 A local 줄 · VPC 안으로 경로표 B local 줄 · VPC 안으로 서브넷은 VPC 주소 범위의 한 구획으로 가용 영역 하나에 놓이고 경로표 하나와 연결되며, 경로표 하나는 여러 서브넷이 함께 쓴다. SOSHIN · DEV NOTES
서브넷은 가용 영역 경계를 넘지 않고, 서로 다른 가용 영역에 있는 서브넷 1과 2가 경로표 A를 함께 쓴다.

모든 경로표에는 VPC 안 통신을 위한 local 줄이 기본으로 들어 있다.
여러 줄이 한꺼번에 맞으면 주소 범위가 가장 좁은 줄, 가장 구체적으로 맞는 줄을 따른다.

그래서 바깥으로 가는 줄을 더해도 VPC 안의 주소로 가는 패킷은 범위가 좁은 local 줄에 먼저 걸린다.
서버끼리 주고받는 통신은 그대로 VPC 안에 머문다.

퍼블릭 서브넷은 경로표 한 줄로 정해진다

서브넷의 종류는 경로를 어떻게 두었는지로 나뉜다.
경로표에 인터넷 게이트웨이로 바로 가는 줄이 있으면 퍼블릭, 없으면 프라이빗이다.

인터넷 게이트웨이는 VPC와 인터넷 사이의 통신을 맡는 구성 요소다.
퍼블릭 서브넷의 경로표에는 보통 모든 주소를 뜻하는 0.0.0.0/0을 목적지로, 인터넷 게이트웨이를 대상으로 적은 줄이 들어간다.

이름표는 판정에 영향이 없다.
이름에 public을 붙여도 그 줄이 없는 경로표에 연결돼 있으면 프라이빗 서브넷이다.

목적지 주소에 따른 경로표 대조 결과 VPC 안으로 가는 local 줄은 어느 서브넷에나 있고, 인터넷 게이트웨이로 가는 줄의 유무가 퍼블릭과 프라이빗을 가른다. 개념 도해 목적지 주소에 따른 경로표 대조 결과 경로표 대조 경로 ① 서버의 패킷 ② 목적지 확인 ③ 경로표 대조 가장 구체적인 줄 우선 그 밖의 모든 주소 ④ 0.0.0.0/0 줄의 대상 VPC 주소 범위 안 ④ local · VPC 안 전달 인터넷 게이트웨이 줄 유무별 결과 퍼블릭 서브넷 local 0.0.0.0/0 → 인터넷 게이트웨이 밖으로 나갈 길 있음 프라이빗 서브넷 local 0.0.0.0/0 → 인터넷 게이트웨이 없음 일치하는 줄 없음 VPC 안으로 가는 local 줄은 어느 서브넷에나 있고, 인터넷 게이트웨이로 가는 줄의 유무가 퍼블릭과 프라이빗을 가른다. SOSHIN · DEV NOTES
local 줄은 어느 서브넷에나 있다. 퍼블릭과 프라이빗은 인터넷 게이트웨이로 가는 줄이 있느냐로 나뉜다.

줄이 있어도 닿지 않는 서버

경로가 서브넷의 성격을 정한다면, 그 안의 서버가 실제로 인터넷과 주고받는 데는 조건이 하나 더 있다.
서버의 공인 주소다.
공인 주소와 사설 주소의 차이는 IP 주소 글에서 다뤘다.

서버 자신은 VPC 안의 사설 주소만 알고, 인터넷 게이트웨이가 그 주소를 서버의 공인 IPv4 주소로 일대일로 바꿔 준다.
그래서 지금 널리 쓰는 주소 체계인 IPv4로 인터넷과 통신하려면 서버에 공인 주소가 있어야 한다.

인터넷 게이트웨이로 가는 경로가 없으면 서버에 공인 주소가 있어도 인터넷과 통신할 수 없다.
둘 다 있어야 한다.

두 조건을 정하는 자리가 서로 달라서 실수가 생긴다.
경로는 서브넷의 속성이고, 공인 주소는 서버의 속성이다.

서브넷에는 서버를 띄울 때 공인 주소를 자동으로 붙일지 정하는 설정이 있다.
기본 서브넷은 이 설정이 켜져 있고, 직접 만든 서브넷은 대개 꺼진 채로 시작한다.

경로표를 제대로 고쳐 두고 이 설정을 놓치면, 서브넷은 퍼블릭인데 서버만 바깥에 닿지 않는다.
처음에 본 시간 초과는 이렇게 생길 수 있다.

경로표의 한 줄과 공인 주소, 둘 다 있어야 한다

같은 서버라도 서브넷 경로표의 인터넷 게이트웨이 줄과 서버의 공인 주소에 따라 인터넷에 닿는지가 달라진다.

이 서브넷의 경로표

  • 목적지: VPC 주소 범위 VPC 안의 주소대상: local
  • 목적지: 0.0.0.0/0 나머지 모든 주소대상: 줄 없음

서버의 주소

사설 주소만

프라이빗 서브넷 안

인터넷과 통신

불가

VPC 안 통신은 그대로 가능

경로표에 인터넷 게이트웨이로 가는 줄이 있으면 그 서브넷은 퍼블릭이다. 그 안의 서버가 인터넷과 주고받으려면 공인 주소까지 있어야 한다. 둘 중 하나만으로는 닿지 않는다.

IPv4만 다루고, 보안 그룹과 서브넷 경계의 허용·거부 목록(네트워크 ACL)은 모두 허용한다고 가정한 예시다. NAT 장치와 IPv6 경로는 다루지 않는다.

경로와 주소가 갖춰져도 서버 바로 앞에는 보안 그룹이 남아 있다.
무엇을 들일지는 여전히 그 규칙이 정한다.

기본 VPC에서 그냥 되는 이유

처음 EC2를 쓸 때는 이런 고민 없이도 서버가 인터넷에 닿는다.
계정에 미리 만들어진 기본 VPC에 띄우기 때문이다.
이 기본값에는 내력이 있다.

초기 EC2에서는 모든 서버가 다른 고객과 함께 쓰는 하나의 평평한 네트워크에 놓였고, 서버를 띄우면 공인 주소가 붙었다.
퍼블릭은 처음부터 주어지는 조건이었고, 막는 일은 주로 보안 그룹이 맡았다.

그 뒤 VPC에 인터넷 게이트웨이와 경로표가 들어오면서 어떤 서브넷을 인터넷에 바로 연결할지 고를 수 있게 됐다.
대신 VPC를 쓰려면 서버 한 대를 띄우기 전에 서브넷과 경로표부터 짜야 했다.

2013년 AWS는 새 계정에 기본 VPC를 만들어 주기 시작했다.
가용 영역마다 기본 서브넷을 두고, 인터넷으로 보내는 경로표와 인터넷 게이트웨이를 미리 붙였다.

서브넷마다 공인 주소를 붙일지 정하는 설정도 이때 생겼고, 기본 서브넷에서는 켜 두었다.
옛 EC2의 동작을 VPC 안에서도 지원하려고 두 자리를 다 미리 채워 두었다.

지금도 기본 서브넷은 경로표가 인터넷 게이트웨이로 보내서 퍼블릭이고, 거기서 띄운 서버는 공인 주소도 함께 받는다.
직접 만든 VPC에서는 인터넷 게이트웨이를 붙이는 일부터 두 자리를 모두 직접 채워야 한다.

VPC 종류에 따른 인터넷 연결 기본값 기본 VPC에서 띄운 서버가 바로 인터넷에 닿는 것은 인터넷 게이트웨이와 그 경로, 공인 주소 설정이 미리 채워져 있기 때문이다. 개념 도해 VPC 종류에 따른 인터넷 연결 기본값 인터넷까지의 경로 ① 서버 사설 + 공인 주소 ② 서브넷 경로표 0.0.0.0/0 → 인터넷 게이트웨이 ③ 인터넷 게이트웨이 공인 주소로 변환 인터넷 VPC 종류별 기본값 ① 공인 주소 자동 할당 ② 0.0.0.0/0 줄 ③ 인터넷 게이트웨이 인터넷과 통신 기본 VPC 기본 서브넷 켜짐 있음 연결됨 가능 직접 만든 VPC 직접 만든 서브넷 꺼짐 없음 없음 불가 기본 VPC에서 띄운 서버가 바로 인터넷에 닿는 것은 인터넷 게이트웨이와 그 경로, 공인 주소 설정이 미리 채워져 있기 때문이다. SOSHIN · DEV NOTES
직접 만든 VPC에는 인터넷 게이트웨이와 0.0.0.0/0 줄이 없고, 그 안에 만든 서브넷은 공인 주소 자동 할당도 꺼져 있다.

경로표에 둘 수 있는 줄

서브넷의 바깥 길은 대개 셋 중 하나로 정한다.
이 가운데 NAT 장치는 안에서 나가는 요청의 출발지 주소를 바꿔 내보내고, 그 요청에 돌아온 응답만 들여보내는 주소 변환 장치다.
프라이빗 서브넷의 서버가 인터넷에 나가려면 이 장치가 필요하다.

경로표에 둔 줄열리는 길감수하는 것
인터넷 게이트웨이로들어오는 길과 나가는 길공인 주소가 붙은 서버를 막는 일이 보안 그룹 같은 필터 규칙에만 달려 있다
NAT 장치로안에서 시작한 나가는 길밖에서 오는 연결은 로드밸런서 같은 별도 진입점이 받아야 하고, 장치 요금이 든다
local뿐VPC 안의 길패키지 업데이트나 컨테이너 이미지 내려받기 같은 바깥 호출이 막힌다

하나 더 조심할 것이 메인 경로표다.
경로표를 따로 연결하지 않은 서브넷은 VPC의 메인 경로표를 따른다.
AWS의 경로표 문서는 메인 경로표를 처음 상태로 두고 새 서브넷마다 직접 만든 경로표를 연결하는 것을 VPC를 지키는 한 방법으로 든다.

메인 경로표에 인터넷 게이트웨이 줄을 넣으면, 연결을 깜빡한 서브넷과 앞으로 만들 서브넷까지 한꺼번에 퍼블릭이 된다.

인터넷에서 닿지 않게 두려면

인터넷에서 서버로 바로 들어오는 연결을 막는 자리는 셋이다.
서버에는 공인 주소를 붙이지 않고, 서브넷 경로표에는 인터넷 게이트웨이 줄을 두지 않고, 보안 그룹에는 들일 규칙을 적지 않는다.

이 가운데 한 자리만 막혀 있어도 바깥에서 먼저 거는 연결은 서버까지 오지 못한다.
다만 로드밸런서처럼 중간에서 연결을 받아 넘겨 주는 장치를 두면 앞의 두 자리는 그 장치가 대신 넘는다.
어느 구성에서든 서버 바로 앞에 남는 것은 보안 그룹이다.

실무에서는 이 세 자리를 함께 막아 둔다.
설정 하나를 잘못 바꿔도 나머지 두 자리가 남는다.

AWS의 서브넷 문서도 자원을 보호하려면 프라이빗 서브넷을 쓰고, 그 안의 서버가 인터넷에 나가야 하면 NAT 장치를 거치게 하라고 권한다.

인터넷에 노출하는 로드밸런서는 퍼블릭 서브넷에 있어야 한다.
그래서 웹 서비스라면 로드밸런서는 퍼블릭 서브넷에, 서버와 데이터베이스는 프라이빗 서브넷에 두는 구성이 흔하다.

소신을 상징하는 까마귀 목판화 일러스트
작성자소신 · Soshin

웹과 서버를 만들고, 개발하며 배운 것들을 글로 남깁니다.

좌우로 움직여 보세요