1. 용어 및 개념 정리
[1] VPC
퍼블릭 클라우드 상에서 제공되는 사설 네트워크 (private network)이며, 가상의 데이터 센터와 같다. IP주소 범위, VPC 범위를 설정해 외부와 격리된 네트워크 컨테이너를 구성할 수 있다. 논리적으로 독립된 가상 네트워크는 외부 네트워크 통신 제어, VPC 내부 통신 설정을 통해 보안적인 이점을 제공한다. 참고로 AWS VPC 는 리전 단위로 서비스를 제공한다.
[2] subnet
VPC 의 하위 단위로 VPC 에 할당된 IP 를 더 작은 단위로 분할한 개념을 말한다. 하나의 서브넷은 하나의 가용영역(AZ) 안에 위치하며, CIDR block range 를 통해 IP 주소 범위를 지정할 수 있다.
각 subnet 에 IP 할당 갯수는 2^(32 - 호스트 주소 할당 숫자) 를 통해 연산한다. 예를 들어 10.0.0.0/26 이라면 2^(32 - 26) = 64개의 ip 갯수를 할당할 수 있다. 하지만 AWS 에서 subnet 을 구성하는 경우 5개의 IP 갯수를 제외하고 계산해야 한다. AWS 에서 subnet 을 구성할 경우 아래와 같은 이유로 자동으로 5개의 IP 주소를 할당하며 최종적으로 할당되는 IP 의 갯수는 64 - 5 = 59개이다. 만약 원하는 IP 할당 갯수가 64개라면 실제 할당하는 IP 는 64개 보다 더 많아야 한다.
- subnet 설정이 10.0.0.0/24 라면?
- 10.0.0.0 : network address
- 10.0.0.1 : VPC router
- 10.0.0.2 : DNS Server
- 10.0.0.3 : 미래 사용을 위해 남겨 둠
- 10.0.0.255(마지막 주소) : network broadcast address (단 broadcast 를 제공하지 않음)
서브넷 종류에는 public subnet 과 private subnet 이 존재한다. public subnet 은 외부에서 인터넷 연결을 통해 통신할 수 있는 서브넷을 말한다. internet gateway 를 퍼블릭 라우팅 테이블에 등록해 외부 인터넷과 통신 가능한 상태로 구성할 수 있다. 내부에 위치한 인스턴스에 public IP 를 부여할 수 있으며 웹 서버, 어플리케이션 서버 등 유저에게 노출하는 인프라를 구성하는 공간이다. private subnet 은 외부에서 인터넷 연결을 통해 통신할 수 없는 서브넷을 말한다. (참고로, 외부에서 private subnet 으로 통신이 불가하지만 private subnet 에서 외부와의 통신은 NAT interface 를 구성해 외부와의 통신이 가능하다.) public IP 부여가 불가능하며 DB 와 같은 외부 노출이 필요없는 인프라에서 많이 사용한다.
[3] route table
route table 은 router 가 다른 망과의 서버 통신하기 위해 참고하는 테이블이다. route table 은 destination 와 target 을 컬럼으로 테이블이 구성되는데 destination 은트래픽을 이동할 대상 IP 주소 범위, target 은 대상 트래픽을 전송할 때 사용할 게이트웨이, 네트워크 인터페이스를 지정한다.
route table 은 구체적인 서브넷 마스크 숫자가 큰 것을 높은 우선순위로 한다. 아래 route table 을 기준으로 IPv4 10.0.1.231 을 라우팅해야 한다면 호스트 주소 할당 숫자가 10.0.0.0/16 을 destination 으로 기준으로 local 로 라우팅한다.
(참고로, 라우터(Router) 는 최종 목적지를 가기 위해 어디로 패킷을 보내는 것이 최적 경로인지 학습하며 라우팅 정보가 있을 때는 해당 요청을 Forwarding 하여 target 으로 전달하고 라우팅 정보가 없을 때 Drop 하여 요청을 버린다.)

