본문 바로가기
Back-end

[Cloudflare] AWS EC2 서버를 Cloudflare Tunnel로 우회

by 셀킴 2025. 3. 5.
728x90
반응형

여태까지 CheckChaek서비스를 AWS EC2의 퍼블릭 IPv4 주소로 사용해 왔다
Cloudflare Tunnel을 사용하여 EC2의 퍼블릭 IP가 직접 노출되지 않도록 우회하는 작업을 했다
 
기록용으로 간략하게 그 내용을 남김
 
호스팅케이알에서 도메인 구입

Cloudflare에 도메인 등록

호스팅케이알에서 도메인 네임서버를 Cloudflare에서 제공하는 네임서버로 변경

EC2 ubuntu 서버에 cloudflared 설치

터미널에서 cloudflare 로그인 진행 - 웹으로 인증

이때 cert.pem이라는 자격 파일이 생성됨
 
이후 순서 뒤죽박죽일 수 있음
 
터널 생성


config.yml 파일 생성 및 설정

tunnel: 생성한 tunnel 아이디
credentials-file: 이전 과정에서 생성된 json 파일 전체 경로

ingress:
  - hostname: 서브도메인주소
    service: EC2 웹 서버 포트
  - service: http_status:404

 
내 경우엔 아래와 같이 설정했다

tunnel: 5d*****-****-****-****-***
credentials-file: /home/ubuntu/.cloudflared/터널아이디.json

ingress:
  - hostname: www.checkchaek.xyz
    service: http://127.0.0.1:8080
  - service: http_status:404

 
서버 포트를 127.0.0.1로 한 이유는

챗지피티


 
Cloudflare 도메인 DNS에 CNAME 레코드 추가
사실 나는 헤매다가 터미널에서 DNS 루트를 어떻게 추가를 했는데 그래서 Content가 터널 아이디로 되어있다
 
이 과정 이후 터널 실행하고 도메인 접속해도 Error 1033 코드가 나왔는데 결국은 DNS 레코드 문제였다
 
내가 이해한 바로는 A레코드는 도메인과 EC2의 퍼블릭 IP를 바로 잇기 때문에, 우회하는 Cloudflare tunnel을 사용하려면 서브 도메인을 만들어 CNAME 레코드를 사용해야 하는 것이다

챗지피티

 

 
터널 아이디를 run
 
아니면 간단하게
cloudflared tunnel run selinak
이렇게 터널 이름으로 실행해도 된다
 
근데 나중에 보니 이렇게 일반적으로 실행하면 터미널이 종료될 경우 터널도 종료되어 웹 접속이 끊긴다
그래서 찾아보니
nohup cloudflared tunnel run selinak
앞에 'nohup'을 붙이면 터미널이 닫혀도 터널은 계속 돌아간다
 
위의 모든 설정을 마쳤음에도 도메인 접속이 되지 않았다
문제는 AWS EC2 보안 그룹의 인바운드 규칙이었다
HTTP(80)와 HTTPS(443) 포트를 열었고, Anywhere IPv4로 허용해도 되지만 보안을 위해 Cloudflare의 IPv4 범위만 허용하도록 해당 값들을 일일이 지정했다
 
드디어 Cloudflare tunnel 통해 도메인 접속 성공
이제 도메인으로 접속하면 Cloudflare Tunnel을 거쳐 EC2의 웹 서버로 연결됨
 
 

 
사용자가 1명 늘어 조금 더 활성화가 된 쳌책 hahaha

728x90
반응형