Cloudflare Tunnel SSH 설정 가이드

준비물

  • Cloudflare 계정
  • Cloudflare에 등록된 도메인
  • SSH를 열 서버

서버 설정

1. cloudflared 설치

Ubuntu/Debian

curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb

2. Cloudflare 로그인 및 터널 생성

# Cloudflare 인증
cloudflared tunnel login
 
# 터널 생성
cloudflared tunnel create <터널-이>
 
# 터널 목록 확인 (터널 ID 확인용)
cloudflared tunnel list

⚠️ 터널 생성 시 /root/.cloudflared/<터널-ID>.json 파일이 자동 생성됨. 이 파일이 없으면 터널 실행 불가.

3. 설정 파일 작성

tunnel: <터널-ID>
credentials-file: /root/.cloudflared/<터널-ID>.json
 
ingress:
  - hostname: ssh.yourdomain.com
    service: ssh://localhost:22
  - service: http_status:404

4. DNS 레코드 연결

cloudflared tunnel route dns <터널-이> ssh.yourdomain.com

5. 터널 실행

임시 실행 (테스트):

cloudflared tunnel run <터널-이>

서비스로 등록 (영구 실행):

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

클라이언트(Mac) 설정

1. cloudflared 설치

brew install cloudflared

2. SSH config 설정

Host ssh.yourdomain.com
    ProxyCommand cloudflared access ssh --hostname %h
    User <서버_사용자명>

3. 접속

ssh ssh.yourdomain.com
 
# SSH 키 사용 시
ssh -i ~/.ssh/your_key ssh.yourdomain.com

트러블슈팅

credentials 파일이 없을 때

# 파일 존재 여부 확인
ls /root/.cloudflared/*.json
 
# 없다면 터널 삭제 후 재생성
cloudflared tunnel delete <터널-이>
cloudflared tunnel create <터널-이>

config.ymlcredentials-file 경로에 .json 확장자가 포함되어 있는지 확인.


참고

  • 포트 22를 외부에 열 필요 없음 — 모든 트래픽이 Cloudflare 터널을 통해 암호화됨
  • Cloudflare Access와 연동하면 이메일 인증, SSO 등 추가 인증 설정 가능
  • 무료 플랜에서도 사용 가능