IP 주소의 할당방식
IP 주소는 Security Group과 VPC 관련 설정에서 많이 볼 수 있다.
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도 할당 받는다.
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 이름을 만들어 주려 한다면, 두 가지 옵션을 모두 켜줘야 한다.
'컴퓨터공학 > 분산시스템' 카테고리의 다른 글
[AWS][Networking][강의노트] IPv6, VPC 요약정리 (0) | 2022.02.24 |
---|---|
[AWS][Networking][강의노트] VPN, DX, Endpoint Service, Transit Gateway, Traffic Mirroring (0) | 2022.02.24 |
[AWS][Networking][강의노트] VPC 보안 및 심화 기능 (0) | 2022.02.23 |
[AWS][Security][강의노트] 보안 관련 서비스들 (0) | 2022.02.23 |
]Docker[ CUDA를 사용하는 PyTorch 쥬피터 컨테이너 만들기 (0) | 2020.07.24 |