반응형

Cloudflare Zero Trust를 이용하여 홈서버(맥미니 서버)의 서비스 접속하는 방법.(n8n, code-server, ssh 접속)

1. Cloudflared 설치 및 로그인

서버(Host) 컴퓨터에서 cloudflared를 설치하고 로그인합니다.

# MacOS (Homebrew)
brew install cloudflare/cloudflare/cloudflared

# 로그인 (브라우저 인증)
cloudflared tunnel login

로그인이 완료되면 인증서(cert.pem)가 생성됩니다.

2. Tunnel 생성

터널을 생성하고 이름을 지정합니다. (예: home_server)

cloudflared tunnel create home_server

생성 후 터널 ID(UUID)와 자격 증명 파일 경로가 출력됩니다.

3. 설정 파일 (config.yml) 작성

~/.cloudflared/config.yml 파일을 생성하고 라우팅 규칙을 설정합니다.
주의: SSH 연결을 위해 service: ssh://localhost:22를 사용해야 하며, 우선순위를 위해 가장 상단에 배치하는 것이 좋습니다.

tunnel: <Tunnel-UUID>
credentials-file: /Users/myaccount/.cloudflared/<Tunnel-UUID>.json

ingress:
  # 1. SSH 연결 (우선순위 높음)
  - hostname: ssh.mydomain.net
    service: ssh://localhost:22

  # 2. code-server
  - hostname: code.mydomain.net
    service: http://localhost:8080

  # 3. n8n
  - hostname: n8n.mydomain.net
    service: http://localhost:5678

  # 4. 기본 404 처리
  - service: http_status:404

4. Application 등록

Application 을 URL과 연결

4. DNS 레코드 연결

Cloudflare DNS에 CNAME 레코드를 생성하여 도메인과 터널을 연결합니다.

# n8n
cloudflared tunnel route dns home_server n8n.mydomain.net

# code-server
cloudflared tunnel route dns home_server code.mydomain.net

# SSH
cloudflared tunnel route dns home_server ssh.mydomain.net

명령어 실행이 안 될 경우, Cloudflare 대시보드에서 CNAME 레코드를 수동으로 추가할 수 있습니다.

  • Type: CNAME
  • Name: n8n, code, ssh
  • Target: <Tunnel-UUID>.cfargotunnel.com
  • Proxy Status: Proxied (Orange Cloud)

콘솔 명령어로 자동등록됨

5. Tunnel 실행

설정이 완료되면 터널을 실행합니다. (임시 실행)

cloudflared tunnel run home_server

서버 시작시 자동실행되도록 하기 위해 시스템 서비스로 등록하여 백그라운드에서 항상 실행되도록 설정

Mac OS에서 서비스로 등록하는 방법
macOS에서는 **launchd**를 사용하여 cloudflared를 서비스(Daemon)로 등록합니다.

설치 명령 실행: 다음 명령을 실행하여 cloudflared를 시스템 서비스로 등록합니다.

sudo cloudflared service install

sudo launchctl list | grep cloudflared
19334	0	com.cloudflare.cloudflared

6. Cloudflare Access (Zero Trust) 설정

Cloudflare Zero Trust 대시보드 > Access > Applications에서 각 도메인(n8n.mydomain.net 등)에 대한 애플리케이션을 생성하고 정책(Policy)을 설정합니다.

  • Action: Allow
  • Rule: Emails / IP Ranges 등 원하는 인증 방식 설정
  • SSH 팁: SSH 접속 시 이메일 OTP는 시간이 걸려 타임아웃이 발생할 수 있으므로, Google/GitHub 같은 IdP(Identity Provider)를 연동하여 사용하는 것을 권장합니다.

이메일OTP 만들기, Add rules > include 에 내 이메일 등록
Application 설정에서 Policies 에 만들어놓은 allow_my_email 등록

7. SSH 클라이언트 접속 설정 (중요)

 ( 클라이언트 컴퓨터에서도 cloudflared 설치필요)

외부에서 SSH로 접속하려면 클라이언트 컴퓨터(접속하려는 컴퓨터)에도 cloudflared가 설치되어 있어야 하며, SSH 설정이 필요합니다.

7.1 클라이언트 컴퓨터에 cloudflared 설치

# MacOS
brew install cloudflare/cloudflare/cloudflared

# Windows/Linux 등 OS에 맞는 방법으로 설치

7.2 SSH Config 설정 (~/.ssh/config)

클라이언트 컴퓨터의 ~/.ssh/config 파일에 다음 내용을 추가합니다. 이 설정은 SSH 접속 시 cloudflared를 프록시로 사용하여 인증을 처리하게 합니다.

Host ssh.mydomain.net
  User myaccount
  ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h

참고: cloudflared 경로는 OS나 설치 방식에 따라 다를 수 있습니다. (which cloudflared로 확인)

7.3 접속 테스트

ssh ssh.mydomain.net

명령어를 실행하면 브라우저가 열리고 인증을 요구합니다. 인증 성공 시 터미널이 연결됩니다.

8. 문제 해결 (Troubleshooting)

SSH 접속 Timeout 발생 시

  1. 서버 방화벽 확인: 서버(Mac mini)의 방화벽 설정에서 cloudflared 프로그램의 들어오는 연결(Incoming Connections)을 허용해야 합니다. (방화벽에서 SSH 연결가능 프로그램에서 + 해서 /opt/homebrew/bin/cloudflared 찾아서 등록해줘야 함) 
  2. 프로토콜 확인: config.yml에서 SSH 서비스가 http://가 아닌 ssh://로 설정되어 있는지 확인합니다.
  3. 클라이언트 설정 확인: 접속하려는 컴퓨터에 cloudflared가 설치되어 있고 ProxyCommand가 설정되어 있는지 확인합니다.
반응형

+ Recent posts