반응형
#홈서버 #CloudflareTunnel #Ubuntu #맥미니 #외부접속
Cloudflare Tunnel로 홈 서버 외부 접속 설정하기 (포트포워딩 없이)
📌 환경
- 홈 서버: Mac mini 2012 Late / Ubuntu 24.04 LTS
- 인터넷: KT (공유기: TP-Link Deco XE75 Pro)
- 도메인: Cloudflare에서 관리 중
- 목표: 회사 맥북에서 SSH 및 Portainer 접속
- 홈 서버: 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
✅ 성공 시 출력 예시:
터널 ID(UUID)를 메모해 둡니다.
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 연결 시 인증서 검증을 건너뛰어야 합니다.
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 tunnelStep 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가 자동으로 붙여주기 때문에 별도 설정이 필요 없습니다.
포트포워딩 없이, VPN 없이, 공인 IP 몰라도 어디서든 안전하게 홈 서버에 접속할 수 있게 됐습니다. HTTPS 인증서도 Cloudflare가 자동으로 붙여주기 때문에 별도 설정이 필요 없습니다.
반응형