[4] internet gateway
VPC 가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 소스이다. IPv4, IPv6 를 지원하며 IPv4 는 NAT 역할을 한다. Route table 을 통해 접근 가능하며 무료인 서비스이다.
- gateway...??
- 서로 다른 통신망 혹은 프로토콜 간 네트워크 통신을 가능하게 하는 구성요소
- 예시
- internet gateway : 인터넷 망과 연결을 중계하는 요소
- NAT gateway : private IP 를 public IP 로 변환하는 구성요소 (AWS 에서 쉽게 생성 및 관리하도록 제공)
[5] CIDR(Classless Inter Domain Routing)
IP주소 영역을 여러 네트워크 영역으로 나누기 위해 IP 를 묶는 방식이며 여러 개의 사설망을 구축하기 위해 망을 나누는 방법이다. CIDR Block 은 IP 주소의 집합이며 이는 CIDR Notation 을 통해 CIDR Block 을 표현한다. CIDR Notation 은 A.B.C.D/E 형식으로 표현하며 A,B,C,D 는 네트워크 주소와 호스트 영역을 표시하고 E 는 네트워크 주소가 몇 bit 인지를 나타낸다.
[6] NAT(Network Address Translation)
private IP 를 public IP 로 통신할 수 있도록 주소를 변환하는 방법이다. private IP 는 한정된 IP주소를 최대한 활용하기 위한 방법으로 사설망 내부의 별도의 IP 를 할당하고 외부와 통신하기 위한 public IP 를 공용으로 사용하는 형태를 말한다. 이 때 private IP 를 public IP 로 변환하는 역할을 하는 주체이다.
NAT 에는 Dynamic NAT, Static NAT, PAT(Port Address NAT) 3가지가 존재하며 기능을 아래와 같다.
- Dynamic NAT : 1개의 private IP 를 가용 가능한 public IP 로 연결
- Static NAT : 1개의 private IP 를 고정된 1개의 public IP 로 연결 (AWS Integernet gateway 에서 사용)
- PAT : 많은 private IP 를 1개의 public IP 로 연결 (AWS NAT gateway 에서 사용)
[7] Security Group
NACL(Network Access Control List) 와 함께 방화벽 역할을 하는 서비스이다. 즉, 연결된 리소스에 도달하고 나갈 수 있는 트래픽을 제어하는 역할을 담당한다. 인바운드, 아웃바운드 규칙을 통해 설정이 가능하며 source, port 범윔 및 protocol 을 지정할 수 있다.
2. AWS 논리망 구성하기
만들고자 하는 인프라 구성

[1] VPC 구성

[2] subnet 구성

[3] internet gateway 설정

[4] public routing table 생성 및 라우팅 설정
(1) public routing table 생성

(2) 라우팅 설정
- internet-gateway 설정

(3) 서브넷 설정

[5] nat gateway 설정
(1) subnet 설정, elastic ip 설정

[6] private routinng table 생성
(1) private routing table 생성

(2) 라우팅 설정
- nat-gateway 설정
- 내부 요청은 내부로 라우팅 (다른 subnet 이동 포함)
- 나머지 요청은 nat gateway 로 이동

(3) 서브넷 설정

[6] public ec2 생성
- OS : Ubuntu 설정
- 아키텍처 : x86 선택
- 인스턴스 유형 : t2.micro
- 키 페어 : pem 을 통한 생성
- network 설정 (아래 그림 참고)
- VPC 설정
- public subnet 설정
- security group 설정 (아래 그림 참고)
- ICMP : ping check 를 위함
- SSH : ssh client 사용을 위함
- HTTPS : HTTP 통신을 위함
- 생성 완료 후, 정상 동작 check list
- 외부에서 ping check, port check(telnet), socket communication check


[7] private ec2 생성
- OS : Ubuntu 설정
- 아키텍처 : x86 선택
- 인스턴스 유형 : t2.micro
- 키 페어 : pem key 생성
- network 설정 (아래 그림 참고)
- VPC 설정
- private subnet 설정
- security group 설정 (아래 그림 참고)
- ICMP : ping check 를 위함
- MySQL : public security group 에서 요청을 받기 위함
- SSH : SSH client 를 사용하기 위함
- 생성 완료 후, 정상 동작 check list
- public instance 에서 ping check, port check(telnet), socket communication check
- 외부에서 private ec2 접속 불가능 여부 확인
- private ec2 에서 외부 연결 가능 확인 (NAT 를 통해 private subnet → public subnet→ 외부 통신 가능한지 확인)


