카테고리 없음

3. 네트워크(VPC, 서브넷, 터널링)

초코chip 2024. 9. 26. 07:52

네트워킹

  • 전세계 컴퓨터를 연결하여 서로 통신할 수 있도록 하는 방법
  • 네트워킹을 위해 필요한 3가지 요소
    • 페이로드: 편지 내용
    • 주소: 보낸 사람과 받는 사람

+ p.s) text는 트래픽을 감소시키기위해 gzip을 활용해서 압축/해제를 진행

 

 

IP주소

  • 정의: 메시지를 특정 위치로 올바르게 라우팅하기 위한 주소
  • 주소: 8비트(0~255) x 4 = 32비트
  • CIDR 표기법:  /뒤에 숫자 비트만큼 앞에 비트를 고정시키고, 뒤에 비트를 유동적으로 바꾸도록 하는 표기법

즉, 위 표기법에서는 총 256( 2^8 )의 IP주소를 제공 가능하다 

 

 

RFC 1918

주소에 대한 규약 - private ip할당 규악

  • 10.0..0.0 - 10.255.255.255 (10/8 prefix)
  • 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 - 192.168.255.255 ( 192.168/ 16 prefix )

 

DNS 통신 흐름

 

 

 

서브넷

  • 정의: 하나의 네트워크를 논리적인 영역으로 나눈 하위 네트워크
  • 구성: IP 주소 = 네트워크 주소 + 호스트 주소
    • 네트워크 주소: 큰 방의 주소
    • 호스트 주소: 그 네크워크 안에서의 작은 방들의 주소
  • 서브넷 마스크: 서브넷을 나누기 위한 도구 = IP 주소에서 네트워크 부분과 호스트 부분을 구분하는 역할
    • 예: 255.255.255.0 서브넷 마스크 = 네트워크 부분 24비트 + 호스트 부분 8비트

 

AWS VPC

공인 IP 갯수엔 한계가 있고, 외부에서 불리길 꺼려하는 친구들도 있기 때문에 (보안상 취약) 사설 IP(학급 번호) 필요한 것입니다 (VPC 필요한 이유와 동일)

  • VPC는 나만의 네트워크 공간을 만들고, 그 내부를 프라이빗과 퍼블릭 공간으로 나누어 서버나 데이터를 안전하게 보호하고, 필요한 경우에만 외부와 연결할 수 있도록 관리하는 가상 네트워크

배경

옛날에는 그냥 ec2를 생성하면 한 네트워크에 랜덤하게 배치

 

위처럼 구성하면 여러개의 인스턴스를 올릴 때 아래의 고민이 발생

  • 어떻게 애플리케이션 중 일부는 퍼블릭하게 연결하고, 일부는 프라이빗하게 연결할 것인가?
  • 동일한 IP 범위로 클라우드를 어떻게 확장할 것인가?

 

 

서브넷 설정

그래서 나만의 가상 사설 네트워크를 할당 받고, 그 안에서 서브넷을 통해 네트워크망을 분리하자!

  • VPC의 IP 대역: 10.0.0.0/16 = 앞의 16비트를 네트워크 주소로 설정.
    • 즉, 나머지 16비트의 호스트 주소(10.0.0.0 ~ 10.0.255.255)는 같은 네트워크에 속함
  • 퍼블릿 서브넷 IP 대역: 10.0.0.0/24 = 앞의 24비트를 네트워크 주소로 설정
    • 즉, 나머지 8비트의 호스트 주소(10.0.0.0 ~ 10.0.0.255)는 같은 퍼블릭 서브넷에 속함
  • 프라이빗 서브넷 IP 대역: 10.0.1.0/24 = 앞의 24비트를 네트워크 주소로 설정
    • 즉, 나머지 8비트의 호스트 주소(10.0.1.0 ~ 10.0.1.255)는 같은 프라이빗 서브넷에 속함

 

예약된 IP 주소

총 5개의 IP 주소를 에약

VPC의 IP 대역: 10.0.0.0/16

  • 첫번째 주소: 10.0.0.0 -> 네트워크 주소
  • 두번째 주소: 10.0.0.1 -> AWS VPC 가상 라우터 주소
  • 세번째 주소: 10.0.0.2 -> AWS DNS 서버 주소
  • 네번째 주소: 10.0.0.3 -> 향후 사용
  • 마지막 주소: 10.0.0.255 -> 네트워크 브로드캐스트 주소

 

라우트 테이블과 IGW(Internet Gateway)

라우트 테이블

  • VPC를 생성하면 자동으로 가상 라우터가 생성
  • 이 가상 라우터가 라우트 테이블을 가지고 있음
  • 정의: 라우트 테이블은 트래픽의 전송 방향을 결정하는 라우트 관련 규칙을 저장하는 테이블

 

IGW

  • 정의: VPC와 인터넷 간의 연결을 해주는 통로 = VPC에서 인터넷으로 나가는 관문
  • p.s) 프라이빗 서브넷이 맵핑되어 있는 라우트 테이블에서는 인터넷 게이트웨이 설정이 없음

 

 

흐름

  1. 퍼블릿 서브넷의 EC2 인스턴스가 외부 인터넷과 통신하기 위해 데이터를 가상 라우터로 전달
  2. 가상 라우터는 테이블을 참고하여 인터넷 게이트웨이로 향하는 라우트 경로 확인 및 데이터 전송
  3. 인터넷 구간을 통해 사용자에게 연결

 

