개발 기록/CloudFlare

Cloudflare Tunnel - 이론편

시유후 2026. 3. 5. 01:48

서버에서 서비스를 외부에 노출하려면 일반적으로 공인 IP, 포트포워딩, SSL 인증서, DDNS 설정 등이 필요하다. 특히 자취방이나 사내망처럼 공유기 설정을 건드릴 수 없는 환경에서는 이 과정 자체가 불가능한 경우도 많다. 또한 IP를 열고, 포트를 여는 과정에서 보안상 취약점이 발생할 수 있다.

 

Cloudflare Tunnel은 이런 과정 없이, 서버 내 서비스를 Cloudflare 네트워크를 통해 안전하게 외부에 노출하는 서비스이다. 공인 IP도, 인바운드 포트 개방도 필요 없다.

Configuration

어떤 방식으로 진행이되는가 하면, 아래와 같다.

  1. 사용할 도메인을 정하고, cloudflare tunnel을 cloudflare dashboard내부에서 설정한다.
    1. 위 설정을 진행하면, cloudflare서버내 엣지에 도메인을 연결한다.
  2. 서비스를 제공하는 서버 내 cloudflared 서비스를 띄워, 엣지 서버와 연결한다.
    1. 이때, 연결은 4개의 outbound QUIC 연결이 생성된다.
    2. 4개의 연결을 생성하는 이유는 재연결 시, 서비스 중단을 막기 위함과 고가용성을 보장하기 위함이다.
  3. cloudflared 서비스에서 각 도메인이 어떤 서비스로 연결될지 설정한다.

기본 설정은 간단하게 설정할 수 있다.

위 과정을 통해 공인 ip없이, inbound 포트 개방없이 간단하게 외부로 서비스를 전달할 수 있다.

How?

아웃바운드만 열고도, cloudflared 서비스가 cloudflare 엣지 서버로 미리 연결을 뚫어 두었기 때문에, 따로 인바운드를 열지 않고도 HTTP 통신이 가능하다. TCP든 QUIC이든 연결을 맺는 행위만 아웃바운드이고, 수립된 연결은 양방향이기 때문이다. 방화벽은 일반적으로 내부에서 시작한 연결의 응답 트래픽은 허용하기 때문에, cloudflared가 먼저 맺은 연결을 통해 들어오는 트래픽은 차단되지 않는다.

요청 흐름

그럼 사용자가 접속할 때 어떤일이 일어나는지 확인해보자

  1. 사용자가 지정된 도메인으로 접속한다.
  2. 도메인에 연결된 cloudflare 엣지서버에 접속하게 된다.
  3. 이미 연결되어있는 연결을 이용해 요청을 서버내 cloudflared 서비스로 전송한다.
  4. 서버내 cloudflared 서비스는 도메인을 확인 후, 각 로컬의 서비스로 요청을 전송한다.
  5. 요청이 흘러온 방향의 반대로 응답을 내보낸다.

장-단점

장점

  • 공인 IP, 포트포워딩, DDNS, SSL 인증서 설정이 전부 필요 없다
  • 인바운드 포트를 열지 않으니 외부에서 포트 스캔에 잡히지 않는다
  • Cloudflare의 DDoS 방어, WAF가 기본 적용된다

단점

  • UDP 기반 프로토콜은 사용할 수 없다.
  • 모든 트래픽이 Cloudflare를 경유하므로, Cloudflare 장애 시 서비스도 같이 죽는다
  • TLS 종단이 Cloudflare Edge에서 일어나기 때문에 Cloudflare가 평문 트래픽을 볼 수 있다 - 즉 국가 규제에 제한되는 서비스, 민감한 개인정보를 사용하는 서비스는 사용할 수 없다.

 

UDP는 왜 쓸 수 없을까?

애초에 cloudflare tunnel은 HTTP연결을 위한 서비스 이며, 프로토콜이 UDP를 지원하는 순간 많은 복잡성이 추가되기 때문이다. 현재 cloudflared의 경우 TCP/IP 모델 내 전송계층에 속하는 QUIC 프로토콜을 사용한다.

 

QUIC프로토콜에서는 한번 연결을 맺으면 요청 - 응답 과정이 지속적으로 발생한다. UDP의 경우 연결 개념 없이 패킷을 보내기 때문에, 어떤 클라이언트의 패킷인지 식별하고 응답을 되돌려줄 대상을 관리하는 세션 테이블을 직접 구현해야 한다.

 

즉, 목적지를 정하고 다시 되돌려줄 곳을 정하고, 또 타임아웃을 위한 시간도 측정해야한다. 이 모든 과정을 cloudflared에 추가로 구현해야할 뿐만 아니라, 사용자도 conf파일등을 통해 제어해주어야하는 오버헤드가 생긴다. 또한, 엣지서버와 cloudflared에 UDP 패킷을 캡슐화하고 복원하는 method가 추가로 구현이 되어야한다.

 

위 과정이 HTTP 연결을 위한 사용자는 잘 사용하지 않는 UDP를 지원하기에는 너무 많은 작업량과 성능 손실이 발생할 수 있기에, UDP는 따로 Cloudflare Spectrum 이라는 서비스의 형태로 제공하고 있다.

마무리

Cloudflare Tunnel의 핵심은 아웃바운드 연결만으로 서비스를 외부에 노출할 수 있다는 점이다. 공인 IP도, 포트포워딩도 필요 없다. 다음에는 실제로 세팅하는 과정을 정리하고, cloudflared가 사용하는 QUIC 프로토콜도 좀 더 알아본다.