Cloudflare 터널을 이용한 n8n 접근 설정 가이드
안녕하세요! 지난 포스팅에서 도커를 이용한 n8n 셀프호스팅 설정 방법에 대해 알아보았는데요. 이번에는 Cloudflare 터널(Cloudflare Tunnel)을 이용하여 더 안전하고 간편하게 n8n에 접근하는 방법을 알아보겠습니다.
목차
Cloudflare 터널이란?
Cloudflare 터널은 공개 IP 주소 없이도 로컬 서버를 인터넷에 안전하게 노출시킬 수 있는 서비스입니다. 기존 방식에서는 방화벽 포트 개방, IP 화이트리스팅, 복잡한 VPN 설정 등이 필요했지만, Cloudflare 터널을 사용하면 이러한 설정 없이도 외부에서 로컬 서버에 접근할 수 있습니다.
작동 원리
Cloudflare 터널은 cloudflared라는 경량 소프트웨어를 사용합니다. 이 소프트웨어는 로컬 머신에서 실행되며, Cloudflare 네트워크와 암호화된 아웃바운드 연결을 만듭니다. 이 연결을 통해 트래픽이 로컬 서비스로 전달됩니다.
쉽게 설명하면:
- 사용자가 도메인(예: n8n.example.site)에 접속
- Cloudflare 서버가 요청을 수신
- Cloudflare는 cloudflared 클라이언트(터널)를 통해 요청을 로컬 서버에 전달
- 로컬 서버가 응답을 다시 터널을 통해 Cloudflare로 보냄
- Cloudflare가 사용자에게 응답 전달
Cloudflare 터널의 장점
- 보안 강화:
- 외부에서 직접 서버에 접근할 수 없어 DDoS나 직접적인 공격 위험이 감소
- 방화벽 포트를 열 필요가 없음
- 간편한 설정:
- 복잡한 네트워크 설정이나 포트 포워딩 없이 빠르게 구축 가능
- 도메인 관리와 터널 설정을 한 곳에서 처리
- 무료 SSL/TLS 인증서:
- Cloudflare에서 자동으로 SSL/TLS 인증서를 제공
- 로컬 개발 환경에서도 사용 가능:
- 개발 중인 웹 애플리케이션을 외부에 공개 가능
- 고정 IP 없이도 사용 가능
Cloudflare 터널 vs 단순 포트포워딩: 간단 비교
Cloudflare 터널의 장점
- 더 안전함: 서버 IP가 노출되지 않고, Cloudflare의 보안 기능(DDoS 보호, WAF 등) 활용 가능
- 설정 편리: 공유기 설정 변경 불필요, IP 변경에도 영향 없음
- 자동 SSL: 인증서 자동 발급 및 갱신
- 특수 환경 지원: CGNAT, 공유 네트워크, 동적 IP 환경에서도 사용 가능
- 글로벌 성능: Cloudflare 네트워크를 통한 속도 개선 가능성
포트포워딩의 단점
- 보안 취약: 서버 IP와 포트가 직접 노출되어 공격 위험 증가
- 관리 번거로움: 동적 IP 사용 시 지속적 관리 필요
- 제한된 환경: ISP나 공유 네트워크에서 포트포워딩이 막혀있을 수 있음
- SSL 설정 필요: 인증서를 직접 설정하고 갱신해야 함
사전 준비 사항
- Cloudflare 계정:
- Cloudflare 계정을 생성하고 도메인을 연결해야 합니다.
- 이전 포스팅에서 설명한 "가비아 도메인을 Cloudflare로 연결하기" 부분을 참고하세요.
- 도커로 실행 중인 n8n:
- n8n이 도커를 통해 로컬에서 실행되고 있어야 합니다.
- 기본적으로 포트 5678에서 실행됩니다.
- cloudflared 설치:
- Cloudflare 공식 문서를 참고하여 OS에 맞게 설치합니다.
Cloudflare 터널 설정 단계
1. Cloudflare 로그인 및 인증
첫 번째 단계는 cloudflared 클라이언트를 Cloudflare 계정에 연결하는 것입니다. 터미널을 열고 다음 명령어를 실행합니다:
cloudflared login
이 명령어를 실행하면 브라우저가 열리고 Cloudflare 로그인 페이지가 나타납니다. 로그인 후 권한을 부여하면 터널 사용 권한이 cloudflared 클라이언트에 부여됩니다.
2. 터널 생성
이제 n8n용 터널을 생성합니다:
cloudflared tunnel create n8n-tunnel
이 명령어는 n8n-tunnel이라는 이름의 새 터널을 생성합니다. 터널이 생성되면 인증서 파일이 자동으로 ~/.cloudflared 디렉토리에 저장됩니다. 이 인증서는 터널의 고유 ID를 포함하고 있습니다.
3. 터널 구성 파일 설정
다음으로, 터널 구성 파일을 생성합니다. 이 파일은 트래픽을 어떻게 라우팅할지 정의합니다:
cat <<EOF > ~/.cloudflared/config.yml
tunnel: n8n-tunnel
credentials-file: /Users/example/.cloudflared/2312442-7c232-49f4-852b-12323421.json
ingress:
- hostname: n8n.example.site
service: http://localhost:5678
- service: http_status:404
EOF
이 구성 파일에서:
- tunnel: 사용할 터널의 이름
- credentials-file: 터널 인증 파일의 경로 (파일명은 실제 생성된 터널의 ID로 변경해야 합니다)
- ingress: 트래픽 라우팅 규칙
- hostname: 접속할 도메인 이름
- service: 트래픽을 전달할 로컬 서비스 주소 (n8n이 실행 중인 주소)
- 마지막 규칙은 일치하는 규칙이 없을 때 404 에러를 반환합니다
참고: credentials-file 경로는 본인의 시스템 경로에 맞게 조정해야 합니다.
4. DNS 레코드 생성
터널과 도메인을 연결하기 위해 DNS 레코드를 생성합니다:
cloudflared tunnel route dns n8n-tunnel n8n.example.site
이 명령어는 Cloudflare DNS에 n8n.example.site가 n8n-tunnel을 통해 접근 가능하도록 CNAME 레코드를 자동으로 생성합니다.
5. 터널 실행
이제 터널을 실행합니다:
cloudflared tunnel run n8n-tunnel
이 명령어를 실행하면 터널이 활성화되고, 설정한 도메인(n8n.example.site)을 통해 로컬에서 실행 중인 n8n에 외부에서 접근할 수 있게 됩니다.
터널이 실행되는 동안 로그가 표시되며, CTRL+C를 누르면 터널이 중지됩니다.
도커 자동 실행 설정
컴퓨터를 재부팅해도 도커와 n8n이 자동으로 실행되도록 설정하는 방법입니다.
도커 데스크톱 자동 실행 설정 (Mac/Windows 사용자)
- Docker Desktop 실행
- 설정(Settings) 메뉴 열기
- General 탭에서 "Start Docker Desktop when you sign in to your computer" 옵션 체크
터널 자동 실행 설정
아쉽게도 터널은 컴퓨터 재부팅 시 수동으로 다시 실행해야 합니다:
cloudflared tunnel run n8n-tunnel
리눅스에서 systemd를 이용한 자동 실행 설정
리눅스 서버를 사용하는 경우 systemd 서비스를 생성하여 터널을 자동으로 실행할 수 있습니다:
- 서비스 파일 생성:
sudo nano /etc/systemd/system/cloudflared.service
- 다음 내용 추가:
[Unit]
Description=Cloudflare Tunnel
After=network.target
[Service]
User=<your-username>
ExecStart=/usr/local/bin/cloudflared tunnel run n8n-tunnel
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
- 서비스 활성화 및 시작:
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
macOS에서 launchd를 이용한 자동 실행 설정
macOS에서는 launchd를 사용하여 자동 실행을 설정할 수 있습니다:
- plist 파일 생성:
nano ~/Library/LaunchAgents/com.cloudflare.tunnel.plist
- 다음 내용 추가:
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Label
com.cloudflare.tunnel
ProgramArguments
/usr/local/bin/cloudflared
tunnel
run
n8n-tunnel
RunAtLoad
KeepAlive
- plist 파일 로드:
launchctl load ~/Library/LaunchAgents/com.cloudflare.tunnel.plist
문제 해결 및 팁
1. 터널 연결 문제
터널 연결에 문제가 있는 경우:
# 터널 상태 확인
cloudflared tunnel info n8n-tunnel
# 로그 확인
cloudflared tunnel run n8n-tunnel --loglevel debug
2. n8n 설정 조정
n8n에서 웹훅을 사용할 때는 WEBHOOK_URL 환경 변수를 설정해야 합니다. docker-compose.yml 파일에 다음과 같이 추가합니다:
environment:
- N8N_HOST=n8n.example.site
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.site
3. 여러 서비스 연결
하나의 터널로 여러 서비스를 연결할 수 있습니다. config.yml 파일에 여러 서비스를 추가하면 됩니다:
ingress:
- hostname: n8n.example.site
service: http://localhost:5678
- hostname: dashboard.example.site
service: http://localhost:3000
- service: http_status:404
마치며
Cloudflare 터널을 이용하면 복잡한 네트워크 설정 없이도 로컬에서 실행 중인 n8n에 안전하게 접근할 수 있습니다. 특히 개발 환경이나 홈 서버에서 실행 중인 서비스에 접근할 때 유용합니다.
이 방법의 장점은:
- 복잡한 포트 포워딩 설정이 필요 없음
- SSL/TLS 자동 설정으로 안전한 접속
- Cloudflare의 보안 기능을 활용할 수 있음
- 고정 IP가 없어도 언제든지 접근 가능
다음 포스팅에서는 n8n에서 실제 워크플로우를 만들고 자동화하는 방법에 대해 알아보겠습니다. 혹시 질문이나 문제가 있으시면 댓글로 남겨주세요!
참고 자료: