Cloudflare Zero Trust는 엔터프라이즈 단위에서 가상 네트워크를 안전하게 관리하기 위해서 제작되었습니다. Tailscale과 비슷하지만, Cloudflare 도메인과 함께 작동하여 특정 주소의 특정 포트를 직접 연결할 수 있는 등 더 편리한 점이 많습니다. 이번 글에서는 개인적인 용도에서 간단히 사용하는 방법을 알아보겠습니다.
가입하기
Cloudflare를 기존에 사용하고 있었다면, Zero Trust 서비스만 신청하면 됩니다. 로그인한 후, 대시보드 사이드바에서 Zero Trust서비스를 찾을 수 있습니다. 사용하기 위해 해외결제가 가능한 신용카드가 필요하지만, 사용자 50명까지는 무료입니다.
Cloudflare를 기존에 사용하지 않으셨나요?
기존에 Cloudflare를 사용하지 않으셨다면, 이번 기회에 네임서버를 Cloudflare로 이전해서 사용해보세요. 원본 IP주소를 알 수 없게 프록싱해주는 점, 자체 CDN을 통해 웹페이지 캐싱을 하여 속도를 높여주는 점, SSL인증서 갱신도 자동으로 되어 저는 적극적으로 사용하고 있습니다.

서버 설정하기
VPN을 사용하기 위해서는 먼저 서버용 클라이언트를 설치해야 합니다. 좌측 Networks -> Tunnels 를 선택해 새 터널을 만듭니다.

Cloudflared 와 WARP Connector를 사용할 수 있습니다. 전자는 서버에서는 호스팅만 할 수 있고, VPN내에 있는 다른 컴퓨터에는 접근하지 못하는 반면, 후자는 서버가 VPN에 접속해 VPN내부로 접근할 수 있는 옵션입니다. 각자의 필요에 따라 선택해 설치하면 되겠습니다. 후자가 일반적인 VPN의 모습이지만, 필자의 사용 환경에서는 큰 필요성을 느끼지 못했습니다. 추후 MSA를 사용해 서비스를 개발할 때쯤 필요성을 느끼게 될지도 모르겠습니다.
개인 사용환경에 맞게 설치한 후에는 HEALTY
로 상태가 표시되었는지 확인해주세요.
Private Network 탭에서는 VPN으로부터 라우팅받을 CIDR 범위를 지정할 수 있습니다. 이는 VPN안에서의 라우팅 테이블과 같이 작동합니다. VPN 에서 특정 IP로 접근했을 때, 이 라우팅 규칙에 따라 어떤 서버로 트래픽을 전송할지 결정하게 됩니다.
Public Hostname 탭에서는 해당 서버를 통해 내부망 주소의 특정 포트를 도메인으로 프록싱할 수 있습니다. 단순히, 공유기의 포트포워딩 기능이 외부망 IP로 포워딩되는 것이 아닌, 도메인으로 바로 포워딩되도록 하는 기능이라 생각하면 됩니다. Public Hostname을 지정하면 자동으로 Cloudflare의 DNS에 등록됩니다.
WARP 클라이언트 설정
WARP클라이언트는 이전에 Private Network에 지정한 CIDR 범위에 접근하기 위해 사용하는 VPN Client입니다. Public Hostname만 사용한다면, WARP클라이언트는 필요가 없습니다. 외부에 공개하지 않고 내부적으로만 사용해야 하는 관리 페이지나 대시보드가 있다면 WARP를 통해서 어디서나 접근할 수 있도록 만들 수 있습니다.
- 각 기기에 맞는 Cloudflare WARP 클라이언트를 설치합니다. Android, iOS, Mac, Windows,, 등등을 모두 지원합니다.
- 설치한 직후에는 단순히 Cloudflare 서버의 VPN입니다. 이 클라이언트를 우리가 만든 Zero Trust 망에 붙이기 위해서는 로그인을 해야합니다.
- 설정 -> 계정으로 이동해 Zero Trust로 로그인합니다.
- VPN을 활성화합니다.
이제 Private Network에 지정한 CIDR범위에 속하는 IP주소로 접근해보세요. Cloudflare 를 통해 내 서버의 데몬에서 요청을 처리하고 응답할 것입니다.
Private Network에 접근할 수가 없어요.
먼저, WARP VPN이 제대로 작동하고 있는지 확인해보세요. 그래도 작동하지 않는다면 Cloudflare Zero Trust 대시보드 -> 설정 -> WARP Client -> Profile settings 에서 해당하는 프로필 선택 후, Split Tunnels 규칙을 확인해보세요. Split Tunnel에서 Exclude 되어 있다면, VPN을 통해 트래픽이 처리되는 것이 아닌, 로컬에서 직접 처리됩니다. 초기에 설정된 값이 주로 사용하는 내부망 주소여서 VPN에서 제외한 것 같습니다. 다만, 개인의 경우 주로 내부망을 포워딩하기에 처음 사용시 어려울 수 있습니다. 필자 또한 처음 Split Tunnels 규칙으로 몇일간 구글링을 했던 기억이 있습니다.
Cloudflare Access 사용하기
외부에 공개해서는 안 되지만, 그렇다고 VPN Client를 설치한 환경에서만 사용하지는 않는다면, Cloudflare Access를 사용해보세요. Access는 Public Hostname에 접근하기 전에, 로그인 UI를 표시하고, 토큰을 가지고 있어야만 접근할 수 있도록 하는 서비스입니다. 인증/인가 과정을 Cloudflare에서 해주기 때문에 대시보드에서 설정만 하면 사용할 수 있습니다.
- 편하게 사용하기 위해서는 Zero Trust 대시보드 -> 설정 -> Authentication 에서 Login methods 를 추가해주세요. 기본적으로 One-time PIN이 설정되어 있지만, 이는 접근할 때 마다 이메일로 일회용 코드를 전송받아야 해요.
- 준비가 되었다면, 사이드바에서 Access 탭을 선택하고, 새 애플리케이션 생성 버튼을 눌러주세요.
- Self-hosted 를 선택합니다.
- 적당한 이름을 입력하고, Add public hostname을 클릭해 보호하길 원하는 hostname을 작성합니다.
- 내가 접근할 수 있도록 보안 정책을 설정한 후, 저장합니다.
이제 지정한 hostname으로 Tunnel을 사용해 Public Hostname을 할당하면 완료됩니다.

