본문 바로가기
카테고리 없음

Cloudflare Zero Trust를 이용하여 VPN 구축하기

by ryush00 2022. 5. 29.

기존 방식, 문제점

기존에 VPN을 구축하려면 OpenVPN이나 IPSec등을 사용했다. 그러나 종종 인터넷이 끊기기도 하고 나무위키처럼 Cloudflare를 사용하는 사이트에 접속할 때마다 CAPTCHA가 뜨는 등 여러가지 불편한 점이 있고, 속도도 느린점이 있어서 대체할 수 있는 소프트웨어를 찾다가 Cloudflare Access를 발견하게 되었다.

Cloudflare Zero Trust

Cloudflare는 원래 웹 방화벽 서비스를 제공하던 업체로, 방화벽 말고도 기업을 위한 다양한 서비스를 제공중이다. 서비스를 구축하면서 전 세계에 세운 네트워크를 이용해서 Cloudflare Warp이라는 무료 VPN 서비스도 선보였다. 이 서비스를 기업을 위해 내놓은 버전이 Cloudflare Zero Trust이다.

특징

  • OpenVPN이 아닌 Wireguard 프로토콜을 이용하여 더 빠름
  • 실행이 간단함
  • 통합된 로그인을 구축할 수 있음 (SSO)
  • 직접 관리할 필요성이 줄어들음
  • 전 세계에 퍼져있는 Cloudflare 네트워크를 통해서 연결하기 때문에 전 세계 어디에서나 빠른 속도가 보장됨

속도

Cloudflare는 해외에서는 가까운 지역의 데이터센터를 사용하지만, 국내에서는 여러가지 어른들의 사정으로 인해 국내 데이터센터를 사용할 수 없다. (엔터프라이즈 플랜을 사용하면 되기는 하지만..) 그럼 속도가 느리지 않을까?

Cloudflare Zero Trust를 활성화하면 ICN으로 잘 잡힌다. 그럴 걱정은 하지 않아도 된다.

핑 테스트

핑 테스트를 진행해 본 결과 Cloudflare Zero Trust가 더 빠른 것을 확인할 수 있다.

OpenVPN을 사용한 경우

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=103 time=52.609 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=103 time=54.255 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=103 time=47.374 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=103 time=53.256 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=103 time=54.183 ms

Cloudflare Zero Trust를 사용한 경우

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=119 time=43.573 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=43.103 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=42.350 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=119 time=42.467 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=119 time=43.342 ms

실제로 VPN 구축해보기

실제로 해보지 않으면 모른다! 직접 Cloudflare Zero Trust를 이용해서 VPN을 구축해보자. 필자는 집 공유기 네트워크를 클라우드플레어에 붙이도록 할 것이다.

윈도우 컴퓨터를 기준으로 설명할 것이다. 맥 사용자는 아래 링크를 참고해서 진행하면 된다. 거의 대부분의 명령어나 절차가 비슷하니 어려움은 없을 것이다.

1. 설치

사이트(https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/#1-download-and-install-cloudflared)에서 맞는 버전을 받아주자.

KT 인터넷을 이용한 Github 다운로드

그 와중에 KT 해외 인터넷이 바보가 되어서 Cloudflare Warp VPN을 켰다. 누르자마자 다운로드가 끝나는 모습이다.

Cloudflare Warp를 이용한 Github 다운로드

2. 로그인

명령 프롬프트를 관리자 권한으로 열어서 아래 명령어를 입력해서 로그인을 해주자. 브라우저가 뜨고 로그인을 하게 되면 사용자폴더\.cloudflared\cert.pem에 인증서가 생성된다.

C:\Windows\system32>cloudflared login
A browser window should have opened at the following URL:

https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org

If the browser failed to open, please visit the URL above directly in your browser.
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
C:\Users\ryush00\.cloudflared\cert.pem

3. Tunnel 생성

명령어를 입력하면 home이라는 이름의 터널이 생기고 .cloudflared 폴더 아래에 json 파일이 생긴다. 터널 연결시 사용하는 인증 파일이다.

C:\Windows\system32>cloudflared tunnel create home
Tunnel credentials written to C:\Users\ryush00\.cloudflared\d374f780-xxxx-xxxx-xxxx-0e8b0bfd3ea8.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel home with id d374f780-xxxx-xxxx-xxxx-0e8b0bfd3ea8

4. 라우트 추가

집 아이피 대역을 home으로 라우팅시키도록 설정해주자.

C:\Windows\system32>cloudflared tunnel route ip add 192.168.0.0/24 home
Successfully added route for 192.168.0.0/24 over tunnel d374f780-xxxx-xxxx-xxxx-0e8b0bfd3ea8

4. Split Tunnel 기능 설정

기본적으로 내부 네트워크 등은 VPN을 타지 않도록 설정이 되어있다. 우리는 내부 네트워크에 접속할 수 있어야 하기 때문에 192.168.0.0/16 대역을 지워주자.

Settings -> Network -> Split Tunnels

5. Proxy 켜기

Proxy 기능이 꺼져있으면 내부망 접속이 되지 않는다.

Cloudflare Zero Trust 접속하기

이제 https://1.1.1.1/에서 클라이언트를 설치한 후 설정에서 Login to Cloudfare Zero Trust 버튼을 눌러서 계정을 연결시킨 후 VPN을 켜주자.

시험을 위해서 내부 네트워크가 아닌 다른 네트워크(폰 핫스팟 등)으로 접속한 후 VPN에 연결해야 한다.

이제 내부망에 Cloudflare VPN을 통해 접속할 수 있게 되었다.


가격을 보자면 인원당 7$ 수준으로, 아마존 웹호스팅 기준으로 한달 트래픽이 6TB일 경우 774$쯤 하는데, VPN 내에서의 인터넷 사용등으로 인한 추가 트래픽 요금에 대한 부담이 없고, 기존 VPN과 다르게 바이러스 검사 등의 추가 기능이 포함된 점을 고려하면 비교적 합리적이지 않을까. 게다가 50명 이하일 경우 무료이다!

본 글에서는 네트워크 자체를 Zero Trust 네트워크에 연결하는 방법을 사용했는데, 이보다 보안을 더 강화시키려면 라우팅이 아닌 각 서비스별로 직접 tunnel을 설정해주면 된다. 권한을 설정해서 접근 제어도 가능하다는데, 관련 내용은 추후 포스팅에서 다루도록 하겠다.

댓글