본문으로 건너뛰기

미니 PC로 첫 홈서버 구축 - Cloudflare Tunnel을 이용한 외부 접속 설정

·450 단어수·3 분· loading
목차
My First Home Server - 이 글은 시리즈의 일부입니다.
부분 2: 이 글

Intro
#

지난 글에 이어서, 내 홈서버에 어디서든 접속할 수 있게 설정하려고 한다.

목적

설정의 정확한 목적은 다음과 같다

  1. 누구나 내 홈서버에서 실행되는 웹 서버에 접근할 수 있어야 한다. (:8080)
  2. 오직 나만이 홈서버에 SSH로 연결할 수 있어야 한다.

보통 공유기 포트포워딩을 통해 외부 접속을 해결하고 ssh는 인증으로 막지만, Cloudflare Tunnel을 사용해 포트포워딩 없이 목적을 안전하게 달성할 수 있다.

준비물

Cloudflare에 등록된 도메인만 있으면 된다.


Cloudflare Tunnel이란?
#

Cloudflare Tunnel은 내 서버를 직접 인터넷에 노출하지 않고, Cloudflare를 통해 외부에서 접근할 수 있게 해주는 기능이다. 공유기를 사용해 포트포워딩하면 외부 사용자가 내 집 공인 IP(공유기)의 인바운드 포트로 직접 들어오게 되지만, Tunnel을 사용하면 리소스(홈서버)에 설치된 cloudflared가 Cloudflare로 연결을 만들고 외부 사용자는 Cloudflare를 통해 리소스로 요청을 전달하게 된다. 공식문서

TL;DR

공유기에서 인바운드 포트를 열지 않고도 Cloudflare를 통해서 외부에서 웹서버던 SSH던 접근할 수 있다.

설정
#

Tunnels
#

Dashboard에 tunnels를 검색하고, Zero Trust > Network > Tunnels로 들어간다. 처음 들어갔다면 Cloudflare One 가입 화면이 뜨는데, 무료 플랜으로 가입하면 된다.

Create a tunnel 버튼을 누르고, Cloudflared를 선택한 후 이름만 지어주면 된다.

Connector
#

Connector에서는 터널에 붙는 운영체제만 명시해주면 Cloudflare가 알아서 명령어까지 전부 알려주는데, 서버에서 이를 실행하면 된다. 완료되면 Tunnel 대시보드에 Connector가 표시된다.

Published application routes
#

앞서 만든 Tunnels를 Cloudflare 도메인에 연결한다. 도메인을 Connector가 설치된 호스트의 특정 서비스에 연결한다고 생각하자.

나는 외부에서 HTTP와 SSH로 접근하기 위해 홈서버의 http://localhost:8080ssh://localhost:22를 각각 다른 도메인에 매핑했다.

접속 확인
#

웹 서버
#

웹 서버는 이제 전 세계 어디에서나 브라우저로 접근할 수 있다. Ubuntu엔 기본적으로 파이썬이 있으니 python3 -m http.server 8080로 임시로 서버를 키고 테스트해보자.

SSH
#

SSH는 로컬 SSH에서 cloudflared를 프록시로 사용해 접속한다.

ssh -o ProxyCommand="cloudflared access ssh --hostname %h" 리눅스유저@ssh도메인
맥에서 cloudflared 설치하기

brew install cloudflared 한 줄로 간단히 설치가 가능하다.

Access Control
#

지금은 내 홈서버의 SSH에 누구나 접속을 시도할 수 있다. 물론 인증 정보는 나만 알고 있으니 실제로 침입은 불가능하겠지만, 접속 시도가 가능하다는 점이 마음에 들지 않는다. 이럴 때 Cloudflare Access를 사용해 인증되지 않은 사용자의 SSH 접속 시도 자체를 막을 수 있다.

Access Control > Applications에서 내 SSH의 도메인을 등록하면, 여기에 IP 기반, 이메일 인증, 토큰 등 다양한 Access policy를 붙일 수 있다.

어차피 SSH는 나만 사용할 예정이므로 가장 간단한 이메일 인증 방식을 선택했다. Policy를 붙이면 이제 SSH 접속을 시도할 때 브라우저 창이 열리고 이메일 인증을 하게 되고, 이를 마치면 드디어 터미널에서 SSH로 접속할 수 있다.


Final
#

Cloudflare는 정말 무료 플랜 혜택이 어마어마한 것 같다. 이전에도 R2, Proxy, Functions 등을 잘 활용하고 있었는데, Tunnel까지 구축해보니 더욱 실감이 난다. 물론 우리나라에서 사용할 땐 무조건 해외를 경유해 속도가 떨어지는 이슈가 있지만1, 이런 기능을 제공해주는 것만으로도 너무 만족스럽다.

3-point
#

  1. Cloudflare를 통해 외부 접속 환경까지 전부 설정했다.
  2. 이제 홈서버 구축은 끝나고 가지고 놀 일만 남았다.
  3. Cloudflare는 신이다.

  1. Cloudflare는 서울 리전도 운영하지만, 국내 통신사들의 망사용료가 너무 비싸서 Cloudflare Enterprise Plan이 아니면 외국을 경우한다. 내가 이전에 Cloudflare CDN을 테스트해본결과 LA로 잡혔다. ↩︎

My First Home Server - 이 글은 시리즈의 일부입니다.
부분 2: 이 글