Cloudflare Access로 보호된 페이지에 접근하는 경우에는 위와 같이 로그인 페이지가 표시되게 됩니다.
번외
다른 사람 계정도 추가해서 사용하고 싶어요
WARP에 추가하고자 한다면, 설정 -> WARP Client -> Profile settings 를 생성해주세요. Build an expression 항목에 해당 유저만이 가진 속성을 사용해 인증할 수 있도록 하면 됩니다. 주로 User email 항목을 사용합니다.
Cloudflare Access에 추가하고자 한다면 생성한 Application 설정 -> Policies 탭에서 Policy를 새로 생성해주세요. 이때 또한 해당 유저만이 가진 속성으로 인증할 수 있게 하면 됩니다.
무료 계정의 경우 최대 50명까지 추가해 사용할 수 있으니 유의하세요.
실제 IP와 포워딩한 IP를 다르게 설정하고 싶어요.
필자 또한 이런 기능을 제공하는 것이 없는지 찾아보았는데요, Zero Trust 내에 이러한 기능은 없습니다. 알아본 방법중 최선의 방법은 서버에서 가상 네트워크 인터페이스를 만들어 이를 프록싱하는 것입니다.
VPN 내부망에서 접근할 IP 주소를 자꾸 까먹어요
대시보드 -> Gateway -> DNS Policy를 생성해서 도메인으로 접근할 수 있습니다. 필자 또한 내부망 IP를 자주 까먹어서 임의의 도메인을 지정하여 사용하고 있습니다.
답글 남기기