[AWS][Networking][강의노트] VPC 개요

컴퓨터공학/분산시스템

2022. 02. 23.

IP 주소의 할당방식

IP 주소는 Security Group과 VPC 관련 설정에서 많이 볼 수 있다.

CIDR ↔ IPv4 Range 변환 툴

Classless Inter-Domain Routing (CIDR)

CIDR(사이더)란, IP 주소의 할당 방식이다.

CIDR는 IP 주소를 범위로 표현할 수 있다.

  • ww.xx.yy.zz/32 : 어떤 특정 아이피
  • 0.0.0.0/0 : 모든 아이피
  • 192.168.0.0/26: 192.168.0.0 ~ 192.168.0.63 의 64개 아이피

IPv4 주소 형식

BaseIP + SubnetMask

서브넷 마스크의 슬래시 형식

/0 = 0.0.0.0

/8 = 최상위 바이트를 셋하여 255.0.0.0

/16 = 최상위 2바이트를 셋하여 255.255.0.0

...

/32 = 모든 바이트를 셋하여 255.255.255.255

서브넷 마스크 역할

SubnetMask는 네트워크 접두사를 결정한다. 한 IP 주소와 서브넷 마스크를 AND 연산을 하면 네트워크 접두사를 얻을 수 있다.

마스크의 0인 부분만큼 IP를 서브넷에서 사용할 수 있다.

예시의 BaseIP = 192.168.0.0 이라 가정하자.

  • /16 일 경우 하위 16비트가 유휴하므로 2^16=65536 대의 기기가 서브넷에 물릴 수 있다. 192.168.0.0 ~ 192.168.255.255
  • /24 일 경우 하위 8비트가 유휴하므로 2^8=256 대의 기기가 서브넷에 물릴 수 있다. 192.168.0.0 ~ 192.168.0.255
  • /32 는 남는 하위 비트가 없으므로 오직 한 대만 서브넷에 물릴 수 있다. 192.168.0.0

AWS에 사설 네트워크망을 만들자

Virtual Private Cloud (VPC)

VPC IPv4 범위

  • 기본적으로 /12
  • 172.16.0.0 ~ 172.31.255.255
  • 최소 /28
  • 최대 /16

VPC CIDR가 다른 VPC나, 타 네트워크와 충돌되지 않게 설정 유의하자.

Default VPC

AWS 계정이 기본으로 소유하게 되는 VPC

  • 뉴비한테 VPC 설정은 난해하니까 제공됨.
  • 기본 VPC는 www에 열려 있다.
  • EC2 인스턴스 실행 시 기본 VPC 위에 물릴 수 있고
    • 이들은 Private Domain Name 뿐만 아니라
    • Public Domain Name도 할당 받는다.
    → EC2 생성 단계> Default VPC 선택 시> Auto-assign Public IP 옵션이 Enabled 되어있기 때문

Subnets

VPC > Subnets AZ Specific

VPC 안쪽에 서브넷들을 정의할 수 있다.

서브넷을 올릴 특정 AZ를 지정해야 한다.

서브넷의 예약된 주소

예제 서브넷의 CIDR은 10.0.0.0/24 이라 하자.

VPC의 서브넷 주소 중 5개는 AWS가 사용하는 예약 주소이다.

  • VPC의 처음 4개 주소
    • 10.0.0.0 : 네트워크 주소
    • 10.0.0.1 : VPC 라우터
    • 10.0.0.2 : 아마존 DNS와 매핑하기 위한 주소
    • 10.0.0.3 : 미래에 사용
  • 마지막 1개 주소
    • 10.0.0.255 : 네트워크 브로드캐스트 주소인데, VPC엔 브로드캐스트 지원이 없기 때문에 아예 막아 놓은 것이다.

계산: 29개의 가용한 IP 주소가 필요하다면? 서브넷마스크 /27 만으로 충분하지 않다. /26 는 되어야 한다.

Public서브넷, Private 서브넷

  • Public 서브넷
  • 패킷을 IGW로 쏴주는 라우트 테이블을 두고 있다.
  • Private 서브넷
  • 패킷을 웹으로 보낼 수 없고, 수신할 수도 없다.

Internet Gateway

VPC에 달아주는 컴포넌트.

VPC 내의 리소스들이 www와 연결될 수 있게 해준다.

Internet Gateway 특징

  • 수평 확장성 + 리던던시 제공
  • VPC와 IGW는 일대일 관계

Router 연동 필요

  • VPC에 IGW를 달았다고 해서 내부 리소스들이 웹에 연결되기는 불가능하다.
  • Router를 두고, EC2가 쏘는 패킷을 다시 IGW로 쏴서 웹으로 송출토록 해줘야 함.

실습1: VPC 생성 후 IGW 없이 SSH 접속 시도

VPC 생성> 하위에 서브넷 생성> EC2 인스턴스를 해당 서브넷에 올림: Public IP 할당 옵션=Enable> 인스턴스 SSH 접속 시도

오류를 만나야 함.

실습2: SSH 연결 되도록 Router 설정

