서브넷,라우팅 그리고 AWS

구환준/모건·2023년 11월 2일

UMC-5th

목록 보기
5/10

사진이 원활히 들어가지 않는 점 양해 부탁드립니다. 앞으로는 노션 페이지 복붙안하고 제대로 쓸게요 ㅠ

사전 지식

서브넷

큰 네트워크를 작은 네트워크 단위로 나눈 것

서브넷 마스크

IP주소의 네트워크 ID와 호스트 ID를 분리해줌!

예를 들어, 255.255.255.0은 처음 세 옥텟은 네트워크를, 마지막 옥텟은 호스트를 식별하는 데 사용

→ 이렇게 분리해주는 것을 서브네팅

IP주소를 대역에 따라 나눈 IP클래스 라는게 있는데, 각 클래스에는 기본 서브넷 마스크가 있다

IP주소와 기본 서브넷 마스크를 AND 연산한 결과 = 네트워크 ID

이때 서브넷 마스크의 Network ID부분은 1이 연속적으로 있어야 하고 Host ID부분은 0이 연속적으로 있어야 한다. → 이게 무슨말일까요?

서브네팅

원본 네트워크를 여러개의 서브넷으로 분리하는 과정

서브넷 마스크의 bit 수를 증가시키는 것!

예를 들어 C클래스인 192.168.32.0/24를 서브넷 마스크의 bit수를 1 증가시켜서 192.168.32.0/25로 변경해보자

  1. 우선 192.168.32.0/24는 24개의 비트로 네트워크를 나타내고 나머지 8개 비트로 호스트를 나타내므로 할당 가능한 호스트의 수는 2^8-2=254개
    첫번째는 네트워크 주소이고, 마지막은 브로드캐스트 주소(네트워크 내의 모든 디바이스에 데이터를 전송하기 위한 특별한 IP 주소)라서 제외
  2. 서브넷 마스크의 비트 수를 1증가시켜서(서브넷팅) 192.168.32.0/25로 변경하게 되면 네트워크ID부분: 24비트 → 25비트 호스트ID 부분: 8비트 → 7비트
  3. 할당 가능한 네트워크 수 → 2개로 증가 & 각 네트워크(서브넷)당 할당가능한 호스트수는 2^7-2 = 126개로 감

라우팅

라우팅(Routing)이란, 패킷에 포함된 주소 등의 상세 정보를 이용하여 목적지까지 데이터 또는 메세지를 체계적으로 다른 네트워크에 전달하는 경로 선택하여 스위칭하는 과정

→ 데이터의 목적지가 어디인지 확인하여 빠르고 정확한 길을 찾아 전달해주는 것

CIDR(Classless Inter-Domain Routing)

네트워크 정보를 여러개로 나누어진 Sub-Network들을 모두 나타낼 수 있는 하나의 Network로 통합해서 보여주는 방법

서브네팅 ⊂ CIDR 관계

AWS에서는 서브넷을 CIDR이라 부른다

AWS

리전과 가용영역

리전: 대규모의 서버 컴퓨터를 모아 둔 곳

가용영역: 리전을 한번 더 분산해서 배치한 것

VPC(Virtual Private Cloud)

AWS에서 제공하는 가상의 개인 네트워크 서비스(사설 IP 사용)

사용자는 VPC를 사용하여 AWS 클라우드의 격리된 부분에서 네트워크를 정의하고, 생성할 수 있으며, 이 네트워크 내에서 EC2 인스턴스 같은 AWS 리소스를 배포하고 실행할 수 있다

VPC 자체에서도 서브넷을 사용한다
→ 주의! VPC의 서브넷 아이피 대역에서는 실제 네트워크와 달리, 총 5개의 아이피 주소를 호스트에 할당 할 수 없다(1~5번째)

⭐ **VPC 내부적으로 라우터가 있고, 그렇다면 VPC 내부 서브넷끼리 통신이 가능하다!!!**

Public Subnet

VPC 서브넷 중 외부와 통신이 원활하게 되는 서브넷 대역

