본문 바로가기
홈서버

Cloudflare를 이용해 홈서버 IP 숨기기

by 나하니인데 2025. 2. 10.
반응형

홈서버를 운영하면서 도메인을 Cloudflare에 연결했을 때, nslookup을 실행하면 여전히 공유기의 공인 IP가 노출되는 것을 발견했습니다. 이는 보안상 문제가 될 수 있기 때문에, Cloudflare의 프록시 기능을 활용하여 공인 IP를 숨기고, 추가로 HTTPS까지 설정하는 과정을 정리했습니다.

현재 문제 상황

  1. Cloudflare에서 도메인을 연결하였고, nslookup을 실행하면 집 공유기의 공인 IP가 노출됨.
  2. 공유기에서 80, 443 포트를 홈서버로 포워딩하여 직접 접근이 가능함.
  3. Cloudflare 프록시를 활성화하지 않은 상태(DNS 전용)라서 보안 위험이 있음.
  4. HTTPS로 통신하고 싶지만, 홈서버에서 SSL 설정이 필요함.

해결 방법

1. Cloudflare에서 프록시(Proxy) 활성화

Cloudflare의 프록시 기능을 활성화하면 도메인 조회 시 Cloudflare의 IP가 표시되고, 실제 홈서버의 IP는 감춰집니다.

 

1-1. Cloudflare 대시보드 접속DNS 관리 메뉴 이동

1-2. 현재 A 레코드의 프록시 상태가 'DNS 전용' 이라면, 이를 '프록시됨' 로 변경.

1-3. 변경 후 약 5~10분 정도 기다린 후 nslookup 또는 dig 명령어로 확인

 

기존에 

적용 후

 

nslookup 테스트 결과 

 

결과 확인하면 172. 67.150.123, 104.21.96.25 주소가 나오닙다.

 

Cloudflare 에서 사용하는 IP 대역을 공식문서에서 찾아보면 

해당 주소 목록이 나오는데 제 도메인 nslookup 하면 해당 대역에서 나오는것으로 확인이 됩니다. 이렇게 집 공유기 IP 주소를 Cloudflare 프록시 기능을 통해서 숨기는것을 성공했습니다. 하지만 예전에 제가 해당 설정을 하기전에 홈서버에다가 ddns(공유기의 공인 IP가 동적으로 변경될 경우, Cloudflare API를 사용하여 자동으로 업데이트 쉘) 쉘을 작성을 했는데 해당 내용도 쫌 변경을 해야겠습니다.

 

#!/bin/bash

# Cloudflare API 정보
CF_API_TOKEN="YOUR_CLOUDFLARE_API_TOKEN"
CF_ZONE_ID="YOUR_CLOUDFLARE_ZONE_ID"
CF_RECORD_ID="YOUR_CLOUDFLARE_RECORD_ID"
CF_DOMAIN="home.domain.com"

# 현재 공인 IP 가져오기
CURRENT_IP=$(curl -s https://ifconfig.me)

# Cloudflare에 IP 업데이트 요청
RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${CF_DOMAIN}\",\"content\":\"${CURRENT_IP}\",\"ttl\":1,\"proxied\":true}")

# 기존에는 --data "proxied\":false 값을 true로 변경


# 업데이트 결과 출력
if echo "$RESPONSE" | grep -q '"success":true'; then
    echo "IP updated to ${CURRENT_IP}"
else
    echo "Failed to update IP"
    echo "$RESPONSE"
fi

 

이 스크립트를 실행하면 공인 IP가 변경될 때마다 Cloudflare의 A 레코드가 자동으로 갱신됩니다.

저는 10분마다 쉘 실행하도록 crontab 설정을 했습니다.

crontab -e
*/10 * * * * /path/update_ip.sh

 

반응형

댓글