NAT(Network Address Translation) Gateway

  • 정의: 프라이빗 IP를 퍼블릭 IP로 변환하여 외부 인터넷에 접속할 수 있게 해주는 장치
  • 역할:
    • 프라이빗 IP를 공용 IP로 변환
    • 단방향 연결: 프라이빗 -> 외부 인터넷 통신 방향만 가능 ( 반대 불가능 )
  • 목적:
    • SW업데이트: 프라이빗 서브넷의 인스턴스에서 업데이트가 필요할 때
    • 외부 API 호출: 프라이빗 서브넷의 인스턴스가 외부 API를 호출할 때

 

 

VPC 만드는 단계

  • IP 주소 범위 선택
  • 가용영역별 서브넷 설정
  • 인터넷으로 향하는 경로 만들기 ( 라우팅 테이블 설정 )
  • VPC로부터 트래픽 설정 ( 방화벽 설정 ) - 인바운드

 

 

vpc 네트워크 보안

네트워크 엑세스 제어 목록(ACL)

  • 정의: 서브넷 단위로 작동하는 보안 그룹
  • 특징: stateless
    • 요청과 응답을 따로 처리한다는 의미 = 요청이 허용되었다고 해도 그 응답이 자동으로 허용되는게 아님
    • 요청과 응답에 대해 각각 규칙을 설정해야함

 

보안그룹(Security Group)

  • 정의: 인스턴스 단위로 작동하는 보안 그룹
  • 특징: stateful
    • 요청이 허용되면 그에 대한 응답은 자동으로 허용

 

VPC 고가용성을 위한 구성

  • 고가용성이란?: 서비스가 중단 없이 계속 운영될 수 있도록 하는 것
    • 한 쪽에 장애가 발생하면 다른 쪽에서 서비스를 할 수 있도록 하는 것 ( master - slave )
  • how?: vpc내에 2개 가용영역에 각각 2개의 퍼블릭, 프라이빗 서브넷을 배치 (2 AZ, 4 subnet)

 

 

VPC peering

- **온프레미스 네트워크**(왼쪽)와 **VPC**(오른쪽)를 연결하는 방식으로, 두 가지 옵션이 있습니다:

  1. **VPN**: 인터넷을 통해 암호화된 터널을 이용해 온프레미스 네트워크와 AWS VPC를 연결합니다.

  2. **Direct Connect**: 전용 회선을 통해 더 안정적이고 고속의 연결을 제공합니다.

 

 

하지만 VPN방식은 양방향 IPSec 보안 프로토콜을 사용해 암호화해서 느림 -> 전용회선 쓰자!

- 온프레미스 네트워크의 주소 공간(예: `192.168.0.0/16`)을 AWS VPC의 주소 공간(예: `172.31.0.0/16`)에 연결하는 과정을 보여줍니다.

- **Customer Gateway**(온프레미스 측 라우터)와 **Virtual Gateway**(AWS 측 라우터) 간에 두 개의 **IPSec 터널**이 설정됩니다. 이 터널들은 인터넷을 통해 양쪽 네트워크 간 데이터를 안전하게 암호화하여 전송하는 역할을 합니다.

- "Your networking device"는 고객이 사용하는 네트워크 장비를 의미하며, VPN 연결 설정 시 중요한 요소입니다.

 

 

 

 

SSH 터널링

  • 정의: public subnet에 있는 Bastion Host를 통해 Private Host로 접속하는 방법
    • Bastion Host: 퍼블릭 IP 주소를 가진 인스턴스를 통해, 내부 퍼블릭 IP가 없는(프라이빗 IP만 있는) 인스턴스에 접근하도록 도와주는 문지기

 

명령어 구조

 

네트워크 최종!

  • VPC: AWS 클라우드에서 가상 사설 네트워크 범위를 설정
  • IGW를 통해 내부(서브넷 범위)의 요청이 아닌 외부의 요청을 양방향으로 연결
    • Public 라우팅 테이블에 IGW를 저장
  • NAT 게이트웨이를 통해 프라이빗 서브넷에서 외부로 나가는 요청을 단뱡향으로 연결
    • Elastic IP 주소를 할당받아 외부로 요청을 보낼 수 있게 설정
    • NAT 게이트웨이는 public 서브넷에 위치시키고
    • Private 라우팅 테이블에 NAT를 저장
  • 라우터: 이렇게 설정한 라우팅 테이블 정보를 기반으로, 라우터를 통해 요청을 적절한 위치로 전송
  • NACL: 서브넷 수준에서 네트워크 트래픽을 제어하는 인바운드와 아웃바운드 규칙을 설정합니다. ( 인가 과정 )
  • Security Group: 인스턴스 수준에서 네트워크 트래픽을 제어하는 인바운드와 아웃바운드 규칙을 설정합니다. ( 인가 과정 )

이러한 과정을 통해 VPC내 외부 사용자와의 상호작용은 퍼블릿 서브넷의 인스턴스로만 소통하고, 프라이빗 서브넷의 인스턴스들은 VPC 내의 인스턴스들을 통해서만 접근 가능하게 설정할 수 있음 ( 보안성 )

또한,프라이빗 서브넷의 인스턴스에서 SW업데이트나 외부API요청이 필요할 때 NAT 게이트웨이를 통해 이용할 수 있다.

 

 

 

참고

https://www.youtube.com/watch?v=R1UWYQYTPKo

 

 

https://velog.io/@yenicall/AWS-VPC의-개념

 

[AWS] VPC의 개념

1. Virtual Private Cloud (VPC) 개념 ✅ Amazon VPC AWS(Amazon Web Services)의 전체 인프라스트럭처는 보안 시설로서 클라우드에서 실행되는 사용자의 모든 자원은 높은 보안성을 보장받을 수 있다. 이는 기본

velog.io