인터넷 게이트웨이를 통해 밖으로 나가도록 라우팅 테이블 설정을 해줘야한다

Private Subnet

외부와 단절된 서브넷 대역

**보안성 강조(포트포워딩)**

  • Bastion 호스트: Private Subnet 속 자원에 접근하는 것을 도와주는 Public Subnet의 호스트

실습

실습 1 VPC를 이용한 EC2 ~ 실습 4 - 탄력적 IP 설정하기까지

  • 실습4-1~ 실습5는 숙제 ㅎㅎ

실습 1 - VPC를 이용한 EC2 구축

  • VPC를 이용한 EC2 구축
    1. AWS에 로그인 후(교육용 계정 말고…) VPC를 검색한다 - 체크 리스트 참고!

      Untitled

    2. VPC 생성에 들어와서 VPC등 말고 VPC만을 선택하고 아래 사진처럼 설정한다.

      1. AWS는 이름 지을때 띄어쓰기, 한글(아 왜)을 싫어하니 띄어쓰기는 -(하이픈)를
        사용해주세요.
      2. IP 대역은 10.0.0.0/16으로 하면 되고 앞으로 VPC는 계속 이 대역을 쓰면 됩니당 >.0
      3. 태넌시는 건들지 말구, 태그도 그냥 그대로 두세요

      Untitled

    3. 이제 서브넷을 만들 차례! 옆에 사이드 바에서 서브넷을 찾아주세요.
      이후 서브넷 생성으로 가주세요!

      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/0314e979-d141-4c27-81f8-bcde456d3ffd/Untitled.png)
    4. 아래 사진처럼 서브넷을 생성합니다.

      1. VPC를 방금 만든 VPC로 선택해주세요
      2. 서브넷 이름은 저처럼 temp 이런거 말고 의미 있는 이름으로 해주시고
      3. CIDR은 10.0.1.0/24로 해주세요!
        1. 서브넷을 이어서 만들 때 10.0.2.0/24, 10.0.3.0/24 … 이렇게 해주세요!

      Untitled

    5. 이제 인터넷 게이트웨이를 만들 차례입니다!

      Untitled

    6. 인터넷 게이트웨이는 그냥 이름만 정해주면 됩니다.

      1. 보통 인터넷 게이트웨이는 IG로 줄여서 부릅니다

      Untitled

    7. 이제 인터넷 게이트를 만들었으니 내버려두면 안되고 VPC에 연결을 해줍니다!

      1. ❗주의❗ 리전은 버지니아 북부 이런 곳 말고 서울로 해주세요!

      리전설정.png

    8. 아까 만들었던 VPC에 연결을 합니다.

      Untitled

    9. 이제 다음으로 라우팅 테이블을 수정 합니다. (참고 내용)
      [VPC > 라우팅 테이블]을 보시면 아래 사진을 확인할 수 있습니다.
      1. 위에서 제가 말했듯이 public subnet은 외부로 나갈 때,
      IG로 거치게 한 라우팅을 서브넷에 연결해주면 public subnet이 됩니다!
      2. 라우팅 테이블은 VPC를 만들면 자동으로 만들어집니다! 우리는 수정만 하면 됩니다!

      ![라우팅 테이블 수정.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/c87f37b7-06d9-4aeb-951a-a0a68b7e445c/%EB%9D%BC%EC%9A%B0%ED%8C%85_%ED%85%8C%EC%9D%B4%EB%B8%94_%EC%88%98%EC%A0%95.png)
    10. 위 사진을 보시면 라우팅 테이블에 외부로 나가는 설정이 없는 것을 확인 가능합니다!

      1. 이제 우측 위에 라우팅 편집을 통해 편집을 해주세요

      Untitled

    11. 위 사진처럼 0.0.0.0/0(외부 아이피 대역)이 목적지일 때, 인터넷 게이트웨이로 나가도록 설정을 해주면 됩니다!

      Untitled

      Untitled

    12. 이제 외부로 나가도록( = 외부와 통신이 가능하도록) 설정이 된 라우팅을 서브넷에 연결해주면, 해당 서브넷은 이제 퍼블릭 서브넷이 됩니다!

      Untitled

    13. 이제 해당 라우팅 테이블을 원하는 서브넷에 연결을 해줍니다!

      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/94fbe1fd-2a7f-4b4b-9339-06da1da720e9/Untitled.png)

      ~VPC의 기본적인 설정 끗~

      마지막으로 2가지 개념만 익히면 VPC에 EC2를 만들 준비가 끝나게 됩니다!