3. 연결 테스트 방법
[1] ping check : remote ip 와 연결 여부 확인
ping [remote ip address]
[2] port check : remote ip + port 연결 여부 확인
# debian
telnet [remote ip address] [port number]
[3] 외부 서버 통신 확인
# install library
sudo apt install socket
sudo apt install net-tools
# server socket open
sudo socket -s 443
# server public ip 확인
curl wgetip.com
# client request connection
telnet [server ip] 443
# connection 상태 확인
sudo netstat -antp | grep 443
4. private instance 에 접근하기 위한 public instance 에 pem key 전송하기
# scp 명령어
scp [파일1] [파일2] [원격지 id]@[remote ipv4]:[받는 위치]
# 예시
scp cooper-workshop-private.pcm ubuntu@[server public ip]:~/keys/
5. trouble shooting
[1] port check fail
- situation
- ping check success / port check 에서 fail 되는 현상
- cause
- private security group inbound rule 에서 TCP port = 0 으로 설정되어 발생한 문제
- TCP port = 0 으로 설정할 경우 모든 port 에 관한 요청 허용하는 것으로 오해
- action
- security gruop inbound TCP port 22 로 재설정
[2] 기존에 다른 EC2 사용하던 pem key 로 public instance 로 접근하지 못하는 문제

- situation
- 기존 cooper-infra-public.pem 파일로 새로운 EC2 instance 를 생성하여 외부에서 해당 pem key 를 통해 접근하는 과정에서 발생한 문제
- cause
- /.ssh/known_hosts 에 저장된 remote host public key 와 remote host public key 가 충돌하여 발생한 문제
- SSH client 가 remote host 를 확인하기 위해 .ssh/known_hosts 파일에 기존에 저장된 remote ip public key 를 통해 검증하는 과정에서 발생한 에러
- action
- 기존 EC2 를 사용하고 있지 않기 않아 .ssh/known_hosts 파일의 remote ip public key 를 제거 및 재생성하여 해결
- ssh-keygen -R [public instance ip]
Reference
- https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B3%B5%EB%B0%A9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0
- https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-your-vpc.html
- https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Route_Tables.html
- https://www.youtube.com/watch?v=WY2xoIClOFA
- https://www.youtube.com/watch?v=3VXLD0-Iq8A
- https://ghdwlsgur.github.io/docs/Linux/known_hosts
'인프라 공방 > 지하철 노선' 카테고리의 다른 글
[인프라공방] 지하철 노선도 - 4. 화면 응답 개선하기 (0) | 2024.02.29 |
---|---|
[인프라공방] 지하철 노선도 - 3. 3-tier 구성하기 (1) | 2024.02.27 |
[인프라공방] 지하철 노선도 - 2. 서버 구성하기 (1) | 2024.02.25 |
1. 용어 및 개념 정리
[1] VPC
퍼블릭 클라우드 상에서 제공되는 사설 네트워크 (private network)이며, 가상의 데이터 센터와 같다. IP주소 범위, VPC 범위를 설정해 외부와 격리된 네트워크 컨테이너를 구성할 수 있다. 논리적으로 독립된 가상 네트워크는 외부 네트워크 통신 제어, VPC 내부 통신 설정을 통해 보안적인 이점을 제공한다. 참고로 AWS VPC 는 리전 단위로 서비스를 제공한다.
[2] subnet
VPC 의 하위 단위로 VPC 에 할당된 IP 를 더 작은 단위로 분할한 개념을 말한다. 하나의 서브넷은 하나의 가용영역(AZ) 안에 위치하며, CIDR block range 를 통해 IP 주소 범위를 지정할 수 있다.
각 subnet 에 IP 할당 갯수는 2^(32 - 호스트 주소 할당 숫자) 를 통해 연산한다. 예를 들어 10.0.0.0/26 이라면 2^(32 - 26) = 64개의 ip 갯수를 할당할 수 있다. 하지만 AWS 에서 subnet 을 구성하는 경우 5개의 IP 갯수를 제외하고 계산해야 한다. AWS 에서 subnet 을 구성할 경우 아래와 같은 이유로 자동으로 5개의 IP 주소를 할당하며 최종적으로 할당되는 IP 의 갯수는 64 - 5 = 59개이다. 만약 원하는 IP 할당 갯수가 64개라면 실제 할당하는 IP 는 64개 보다 더 많아야 한다.
- subnet 설정이 10.0.0.0/24 라면?
- 10.0.0.0 : network address
- 10.0.0.1 : VPC router
- 10.0.0.2 : DNS Server
- 10.0.0.3 : 미래 사용을 위해 남겨 둠
- 10.0.0.255(마지막 주소) : network broadcast address (단 broadcast 를 제공하지 않음)
서브넷 종류에는 public subnet 과 private subnet 이 존재한다. public subnet 은 외부에서 인터넷 연결을 통해 통신할 수 있는 서브넷을 말한다. internet gateway 를 퍼블릭 라우팅 테이블에 등록해 외부 인터넷과 통신 가능한 상태로 구성할 수 있다. 내부에 위치한 인스턴스에 public IP 를 부여할 수 있으며 웹 서버, 어플리케이션 서버 등 유저에게 노출하는 인프라를 구성하는 공간이다. private subnet 은 외부에서 인터넷 연결을 통해 통신할 수 없는 서브넷을 말한다. (참고로, 외부에서 private subnet 으로 통신이 불가하지만 private subnet 에서 외부와의 통신은 NAT interface 를 구성해 외부와의 통신이 가능하다.) public IP 부여가 불가능하며 DB 와 같은 외부 노출이 필요없는 인프라에서 많이 사용한다.
[3] route table
route table 은 router 가 다른 망과의 서버 통신하기 위해 참고하는 테이블이다. route table 은 destination 와 target 을 컬럼으로 테이블이 구성되는데 destination 은트래픽을 이동할 대상 IP 주소 범위, target 은 대상 트래픽을 전송할 때 사용할 게이트웨이, 네트워크 인터페이스를 지정한다.
route table 은 구체적인 서브넷 마스크 숫자가 큰 것을 높은 우선순위로 한다. 아래 route table 을 기준으로 IPv4 10.0.1.231 을 라우팅해야 한다면 호스트 주소 할당 숫자가 10.0.0.0/16 을 destination 으로 기준으로 local 로 라우팅한다.
(참고로, 라우터(Router) 는 최종 목적지를 가기 위해 어디로 패킷을 보내는 것이 최적 경로인지 학습하며 라우팅 정보가 있을 때는 해당 요청을 Forwarding 하여 target 으로 전달하고 라우팅 정보가 없을 때 Drop 하여 요청을 버린다.)

