개요
특정 상황에서 개발을 진행하다 보면 로컬에서 실행 중인 서버나 애플리케이션을 외부 인터넷에 노출시키는 서비스가 필요한 상황이 생긴다.
도메인이 있는 상황이라도 방화벽 설정이나 포트 포워딩도 필요하고 경우에 따라 좀 더 복잡한 상황이 생기기도 한다.
현재 시점에 가장 많이 사용되는 건 ngrok 인 것 같다.
그래서, 나도 회원가입을 하고 사용해 보았다.
일단, 지금 당장 나름 편하게 설정이 가능하고 https://xxxx-xxx-xx-xx.ngrok-free.app 형식으로 도메인 형태로 노출도 가능하다.
특별히 더 이상 건드려야 할 설정도 없다.
다음과 같이 터미널에서 실행된 모습을 확인할 수 있다.
하지만, 새로운 세션을 사용하게 되면 그때마다 도메인 주소가 바뀐다.
무료 플랜으로 인한 제한 사항이다.
유료는 고정된 도메인 주소 지정이 가능하다고 한다.
Cloudflared 소개
ngrok 과 유사한 Cloudflared 서비스가 존재한다.
단, 조건이 있다.
Clouflare 에서 관리되는 개인 도메인을 보유하고 있고 Cloudflare DNS 를 사용해야만 한다.
나한테 딱 맞는 상황이다.
게다가 특별히 Cloudflare 에서 추가 결제 없이 사용할 수 있다.
Cloudflare 사이트에서 터널 관리
Zero Trust – 네트워크 – Tunnels 페이지에서 터널 목록을 관리할 수 있다.
새로운 터널을 생성하거나, 기존 터널 설정을 수정할 수 있다.
또한 실시간으로 요청되는 트래픽에 대한 로그도 확인이 가능하다.
클라이언트(커넥터)
커넥터라 지칭하는 클라이언트 실행 파일을 다운로드 해서 사용한다.
해당 실행 파일을 사용해서 윈도우 서비스를 설치 및 삭제가 가능하다.
윈도우 서비스로 등록이 되기 때문에 개발중인 PC 에서 항상 사용이 가능하다.
물론, 개발이 끝나면 서비스 자체를 삭제해 버리면 된다.
Cloudflared 터널
CLI 에서도 터널 관리가 가능하지만, Cloudflared 의 경우 Web 에서 할 수 있는 기능이 훨씬 더 많고 아주 쉽게 사용이 가능하다.
그래서 Cloudflare 사이트에서 직접 터널을 생성하고 로그도 확인하는 과정을 살펴본다.
터널과 연동되는 ASP.Net 프로젝트는 기본 템플릿으로 생성해서 포트만 매핑해서 테스트가 가능하므로, 굳이 소스 코드를 첨부하지 않는다.
미리 기본 템플릿으로 프로젝트 생성하기를 바란다.
터널 목록
cloudflare 사이트에 접속해서 로그인 한 다음 좌측 메뉴에 보면 Zero Trust 를 클릭해서 페이지를 이동한다.
네트워크 – Tunnels 를 클릭해서 페이지를 이동한다.
그러면 생성된 터널 목록을 볼 수 있다.
터널 생성
터널을 생성하는 과정에 대해서 살펴본다.
터널 추가 버튼을 클릭한다.
Cloudflared 와 WARP Connector 2 가지가 보이는데
좌측의 Cloudflared 를 선택한다.
터널 이름을 지정하고 터널 저장 버튼을 클릭한다.
운영 체체는 Windows 를 선택했고, 64-bit 버튼도 클릭하면 다운로드 링크가 변경이 된다.
해당 링크에서 msi 파일을 다운로드해서 설치해도 되지만, Windows 64-bit 최신 버전 실행파일 을 직접 다운로드 해도 된다.
자신의 운영체제에 해당하는 파일을 사용하면 된다.
관리자 권한으로 터미널(Powershell)을 실행한 다음 해당 폴더로 이동해서 위 페이지에 표시된 스크립트를 복사해서 실행한다.
PS D:\Program Files\CloudFlared> ./cloudflared.exe service install eyJhIjoiOGQ2OTk2NDJiN2ZlMWVjM2IxZDlmYTMwMjI4ZjEwMDYiLCJ0IjoiOWM0NmU0MzAtYzliZC00MDEwLWJmYzItZDFiM2FjNWY2NzE4IiwicyI6IlpHTXlaamRqTnpJdFpHTTNOaTAwTldJMUxXSmxPV1V0WkRRMU5HVmxNamcxTldNNSJ9
2025-04-28T08:46:21Z INF Installing cloudflared Windows service
2025-04-28T08:46:21Z INF cloudflared agent service is installed windowsServiceName=Cloudflared
2025-04-28T08:46:21Z INF Agent service for cloudflared installed successfully windowsServiceName=Cloudflared
설치가 완료되면 페이지 하단에 다음과 같이 표시가 된다.
이미 설치가 된 경우는 cloudflared service uninstall 실행해서 제거 한 다음 다시 설치 스크립트를 실행하면 된다.
로컬에 설치된 커넥터와 Cloudflared 터널 서버가 제대로 연결된 것을 확인할 수 있다.
다음 버튼을 클릭해서 연결된 하위 도메인을 직접 입력하고, 보유한 도메인도 선택해 준다.
외부에서 지정된 도메인으로 들어온 요청을 커넥터가 설치된 로컬의 해당 프로토콜의 URL 로 터널링을 한다는 의미한다.
개발 중인 서비스에 맞게 프로토콜과 URL 도 지정해 준다.
터널 저장 버튼을 클릭하면 다시 터널 목록 화면으로 이동한다.
Cloudflare 내부에서 자동으로 처리되는 부분이지만, 해당 도메인의 DNS 설정을 확인해 보면 위에서 지정한 CNAME 레코드가 추가된 것을 확인할 수 있다.
터널 로그
터널 단위로 실시간 트래픽 로그를 확인하는 방법에 대해서 살펴본다.
터널 목록 페이지에서 커넥터 ID 를 클릭한다.
커넥터 진단 페이지에서 라이브 로그 하단의 로그 스트림 시작 버튼을 클릭하면, 실시간 트래픽에 대한 로그를 확인할 수 있다.
로컬에서 개발 중인 서비스를 지정 도메인으로 다음과 같이 요청해보면
실시간 로그를 확인할 수 있다
TLS(SSL) 인증서 검증 오류
위 로그 중에서 error Request failed 로그를 클릭해 보면 우측에 해당 로그에 대한 상세 기록이 보여진다.
개요 부분을 살펴보면 다음과 같다
JSON
{
"error": "Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: tls: failed to verify certificate: x509: certificate signed by unknown authority",
"connIndex": 0,
"originService": "https://localhost:8888",
"ingressRule": 0
}
ASP.Net 의 경우 로컬 개발 중에 사용하는 자체 서명(self-signed)된 인증서가 공식적으로 신뢰할 수 있는 CA(Certificate Authority) 에 의해 발급되지 않았기 때문에 발생하는 문제이다.
개발 환경에 CA 인증서를 구성하는 것 보다는 Cloudflared 에 인증서 검증을 무시하도록 설정하는 것이 좀 더 간단하다
터널 목록 화면에서 우측 맨 마지막의 메뉴를 클릭해서 구성을 선택한다.
터널 수정 화면의 공개 호스트 이름 탭을 선택한 다음
지정된 호스트의 편집 메뉴를 활성화 한다.
추가 응용 프로그램 설정을 클릭한 다음 TLS 설정을 클릭하면 다음과 같이 TLS 확인 없음 옵션을 볼수 있다.
해당 옵션을 켠 다음 호스트 이름 저장 버튼을 클릭하면 설정이 저장된다.
다시 호출해 보면 다음과 같이 정상적으로 호출이 되는 것을 확인할 수 있다
0 Comments