실습 2 - 보안 그룹 생성하기

  • 보안 그룹 생성하기 이제 보안그룹을 생성해봅시다! 빠밤 Untitled 보안그룹은 아래 사진처럼 인바운드를 설정해주면 됩니다! 소스의 경우, IPv4로 설정하시면 됩니다! Untitled 당연하게도, VPC는 만들었던 VPC를 선택 해줘야 합니다.
    기본으로는 Default VPC가 되어있으니 꼭 내가 만든 VPC를 선택해야 합니다!

실습 3 - EC2 생성하기

  • EC2 생성하기
    1. 서울 리전인 것을 확인하고 EC2를 검색해 위 사진의 우측 위에 새 인스턴스 시작을 눌러주세요

      Untitled

      Untitled

    2. 이름을 정한 후, EC2의 운영체제를 선택합니다.

      1. Ubuntu 20.04 또는 Ubuntu 18.04를 추천합니다.
        구글링 시 정보가 많이나와요! (*・ω・)✎

      Untitled

    3. 인스턴스 유형은 t2.micro t3.micro 등 micro 유형이 프리티어가 되니 micro를 선택해주세용

      Untitled

    4. 이제 키 페어를 선택 후 (없으면 만들면 됩니다! 키페어 생성 누르고 이름만 원하는 이름으로 한 뒤, 나머지 설정은 기본으로 두세용)
      네트워크 설정에서 편집을 누른 뒤 위 사진처럼 해주세요!

      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/7fd0dbc8-2337-4346-9f2e-a9e11c3edd52/Untitled.png)
      
      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/ef07919d-4391-4986-b36c-a76c577d9cb2/Untitled.png)
    5. 이제 생성을 해주시면 됩니다. 생성 끗!

실습 4 - 탄력적 IP 설정하기

  • 탄력적 IP란? 탄력적 아이피는 인스턴스의 IG를 거쳐 통신 시 부여받을 아이피 주소를 고정시켜 인스턴스가 종료 된 후 다시 실행될 때 아이피 주소가 바뀌지 않게 해줍니다! 우선 위 사진에서 퍼블릭 IP를 자동 할당을 했기 때문에 아래와 같이 아이피 주소가 할당된 것을 볼 수 있습니다. Untitled 이 때, EC2를 중지 후 재실행을 하면 아이피 주소가 바뀝니다! 만약 실제 서비스를 EC2를 통해 제공하고 있었을 때, 아이피 주소가 바뀌게 된다면 많은 혼란이 생깁니다. 따라서 EC2가 꺼지더라도 아이피 주소가 바뀌지 않도록 탄력적 IP를 연결해주는 것이 필요합니다
  • 탄력적 IP 설정 EC2 메뉴에서 좌측 사이드바에서 탄력적 IP를 찾아서 이동해주세요 Untitled 이렇게 탄력적 아이피를 기본 설정을 아무것도 건드리지 않고 할당을 해주시면 됩니다! Untitled 이제 만들어진 탄력적 아이피를 연결 해주시면 됩니다. Untitled 이렇게 탄력적 아이피를 연결하고 싶은 인스턴스를 선택 후 연결을 선택해주세요