[4] internet gateway
VPC 가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 소스이다. IPv4, IPv6 를 지원하며 IPv4 는 NAT 역할을 한다. Route table 을 통해 접근 가능하며 무료인 서비스이다.
- gateway...??
- 서로 다른 통신망 혹은 프로토콜 간 네트워크 통신을 가능하게 하는 구성요소
- 예시
- internet gateway : 인터넷 망과 연결을 중계하는 요소
- NAT gateway : private IP 를 public IP 로 변환하는 구성요소 (AWS 에서 쉽게 생성 및 관리하도록 제공)
[5] CIDR(Classless Inter Domain Routing)
IP주소 영역을 여러 네트워크 영역으로 나누기 위해 IP 를 묶는 방식이며 여러 개의 사설망을 구축하기 위해 망을 나누는 방법이다. CIDR Block 은 IP 주소의 집합이며 이는 CIDR Notation 을 통해 CIDR Block 을 표현한다. CIDR Notation 은 A.B.C.D/E 형식으로 표현하며 A,B,C,D 는 네트워크 주소와 호스트 영역을 표시하고 E 는 네트워크 주소가 몇 bit 인지를 나타낸다.
[6] NAT(Network Address Translation)
private IP 를 public IP 로 통신할 수 있도록 주소를 변환하는 방법이다. private IP 는 한정된 IP주소를 최대한 활용하기 위한 방법으로 사설망 내부의 별도의 IP 를 할당하고 외부와 통신하기 위한 public IP 를 공용으로 사용하는 형태를 말한다. 이 때 private IP 를 public IP 로 변환하는 역할을 하는 주체이다.
NAT 에는 Dynamic NAT, Static NAT, PAT(Port Address NAT) 3가지가 존재하며 기능을 아래와 같다.
- Dynamic NAT : 1개의 private IP 를 가용 가능한 public IP 로 연결
- Static NAT : 1개의 private IP 를 고정된 1개의 public IP 로 연결 (AWS Integernet gateway 에서 사용)
- PAT : 많은 private IP 를 1개의 public IP 로 연결 (AWS NAT gateway 에서 사용)
[7] Security Group
NACL(Network Access Control List) 와 함께 방화벽 역할을 하는 서비스이다. 즉, 연결된 리소스에 도달하고 나갈 수 있는 트래픽을 제어하는 역할을 담당한다. 인바운드, 아웃바운드 규칙을 통해 설정이 가능하며 source, port 범윔 및 protocol 을 지정할 수 있다.
2. AWS 논리망 구성하기
만들고자 하는 인프라 구성

[1] VPC 구성

[2] subnet 구성

[3] internet gateway 설정

[4] public routing table 생성 및 라우팅 설정
(1) public routing table 생성

(2) 라우팅 설정
- internet-gateway 설정

(3) 서브넷 설정