VPC에 IGW 붙임> Router 만들고 관장할 서브넷과 Association 맺음> Route Tables 수정: VPC 범위가 외 0.0.0.0/0 을 지정하는 패킷을 IGW에 넘겨 밖으로 송출되도록 함.

Private SSH 접근에는 Public 서브넷을 거쳐가자

Private 상태인 서브넷으로는 결국 SSH 접근이 안 된다.

그래서 라우터를 설정해 IGW와 연계되도록 하면 Public 서브넷이 된다. Private 서브넷이라는 개념은 환상인 것일까?

Bastion Hosts 개요

Public 서브넷의 EC2 인스턴스이다.

유저가 Private 서브넷의 다른 인스턴스에 SSH하려면 이 인스턴스에 접속하여야 한다.

시큐리티 그룹 설정

  • Bastion Host
    • Inbound: 유저 IP에 대해 22 포트 허용
  • Instances in private subnets
    • Inbound: Bastion Host SG에 대해 22 포트 허용

Network Address Translation (NAT) 인스턴스

Private 서브넷에 있는 인스턴스가 웹 상의 어떤 서버랑 불가피하게 패킷을 송수신 해야한다.

Private 상태를 유지하려면 중간에 프록시처럼 동작하는 서버가 필요하다.

NAT 인스턴스 개요

Public 서브넷에서 패킷을 중계하는 EC2 인스턴스.

  • Source Destination Check 옵션을 꺼야한다.
  • Elastic IP를 붙여야 한다??

Private 서브넷에 붙은 라우터는 웹 서버를 지정하는 패킷을 NAT 인스턴스로 보낸다. 인스턴스는 이것을 다시 웹 서버로 전달한다.

[메시지] Private 인스턴스 -> NAT 인스턴스
Src: 10.0.0.20 # private 인스턴스 주소
Dest: 50.60.4.10 # 웹에 있는 타겟 주소

[메시지] NAT 인스턴스 -> 타겟 웹 서버
Src: 12.34.56.78 # NAT의 퍼블릭IP 주소
Dest: 50.60.4.10 # 웹에 있는 타겟 주소

[메시지] 웹 서버 -> NAT 인스턴스
Src: 50.60.4.10 # 웹에 있는 타겟 주소
Dest: 12.34.56.78 # NAT의 퍼블릭IP 주소

[메시지] NAT 인스턴스 -> Private 인스터턴스
Src: 50.60.4.10 # 웹에 있는 타겟 주소
Dest: 10.0.0.20 # private 인스턴스 주소

인스턴스 만들기

미리 정의된 AMI가 있다. 가져다 쓰자.

단점

  • 가용성이 부족하다.
  • 가용성을 추가하기 위해 ASG 등의 설정해야 할 것이 많다.
  • Deprecated 되었다.

실습3: Private 인스턴스의 핑 대신 전달해주기

NAT 인스턴스 생성> L3 라우터 설정: Private 리소스가 보내는 패킷을 NAT 인스턴스로 라우팅> NAT 인스턴스 SG설정: icmp 프로토콜에 대해 인바운드 허용.

icmp는 L3 수준이므로 SG가 프로토콜 수준에서 거른다. 포트 개념(L4) 없다.

NAT Gateway

NAT 인스턴스보다 나은 솔루션

  • 가용성
  • 멀티 AZ 원한다면 당신이 여러 게이트웨이를 셋업해야 함.
  • 고대역폭
  • 유료 서비스
  • 관리해야 할 SG가 없음

NAT 게이트웨이 개요

  • NAT 인스턴스처럼 한 AZ에 배치되며, Elastic IP가 부여된다.
  • 다른 서브넷 인스턴스에 한해 프록시 역할을 해 준다. 동일 서브넷 인스턴스는 NAT 게이트웨이를 쓰면 안 되고 스스로 인터넷에 연결해라.

VPC에서 DNS 서비스 받기

Domain Name을 타겟으로 하는 패킷은 결국 특정 IP로 향해야 하는데, VPC와 서브넷 내부 인스턴스들은 어떻게 DNS 서비스를 받고 있나요?

enableDnsSupport 옵션

  • 기본값 True
  • 옵션이 True이면 Route53 DNS 리졸버의 서비스를 받을 수 있다. 마치 리졸버가 VPC 내에 있는 것처럼 생각하면 무방하다.
    • 169.254.169.253 : Route53 DNS 리졸버
    • 서브넷 시작 주소 + 2: 똑같이 DNS 리졸버로 향하는 예약 주소

옵션 쓰기 싫으면

VPC 내에 커스텀 DNS 서버를 두어야 한다.

enableDnsHostnames 옵션

  • 기본값
    • Default VPC: True
    • Others: False
  • Public 서브넷의 인스턴스에게 퍼블릭 도메인 이름을 제공해 준다.
  • 사설 도메인 이름은 옵션 관계 없이 항상 제공된다.

두 옵션이 중요한 이유

VPC를 Route 53의 사설 호스팅 존 묶어서 내부 자원들에게 사설 DNS 이름을 만들어 주려 한다면, 두 가지 옵션을 모두 켜줘야 한다.