실습 4-1 - 원격 접속 - IntelliJ (SpringBoot)

  • 원격 접속 - IntelliJ SpringBoot 파트는 Putty 보다는 IntelliJ를 통해 원격접속 하시는 것이 편리하고 좋습니다! 만약 인텔리제이가 설치 되어있지 않다면, 구글링 해서 인텔리제이를 설치 한 후 아래 게시글을 참고하여, 돈을 굳히면 됩니다! ★⌒(●ゝω・)b [IntelliJ] IntelliJ 인텔리제이 학생 무료 라이센스 인증 및 신청 방법 이제 인텔리제이가 준비가 되었다는 가정 하에 아래 사진을 따라해주세요
    1. 사진처럼 Browse Remote Host를 선택해주세요

      Untitled

      윈도우… 지만 Mac도 아마 저 사진과 같을겁니다…

    2. 이후 오른쪽에 펼쳐지는 창에서 아래 사진 상의 1. 2.를 클릭한 후 3번 설정을 따라해주세요.
      Host에 연결하려는 EC2의 아이피주소를 기입하고 Username에 ubuntu를 기입하고,
      키 페어로 인증을 선택한 후 컴퓨터 상에 저장된(키 페어 생성 시 저장 됩니다!) 키 페어를 넣습니다.

      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/13630257-198d-4b80-80f6-0aad73169670/3ad1fd98-dc00-4774-ad5a-a121ef1c897c/Untitled.png)
    3. 이제 테스트를 해보고 저렇게 아름다운 녹색이 뜨면 성공!

      Untitled

    4. 거의 다 왔습니다! ദ്ദി ᵔ∇ᵔ )

      Untitled

실습 5(fin) NGINX 설치하고 브라우저에서 접속하기

  • NGINX: 웹 서버, 리버스 프록시 서버, 로드 밸런서, 메일 프록시 서버 등 여러 역할을 수행할 수 있는 강력한 오픈소스 소프트웨어 주요 역할

    1. 웹 서버(Web Server)

    • Nginx는 정적 컨텐츠를 처리하는 웹 서버로서의 역할을 합니다. 사용자의 HTTP 요청을 받아 적절한 웹 페이지를 반환합니다.

      2. 리버스 프록시 서버(Reverse Proxy Server)

    • 클라이언트와 백엔드 서버 사이에 위치하여 클라이언트의 요청을 실제 서버로 전달하고, 서버의 응답을 클라이언트로 반환하는 역할을 합니다.

    • 클라이언트는 실제 서버의 존재를 알지 못하며, 모든 요청과 응답은 리버스 프록시 서버를 통해 이루어집니다.

      3. 로드 밸런서(Load Balancer)

    • Nginx는 로드 밸런싱 기능도 제공하여 여러 백엔드 서버로의 요청을 분산시킵니다.

    • 이를 통해 단일 서버에 가해지는 부하를 줄이고, 웹 애플리케이션의 가용성과 신뢰성을 향상시킵니다.

      4. 메일 프록시 서버(Mail Proxy Server)

    • 메일 전송 프로토콜을 사용하는 클라이언트의 요청을 프록시하는 역할을 수행합니다.

      5. SSL/TLS 터미네이션

    • SSL/TLS 암호화를 처리하며, 클라이언트와의 암호화된 연결을 유지하고 백엔드 서버로의 연결은 복호화된 상태로 유지할 수 있습니다.

      6. 캐시 및 압축

    • Nginx는 캐시 기능을 통해 컨텐츠를 빠르게 제공할 수 있으며, 또한 데이터 압축 기능을 통해 대역폭 사용을 최적화할 수 있습니다.

이제 원격 접속을 한 터미널에서 아래 명령어를 통해 nginx를 설치해주세요

sudo apt update
sudo apt ugrade -y [이거 좀 오래걸림 ꌩ-ꌩ]
sudo apt install nginx -y

Untitled

이제 브라우저에서 EC2 아이피 주소로 접속 시 저 화면이 뜨면 성공입니다!

만약 위 화면이 보이지 않는다면, EC2의 보안그룹에 TCP 80번 포트가 anywhere로 설정이 되어있나 확인해주시고 nginx가 제대로 설치가 되었는지 확인해주세요!

0개의 댓글