[5] nat gateway 설정
(1) subnet 설정, elastic ip 설정

[6] private routinng table 생성
(1) private routing table 생성

(2) 라우팅 설정
- nat-gateway 설정
- 내부 요청은 내부로 라우팅 (다른 subnet 이동 포함)
- 나머지 요청은 nat gateway 로 이동

(3) 서브넷 설정

[6] public ec2 생성
- OS : Ubuntu 설정
- 아키텍처 : x86 선택
- 인스턴스 유형 : t2.micro
- 키 페어 : pem 을 통한 생성
- network 설정 (아래 그림 참고)
- VPC 설정
- public subnet 설정
- security group 설정 (아래 그림 참고)
- ICMP : ping check 를 위함
- SSH : ssh client 사용을 위함
- HTTPS : HTTP 통신을 위함
- 생성 완료 후, 정상 동작 check list
- 외부에서 ping check, port check(telnet), socket communication check


[7] private ec2 생성
- OS : Ubuntu 설정
- 아키텍처 : x86 선택
- 인스턴스 유형 : t2.micro
- 키 페어 : pem key 생성
- network 설정 (아래 그림 참고)
- VPC 설정
- private subnet 설정
- security group 설정 (아래 그림 참고)
- ICMP : ping check 를 위함
- MySQL : public security group 에서 요청을 받기 위함
- SSH : SSH client 를 사용하기 위함
- 생성 완료 후, 정상 동작 check list
- public instance 에서 ping check, port check(telnet), socket communication check
- 외부에서 private ec2 접속 불가능 여부 확인
- private ec2 에서 외부 연결 가능 확인 (NAT 를 통해 private subnet → public subnet→ 외부 통신 가능한지 확인)


3. 연결 테스트 방법
[1] ping check : remote ip 와 연결 여부 확인
ping [remote ip address]
[2] port check : remote ip + port 연결 여부 확인
# debian
telnet [remote ip address] [port number]
[3] 외부 서버 통신 확인
# install library
sudo apt install socket
sudo apt install net-tools
# server socket open
sudo socket -s 443
# server public ip 확인
curl wgetip.com
# client request connection
telnet [server ip] 443
# connection 상태 확인
sudo netstat -antp | grep 443
4. private instance 에 접근하기 위한 public instance 에 pem key 전송하기
# scp 명령어
scp [파일1] [파일2] [원격지 id]@[remote ipv4]:[받는 위치]
# 예시
scp cooper-workshop-private.pcm ubuntu@[server public ip]:~/keys/
5. trouble shooting
[1] port check fail
- situation
- ping check success / port check 에서 fail 되는 현상
- cause
- private security group inbound rule 에서 TCP port = 0 으로 설정되어 발생한 문제
- TCP port = 0 으로 설정할 경우 모든 port 에 관한 요청 허용하는 것으로 오해
- action
- security gruop inbound TCP port 22 로 재설정
[2] 기존에 다른 EC2 사용하던 pem key 로 public instance 로 접근하지 못하는 문제

- situation
- 기존 cooper-infra-public.pem 파일로 새로운 EC2 instance 를 생성하여 외부에서 해당 pem key 를 통해 접근하는 과정에서 발생한 문제
- cause
- /.ssh/known_hosts 에 저장된 remote host public key 와 remote host public key 가 충돌하여 발생한 문제
- SSH client 가 remote host 를 확인하기 위해 .ssh/known_hosts 파일에 기존에 저장된 remote ip public key 를 통해 검증하는 과정에서 발생한 에러
- action
- 기존 EC2 를 사용하고 있지 않기 않아 .ssh/known_hosts 파일의 remote ip public key 를 제거 및 재생성하여 해결
- ssh-keygen -R [public instance ip]
Reference
- https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B3%B5%EB%B0%A9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0
- https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-your-vpc.html
- https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Route_Tables.html
- https://www.youtube.com/watch?v=WY2xoIClOFA
- https://www.youtube.com/watch?v=3VXLD0-Iq8A
- https://ghdwlsgur.github.io/docs/Linux/known_hosts
'인프라 공방 > 지하철 노선' 카테고리의 다른 글
[인프라공방] 지하철 노선도 - 4. 화면 응답 개선하기 (0) | 2024.02.29 |
---|---|
[인프라공방] 지하철 노선도 - 3. 3-tier 구성하기 (1) | 2024.02.27 |
[인프라공방] 지하철 노선도 - 2. 서버 구성하기 (1) | 2024.02.25 |