DevOps

AWS VPC Tunneling

삐삐에스 2024. 4. 3. 13:04

AWS의 VPC(Virtual Private Cloud) 서비스를 이용하여 터널링을 해보았다.

 

먼저 VPC에 대해 알아보자.

네트워킹의 기본 요소 3가지는 페이로드(내용), 보낸 사람 주소, 받는 사람 주소이다.

여기서 주소란 IP를 뜻한다. 우리가 일반적으로 사용하는 IPv4 주소는 8비트씩 4그룹으로 구성되어 총 32비트를 가진다. 

IP의 범위를 쉽게 표현하기 위해서 CIDR를 사용할 수 있다.

 

VPC를 사용하면 가상 네트워크 상에서 리소스를 격리시킬 수 있기 때문에 보안성을 강화시킬 수 있다. 그리고 VPC를 사용하면 IP 주소 범위, 서브넷, 라우팅 테이블, 네트워크 게이트웨이 등을 사용자가 직접 설정할 수 있어, 기업의 특정 네트워킹 요구사항을 충족시킬 수 있습니다. 이외에도 확장성, 비용 효율성 등 다양한 면에서 장점이 있는 서비스이다.

 

만약 VPC가 인터넷에 연결되지 않는다면 외부에서는 내부 서버에 전혀 접근을 할 수가 없게 된다. 따라서 인터넷에 연결 가능하게 만드는 것이 중요하다. 이 단계를 설명하면 다음과 같다.

1. IP 주소 범위 선택

VPC에서 사용할 수 있는 IP 범위 설정

IP 범위를 설정하기 위해 /16 이라는 CIDR 방식을 사용했다. 그리고 IPv6는 사용하지 않는다고 설정했다.

 

2. 가용 영역별 서브넷 설정

가용영역(AZ) 별 서브넷을 만들었다.

총 4개의 서브넷을 설정했고, IP 범위는 VPC보다 적은 /24 로 설정했다.

 

3. 인터넷으로 향하는 경로 만들기

인터넷 게이트웨이 생성

1번에서 만든 VPC에서 사용할 수 있는 인터넷 게이트웨이를 생성했다.

 

4. VPC 로/부터의 트래픽 설정

라우팅 테이블을 설정하였다.

 


이제 만들어진 VPC를 이용하여 실습을 해보겠다.

 

1. 서버 구성하기

 

VPC 안에 퍼블릭 서브넷과 프라이빗 서브넷을 두고, 퍼블릭 서브넷에는 EC2 인스턴스를 설치했고, 프라이빗 서브넷에는 RDS를 설치했다.

 

2. Local PC에서 RDS로 연결하기

 

나는 내 로컬 컴퓨터에서 RDS에 접근하고 싶은데, 내 컴퓨터는 VPC 밖에 위치하고 있고 RDS는 프라이빗 서브넷에 있기 때문에 접근 불가하다.

따라서 나는 퍼블릭 서브넷에 있는 EC2 인스턴스를 거쳐 RDS로 접근해야 한다.

이때 나는 터널링으로 포트를 뚫어 쉽게 이용할 수 있게 만들 수 있다.

 

3. 터널링

 

우선 내 로컬 컴퓨터를 EC2 인스턴스의 22번 포트와 연결한다. 그 후에 아래와 같은 명령어를 이용하여 EC2와 RDS를 연결한다.

 

ssh -i "rds-test.pem" -L3306:{RDS의 엔드포인트}:3306 ubuntu@{EC2 인스턴스 주소}

 

나는 putty에서 진행했고, putty에서는 Connection - SSH - Tunnels에서 설정할 수 있다.

 

A는 EC2 인스턴스의 퍼블릭 IP, B는 RDS의 엔드포인트

 

그런데 위 사진을 보면 RDS로 터널링을 뚫을 때, 13306 포트를 지정한 것(L13306)을 볼 수 있다.

일반적으로 mysql은 3306포트를 이미 점유하고 있기 때문에 접속에 에러가 생긴다. 따라서 비어있는 포트 중 하나인 13306 포트를 사용한 것이다.

 

3306 포트가 이미 LISTENING 중인 것을 확인할 수 있다.

 

이렇게 연결하면 내 로컬 컴퓨터의 13306번 포트와 RDS의 3306번 포트가 터널링으로 연결되고, 앞으로는 EC2 인스턴스를 통하지 않아도 127.0.0.1:13306 으로 한 번에 접속할 수 있게 된다.

사실 매번 EC2 인스턴스의 22번 포트로 연결된 다음 RDS의 3306포트로 접속되는 것이지만 터널링을 뚫음으로써 마치 내 로컬 컴퓨터에 SQL(RDS)가 설치되어 있는 것처럼 사용할 수 있는 것이다.

그리고 RDS의 입장에서는 매번 접속 요청이 올 때마다 마치 EC2 인스턴스에게 요청이 오는 것처럼 사용되는 것이다.

 

4. 내 로컬 컴퓨터에서 RDS 접근

내 로컬 컴퓨터에서 프라이빗 서브넷에 있는 RDS에 접근해보겠다. RDS는 Mysql로 설정했기 때문에 Workbench를 이용했다.

 

터널링을 뚫어놓았기 때문에 localhost:13306으로 접근하면 RDS에 쉽게 도달할 수 있다.

여기서 localhost는 127.0.0.1와 같다.

 

 

반응형