VPC: 망분리 그리고 테스트
학습
서브넷 구성
서브넷을 잘 구성 했는지 확인 하려면 어떻게 해야할까?
3계층 (네트워크)
IP 정보만으로 서버에 요청이 가능한지 확인 가능한 프로토콜이며 ICMP
는 TCP
, UDP
와 달리 Port Number가 없기 때문에 SG 등의 보안 규칙 설정 시 별도 프로토콜 지정이 필요하다.
example
ping google.com -c 1
"Ping 테스트가 실패하면 어떻게 해야할까?"
4계층 (트랜스포트)
Port를 대상으로 테스트할 때는 "서버가 현재 정상적으로 구동 되고 있는지"를 확인한다.
"Port 는 한 개만 열었는데 어떻게 다수의 사용자가 연결할 수 있는걸까?"

소켓 은 file descriptor
, local ip
, local port
, remote ip
, remote port
등 5가지 정보를 활용하여 생성 된다.
이중 우리가 할당하는 포트인 local port
의 경우, 프로세스가 구동될 때 할당하기도 하고, /etc/services 를 보면 이미 known port로 지정되어 있기도 한다.
특정 프로세스 (가령, 8080 포트번호의 톰캣 서버)에 보내는 클라이언트의 요청은 remote port
를 제외하고 모두 동일하다.
remote port
는 client의 브라우저에서 요청 보낼 시 랜덤으로 지정하는 unknown port
이며 이로인해 요청을 구분할 수 있게 된다.
"하나의 프로세스(서버)에서 몇 개의 클라이언트와 연결이 가능할까?"

위 이미지 처럼 해당 프로세스에 별다른 제약이 없다면 기본적으로 생성할 수 있는 파일의 갯수가 제한되어 있다.
"소켓을 하나 더 두어 요청을 다른 포트 번호로 전달할 수는 없을까?"

192.168.0.1:80 포트로 요청을 전달 받아 192.168.0.1:8080 포트로 전달하여 프로세스가 처리할 수 있는데, 이를 "포트 포워딩" 이라고 한다.
주로 컨테이너 환경에서 많이 사용된다.
"Port 테스트가 실패하는 경우는 어떻게 해야할까?"
7계층 (어플리케이션)
해당 테스트는 특정 URL에 대한 API 이상 유무를 확인할 수 있다.
example
curl -i google.com
"도메인 주소를 IP로 변환하는 과정 알아보기"
우선 /etc/hosts 파일에 정적으로 설정한 정보를 확인한다.
해당 파일은 사용자가 직접 등록할 수 있기 때문에 최우선으로 사용되며 해당 파일에 도메인 주소가 존재한다면 이를 그대로 활용한다.
로컬의 DNS Cache 를 확인해봅니다.
/etc/resolv.conf 에 설정된 정보를 기반으로 DNS 서버 에 질의합니다.
DNS 서버는 정보가 있으면 반환하고, 없으면 본인의 상위 DNS 서버 에게 질의하여 정보를 알아옵니다.
도메인에 해당하는 IP를 알게되면 DNS Cache 에 추가합니다.
Cache에 등록하게 되면 이후 요청부터 캐시를 활용해서 DNS 서버에 다시 질의하지 않는다
HTTP Status Code
를 기반으로 클라이언트에서 에러가 발생했는지, 서버에서 에러가 발생했는지 확인하고 디버깅하여 트러블 슈팅을 한다.
OSI 7Layer를 바탕으로 패킷이 네트워크 각 구간을 돌아다니는 것을 머릿 속으로 상상하는 습관을 들이면 여러 상황에서 트러블 슈팅 할 때 유리함
실습
기본 망 구성
VPC 구성
192.168.0.0/24 (C Class)
서브넷 구성
192.168.0.0/26 public-a
192.168.0.64/26 public-c
192.168.0.128/27 internal-a
192.168.0.160/27 internal-c
IGW 구성
생성 및 미션을 위해 구성 된 VPC Attatch
NAT Gateway 구성
서브넷 연결(외부망 public a)
EIP 할당
외부망 구성
VPC 연결
public-a 서브넷 연결
Prod EC2 인스턴스 프로비전
스펙: T2.Medium
보안그룹
내 IP SSH 포트 오픈
HTTPS Allow any 오픈
ICMP IPv4 Allow any 오픈
Public 라우팅 테이블과 인터넷 게이트웨이 연결
외부망 통신을 위해 0.0.0.0 대역으로 인터넷 게이트웨이 연결
내 IP로 접근이 가능하게 설정 된 운영 인스턴스 상태 체크
결과: 성공
ping check
내부망 구성
VPC 연결
internal-a 서브넷 연결
DB EC2 인스턴스 프로비전
스펙: T2.micro
보안그룹
내 IP SSH 포트 오픈
외부망 SSH 포트 오픈
ICMP IPv4 Allow any 오픈
Elastic IP 할당
내 IP -> 외부망 접근 Ping 테스트
결과: 성공
ping check 외부망 -> 내부망 Ping 테스트
결과: 성공
ping check
망 분리
외부망 라우팅 테이블 서브넷 설정
IGW 연결(외부망 통신)
public subnet 2개 연결
내부망 라우팅 테이블 생성 및 서브넷 설정
internal subnet 2개 연결
내부망 서버 공인 IP Ping 체크
결과: 실패
ping check 내부망 -> 인터넷망 접근 체크
결과: 실패
system update 외부망 -> 내부망 telnet 테스트
결과: 성공
system update Internal 라우팅 테이블에 NAT GW 연결
내부망이 외부망과 통신을 위해 0.0.0.0 대역으로 NAT 게이트웨이 연결
내부망에서 라이브러리 업데이트를 통해 인터넷망 사용 여부 체크
system update 외부망 443 Port listen 후 접근 확인
socket listen
sudo socket -s 443
테스트
telnet {IP} 443
내부망 서버의 공인 IP로 접근 테스트
내부망의 공인 IP Ping 테스트
VPC 리소스 맵

Last updated