본문으로 건너뛰기

CloudShell로 특정 환경에서 네트워크 테스트하기

배경

특정 환경에서 네트워크가 실제로 열려 있는지 확인해야 할 때가 있다.

이럴 때 로컬 PC 대신 AWS CloudShell을 테스트 기준점으로 두면 편하다.
CloudShell을 테스트하려는 네트워크 환경에 맞게 세팅해 두면, 해당 위치에서 바로 도메인과 포트 연결 여부를 확인할 수 있다.

이번 글은 아래처럼 아주 짧은 흐름만 정리한다.

  1. CloudShell을 테스트할 네트워크 환경으로 세팅
  2. 네트워크 확인용 도구 설치
  3. telnet, curl로 도메인/포트 테스트

환경

테스트 전제는 아래와 같다.

  • AWS CloudShell 사용
  • 테스트 대상 네트워크 환경이 이미 준비되어 있음
  • 확인 대상은 RDS endpoint 또는 특정 domain/IP + port

핵심은 CloudShell이 어느 네트워크 위치에서 동작하느냐를 먼저 맞추는 것이다.

핵심 내용

1. CloudShell을 테스트할 네트워크 환경으로 맞춘다

먼저 CloudShell을 실제로 테스트하고 싶은 네트워크 환경 기준으로 세팅한다.

예를 들어:

  • 특정 VPC 기준으로 접근 가능한지 확인하고 싶은 경우
  • 특정 보안 그룹/라우팅 환경에서 통신이 되는지 보고 싶은 경우
  • 내부 도메인 또는 RDS endpoint 접근 가능 여부를 보고 싶은 경우

이 단계가 먼저 맞아야 이후 결과도 의미가 있다.

2. 네트워크 툴 설치

이후 아래 명령어로 테스트 도구를 설치한다.

sudo yum install telnet

3. RDS 또는 특정 endpoint 포트 확인

RDS endpoint와 port 연결 여부를 볼 때는 아래처럼 확인할 수 있다.

telnet [RDS_DOMAIN] [PORT]

예:

telnet mydb.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com 3306

이 방식은 해당 도메인과 포트로 TCP 연결이 가능한지 빠르게 볼 때 유용하다.

4. domain 또는 IP 기준으로 curl 테스트

HTTP 계열 응답이나 단순 endpoint 접근 여부를 볼 때는 curl도 같이 쓸 수 있다.

curl -v --connect-timeout 5 "http://[DOMAIN_OR_IP]:[PORT]/"

예:

curl -v --connect-timeout 5 http://example.internal:8080/
curl -v --connect-timeout 5 http://10.0.10.15:8080/

상황에 따라 domain 기준과 ip 기준을 나눠서 보면 DNS 문제인지, 순수 네트워크 문제인지 구분하는 데 도움이 된다.

위 curl 예시는 HTTP 서비스용이다. RDS의 PostgreSQL·MySQL 포트는 HTTP를 사용하지 않으므로, 해당 포트의 TCP 연결은 앞의 telnet 예시로 확인한다.

포트는 별도 인자가 아니라 URL의 :[PORT]로 지정한다. curl URL 형식 공식 문서

요약

  • CloudShell을 먼저 테스트 대상 네트워크 환경 기준으로 맞춘다.
  • 이후 telnet을 설치해서 TCP 연결 여부를 확인한다.
  • RDS는 telnet [RDS_DOMAIN] [PORT] 형태로 빠르게 테스트할 수 있다.
  • 추가로 curl -v --connect-timeout 5 "http://[DOMAIN_OR_IP]:[PORT]/" 를 사용하면 endpoint 응답이나 도메인/IP 기준 차이도 함께 볼 수 있다.