본문 바로가기

Develop

Cloudflare Tunnel로 홈 서버 외부 접속 설정하기

반응형

 

#홈서버 #CloudflareTunnel #Ubuntu #맥미니 #외부접속

Cloudflare Tunnel로 홈 서버 외부 접속 설정하기 (포트포워딩 없이)

📌 환경
- 홈 서버: Mac mini 2012 Late / Ubuntu 24.04 LTS
- 인터넷: KT (공유기: TP-Link Deco XE75 Pro)
- 도메인: Cloudflare에서 관리 중
- 목표: 회사 맥북에서 SSH 및 Portainer 접속

왜 Cloudflare Tunnel인가?

홈 서버에 외부에서 접속하는 방법은 크게 세 가지가 있습니다.

방법 설정 난이도 보안 비용
포트포워딩 쉬움 낮음 ⚠️ 무료
Tailscale VPN 매우 쉬움 높음 ✓ 무료(개인)
Cloudflare Tunnel 보통 높음 ✓ 무료

회사 맥북에서 접속해야 하는데 회사 보안 정책으로 VPN 설치가 차단되어 있었습니다. Cloudflare Tunnel은 VPN이 아닌 HTTPS 트래픽을 사용하기 때문에 회사 방화벽에 걸리지 않습니다. 또한 Mac mini 쪽에서 Cloudflare로 먼저 연결을 유지하는 방식이라 포트포워딩도 불필요합니다.

사전 준비

  • Cloudflare 계정 (무료)
  • Cloudflare에서 관리 중인 도메인 (네임서버가 Cloudflare로 설정되어 있어야 함)
  • Ubuntu가 설치된 홈 서버
💡 도메인의 네임서버가 아직 Cloudflare로 변경되지 않았다면, cloudflare.com → Add a domain에서 도메인 추가 후 네임서버를 변경해야 합니다. 전파까지 보통 10분~1시간 소요됩니다.

Step 1. cloudflared 설치

홈 서버(Ubuntu) 터미널에서 순서대로 실행합니다.

curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" \
  | sudo tee /etc/apt/sources.list.d/cloudflared.list

sudo apt update && sudo apt install cloudflared

설치 확인:

cloudflared --version

Step 2. Cloudflare 로그인

cloudflared tunnel login

실행하면 URL이 출력됩니다. 홈 서버에 브라우저가 없다면 해당 URL을 복사해서 다른 기기의 브라우저에서 열어 도메인을 선택하고 승인합니다.

✅ 성공 시 출력:
You have successfully logged in.
인증서가 ~/.cloudflared/cert.pem에 저장됩니다.

Step 3. 터널 생성

cloudflared tunnel create mac-mini-2012
✅ 성공 시 출력 예시:
Created tunnel mac-mini-2012 with id 8ec5845a-xxxx-xxxx-xxxx-xxxxxxxxxxxx
터널 ID(UUID)를 메모해 둡니다.

Step 4. config.yml 작성

sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
tunnel: <터널ID>
credentials-file: /etc/cloudflared/<터널ID>.json

ingress:
  - hostname: ssh.yourdomain.com
    service: ssh://localhost:22
  - hostname: portainer.yourdomain.com
    service: https://localhost:9443
    originRequest:
      noTLSVerify: true
  - service: http_status:404
💡 noTLSVerify: true가 필요한 이유
Portainer는 자체 서명 인증서(self-signed)를 사용하기 때문에 cloudflared가 내부 HTTPS 연결 시 인증서 검증을 건너뛰어야 합니다.

자격증명 파일을 /etc/cloudflared/로 복사합니다.

sudo cp ~/.cloudflared/<터널ID>.json /etc/cloudflared/
sudo cp ~/.cloudflared/cert.pem /etc/cloudflared/

Step 5. DNS 레코드 등록

cloudflared tunnel route dns mac-mini-2012 ssh.yourdomain.com
cloudflared tunnel route dns mac-mini-2012 portainer.yourdomain.com
✅ 성공 시 출력:
Added CNAME ssh.yourdomain.com which will route to this tunnel

Step 6. 서비스 등록 (부팅 시 자동 시작)

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

상태 확인:

sudo systemctl status cloudflared
✅ 정상 실행 확인:
Active: active (running)

Step 7. 클라이언트(맥북) SSH 설정

접속할 맥북에 cloudflared를 설치합니다.

# macOS (Homebrew)
brew install cloudflared

# Homebrew가 안 된다면 직접 설치
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-amd64.tgz | tar xz
sudo mv cloudflared /usr/local/bin/

~/.ssh/config에 아래 내용을 추가합니다.

Host mac-mini-2012
  HostName ssh.yourdomain.com
  User dennis
  ProxyCommand cloudflared access ssh --hostname %h

이후 접속은 아래 명령어 한 줄로 끝입니다.

ssh mac-mini-2012

완성 후 접속 주소 정리

서비스 접속 방법 비고
SSH ssh mac-mini-2012 cloudflared 설치 필요
Portainer https://portainer.yourdomain.com 브라우저 바로 접속

나중에 서비스 추가할 때

/etc/cloudflared/config.yml에 항목을 추가하고 DNS 등록 후 재시작하면 됩니다.

# config.yml ingress에 추가 예시
- hostname: next.yourdomain.com
  service: http://localhost:11000
# DNS 등록
cloudflared tunnel route dns mac-mini-2012 next.yourdomain.com

# 재시작
sudo systemctl restart cloudflared
🎉 마무리
포트포워딩 없이, VPN 없이, 공인 IP 몰라도 어디서든 안전하게 홈 서버에 접속할 수 있게 됐습니다. HTTPS 인증서도 Cloudflare가 자동으로 붙여주기 때문에 별도 설정이 필요 없습니다.
반응형