[AWS] AWS에서 네트워크 설계 하는 방법(VPC, Subnet)
IT/AWS

[AWS] AWS에서 네트워크 설계 하는 방법(VPC, Subnet)

반응형

 

AWS에 서버를 생성하여 사용하기 위해서는 일반 온프레미스 환경에서 사설망을 구축하는것과 동일하게 네트워크 설계가 필요합니다.

그래서 오늘은 AWS에 서버를 생성하기전에 어떤 네트워크 지식이 필요한지 알려드리고, 

어떻게 VPC IP대역을 선택할 것인가? 어떻게 Subnet을 나눌 것인가? 에대해 알려 드리겠습니다.

 

 

첫번째 어떤 네트워크 IP대역을 사용할 것인가?

 

혹시 가정에서 인터넷 설치후에 노트북에 랜선을 연결하고 나서 내 IP가 뭔지 확인해본 경험이 있으신가요?

(참고로 내 IP는 윈도우 + R -> CMD -> ipconfig -all 에서 확인이 가능합니다.)

 

인터넷을 사용하기 위해서 각 PC들은 IP라는 고유의 주소가 부여됩니다.

IP란 "서울특별시 서초구 서초동 서초아파트 1동 101호" 와 같이 인터넷을 사용하기 위해 내 PC에 부여되는 고유의 주소라고 보시면됩니다.

 

 IP는 사설IP, 공인IP로 나눌 수가 있습니다. 쉽게 설명드리면 사설 IP는 외부에 공개되지 않는 주소, 공인 IP는 외부에 공개된 주소 라고 할 수 있습니다.

 

사설(privat) IP는 기업 내 인트라넷 또는 가정 내 홈네트워크에 사용하기 위한 IP 입니다. 외부에 IP가 공개되지 않기 때문에 인터넷상에서 검색이나 접근이 불가능합니다. 

가장 일반적으로  예는 아래와 같이 공유기/라우터 등의 장비가 하나의 공인 IP를 할당 받고 NAT방식을 통해 여러 컴퓨터가 나누어 쓰는 방식입니다.

 

 

 

 

사용가능한 사설 IP대역은 아래와 같습니다.

 

Class A : 10.0.0.0~10.255.255.255

Class B : 172.16.0.0~172.31.255.255

Class C : 192.168.0.0~192.168.255.255

 

 

공인(public) IP는 공인기관에서 인증한 IP주소로 전세계에서 유일한한 주소를 말합니다. 전세계적으로 ICANN이라는 기관이 국가별로 사용할 IP대역을 관리하고, 우리나라는 인터넷진흥원(KISA)에서 우리나라 내에서 사용할 공인IP주소를 관리하고 있습니다. 외부에 IP를 공개하기 때문에 외부에서 검색 또는 접근이 가능한 IP 입니다.

 

하용가능한 공인 IP대역은 아래와 같습니다.

 

Class A : 0.0.0.0~127.255.255.255

Class B : 128.0.0.0~191.255.255.255

Class C : 192.0.0.0~233.255.255.255

Class D : 224.0.0.0~239.255.255.255

Class E : 240.0.0.0~255.255.255.255

 

 

 

VPC는 가상의 사설 네트워크 망으로 위에서 설명드린 사설IP대역을 사용합니다. 

 

Class A : 10.0.0.0~10.255.255.255

Class B : 172.16.0.0~172.31.255.255

Class C : 192.168.0.0~192.168.255.255

 

따라서  VPC를 생성하기 전에 내가 어떤 사설 IP대역을 사용할 것인가를 정해야합니다. 이는 현재 몇개의 서버가 필요하며 향후 서버가 얼마나 늘어날 것인가? 를 모두 고려해야합니다.

ex) 192.168.10.0/24

 

여기서 뒤에 /24는 서브넷 마스크를 CIDR로 표기한 것입니다. 

 

* CIDR이란??

https://kim-dragon.tistory.com/m/9

 

만약 VPC를 192.168.10.0/24 로 설정하면 192.168.10.0 ~ 192.168.10.255 까지 총 256개의 IP를 사용할 수 있는 대역을 뜻합니다.

즉, 구축하고자하는 서버의 개수가 256개 이하가 되어야 겠죠.

 

구글링을 해보면 다음과 같이 CIDR을 한번에 계산해주는 사이트가 많습니다. ( https://www.ipaddressguide.com/cidr )

 

자, VPC로 사용할 사설네트워크 대역을 설정하였습니다.

 

 

다음 두번째로는 subnet을 어떻게 나눌 것인가? 입니다. 서브네팅이라고 합니다.

 

서브넷팅이란 IP블록을 더 작은 그룹으로 분할하는 것을 말합니다. 이렇게 서브넷을 나누는 이유는 용도별로 네트워크의 관리적인 측면도 있지만 가장 큰 이유는 보안의 이슈 때문 입니다.

서브네팅을 통해서 VPC안에서도 외부에서 접근가능한 Public subnet, 외부에서 접근이 불가능한 Private subnet으로 구분할 수가 있게 되는것입니다.

 

그러면 어떻게 서브넷을 나누어야 할까요?? 

어떤 용도로 사용할 것인가에 따라 달라지게 되며 정해진 답은 없습니다.

하지만 일반적으로 웹/앱 서비스를 구동하기위한 서버가 필요하다고 한다면 다음과 같이 public subnet 2개, private subnet 4개로 총 6개의 subnet을 사용합니다.

 

아래와 같이 아키텍처를 그릴 수가 있겠네요. 

여기서 Availity zone2개 사용하는 이유는 AWS의 장점인 가용성을 확보할 수 있기 때문이죠.

 

그러면 192.168.10.0/24 을 어떻게 6개로 나눌 수가 있을까요?? 

 

 

위에서 설명드린것처럼 192.168.10.0/24을 해석하면 192.168.10.0 ~ 192.168.10.255 까지 총 256개의 IP를 사용할 수 있습니다.

 

256개를 6개로 나누면 서브넷 하나당 사용할 수 있는 IP는 약 42.67 개 입니다. 이 경우 모두 같은 IP를 정확히 6등분 할 수가 없습니다.

그러면 8개로 나누어 봅시다. 서브넷당 32개로 정확히 8등분을 할 수 있겠죠.

 

32개, 32개, 32개, 32개, 32개, 32개, 32개, 32개

 

위 그림을 보시면 아시겠지만 private subnet1 ,2 가 크기가 더 큽니다. 왜냐하면 일반적으저 이 구간의 서브넷에 서버가 가장 많이 생성할 가능성이 있기 때문이죠.

따라서 6개로 다시 줄여보겠습니다. 

 

32개, 64개, 64개, 32개, 32개 이렇게 하면 서브넷을 6개로 줄일 수가 있겠습니다.

 

그러면 이렇게 나눈 IP대역들을 CIDR표기법으로 표현해보겠습니다. 32는 (2^5)2의 5승, 64는 (2^6)2의 6승 입니다. 32-5 = 27, 32-6 = 26로 각각 27, 26 입니다.

왜 각각이 32-5, 32-6으로 계산이 되는지는 IP와 서브넷마스크를 이해하셔야 합니다.

 

IP로 표현하는 자리수는 4개로 각자리마다 바이트(Byte)로 표현이 됩니다. 

바이트(Byte)는 2의8승으로 0~255까지 표현가능하죠 이게 4개 이므로 2의32승개의 IP를 표현할 수 있게 되는것입니다.

즉, 0.0.0.0~255.255.255.255 까지 표현할 수 있는 IP개수는 2의 32승개 입니다. 

 

서브넷마스크는 허용할 수 있는 IP대역을 정의합니다. 예를들어 서브넷마스크가 255.255.255.255 라는 것은 2의 32승으로 /32로 표현합니다. 이 경우 IP 1개만 사용할 수 있습니다.  

CIDR값이 작을 수록 많은 IP대역을 허용해주게 됩니다.  그러면 허용할 만큼 CIDR값을 줄이면 /32는 1개,/31 는 2개 ,/30 4개,/29 8개,/28 16개,/27 32개로 IP대역을 늘릴 수 있는 것입니다.

이렇게 IP대역 32개를 허용할 수 있는 서브넷마스크는 32-5 = 27 이라는 계산으로 /27이 되는 것입니다. 

 

CIDR이란?

https://kim-dragon.tistory.com/m/9

 

실제로 사용할 IP대역이 32개인 2의 5승 만큼만 사용할 수 있다고하면 그 대역을 사용 가능하게 하는 서브넷마스크가 255.255.255.224 인데 이것을 CIDR로 표기하면 /27인 것이지요.

 

결과적으로 192.168.10.0/24 을 32개, 64개, 64개, 32개, 32개 이렇게 나누었을때 아래와 같이 표현이 가능합니다.

 

Public subnet1 : 192.168.10.0/27 -> 32개

Public subnet2 : 192.168.10.32/27-> 32개

Private subnet1 : 192.168.10.64/26 -> 64개

Private subnet2 : 192.168.10.128/26 -> 64개

Private DB subnet1 : 192.168.10.192/27-> 32개

Private DB subnet2 : 192.168.10.224/27-> 32개

 

여기서 중요한점 또 한가지는 AWS에서 서브네팅을할때, 첫 4개의 IP와 마지막 IP주소는 사용자가 사용할 수 없습니다.

그 이유는 AWS에서 예약해놓은 주소이기 때문입니다. 10.0.0.0/24 CIDR 블록의 서브넷에서는 다음 5개 IP 주소가 예약되어 있습니다.

 

10.0.0.0: 네트워크 주소.

10.0.0.1: AWS에서 VPC 라우터용으로 예약한 주소.

10.0.0.2: AWS에서 예약한 주소 DNS 서버의 IP 주소는 항상 VPC 네트워크 범위를 기초로 2를 더한 것입니다. 그러나 AWS는 각 서브넷 범위의 기준 + 2도 예약합니다. 

10.0.0.3: AWS에서 앞으로 사용하려고 예약한 주소.

10.0.0.255: 네트워크 브로드캐스트 주소. VPC에서는 브로드캐스트를 지원하지 않으므로, 이 주소를 예약합니다.

 

각 서브넷에서 사용할 수 있는 IP가 5개가 줄어 들게 되는 것입니다. 

 

Public subnet2 로 예를들면  192.168.10.32/27-> 32-5 = 27개만 사용이 가능하며 192.168.10.32, 192.168.10.33, 192.168.10.34, 192.168.10.35, 192.168.10.255 이 5개의 IP는 사용할 수 없게 되는 것입니다.

 

정리해보면 VPC에서 사용할 사설 IP대역을 C class로 192.168.10.0/24 로 설정했고, 

subnet을 6개로 나누기로 했다면 아래와 같이 사용할 수 있게 되는 것입니다.

 

Public subnet1 : 192.168.10.0/27 -> 27개

Public subnet2 : 192.168.10.32/27-> 27개

Private subnet1 : 192.168.10.64/26 -> 59개

Private subnet2 : 192.168.10.128/26 -> 59개

Private DB subnet1 : 192.168.10.192/27-> 27개

Private DB subnet2 : 192.168.10.224/27-> 27개

 

 

자, 여기까지 VPC생성과 subnet 생성을 위해 IP를 대역을 선택하는 방법, 서브넷을 나누는 방법에 대해 알아 보았습니다.

 

서브넷을 나누고 나서 public 이냐 private 이냐를 설정하기위해 Routing Table 을 사용하게 됩니다. 

또, private subnet에 접근하기 위해 Bastion이 필요한데 이에 대해서는 다음 블로그에서 포스팅하도록 하겠습니다.

 

 

 

 

 

 

 

 

반응형