FreeDNS 자동 갱신 컨테이너 만들기 (feat. 스크립트)

2026. 3. 30. 23:57·Infra/DevOps

난 당연히 잘 되는줄 알았지...

FreeDNS를 잘 쓰고 있는데 IP가 변경되니 제대로 갱신되지 않고 있었다

DuckDNS는 사람들이 하도 많이써서 전용 컨테이너가 있는데 FreeDNS는 따로 없어서 직접 만들기로 했다


1. FreeDNS 토큰값 확인

- 일단 간단한 사용법에 대한 설명이 필요하다면 아래 포스팅을 참조

https://ratatou2.tistory.com/264

 

FreeDNS로 무료 DNS 발급 받기 (feat. Afraid.org vs DuckDNS.org)

DuckDNS 파업 선언..!?DuckDNS가 며칠? 아니 25년 8월 31일부터 2주 내내 이모양 이꼴이다...진짜 일 안하지?https://github.com/home-assistant/addons/issues/4144 DuckDNS error 404 since 31/08/2025 and 12/09/2025 · Issue #4144 · hom

ratatou2.tistory.com

- Dynamic DNS 메뉴로 접속한다

- Currently Linked/ON, OFF를 취향껏 고른다

ON : 한번에 모든 URL에 연결된 IP를 한번에 바꿀 수 있다 (같은 서버에서 모든 DNS를 쓸 때 편함)
OFF : 각 DNS별로 IP를 다르게 설정할 때 편하다 (DNS마다 다른 서버/IP를 가질 때 편하다)

- Direct URL을 누르면 저 링크를 누른 현 IP(서버, 컴퓨터)로 바뀌게 된다

- 어차피 뒤에서 스크립트 만들거라 지금 잠깐 바뀌어도 괜찮다 (실사용 서비스면 주의..!)

- 아무튼 저 링크를 눌러서 들어가면 토큰값을 확인할 수 있다

- 저 토큰값을 잘 복사해두자


2. 자동 갱신 스크립트 작성

- 간단히 설명을 하자면 5분(300초)마다 갱신하며, IP가 변경되었는지 확인하는 로직이 앞에 있다

- 이후에 해당 DNS가 지금 IP와 다르다면, 현 주소로 갱신한다

- 아래 스크립트의 토큰값에 '위에서 복사한 토큰값'을 붙여넣는다

- 사실 이 스크립트를 cron으로 실행해도 된다

- 다만 컨테이너로 띄우는 이유는 로그를 쉽게 확인하기 위함이다

#!/bin/sh

INTERVAL=300
IP_FILE=/data/current_ip.txt

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

log "[FreeDNS] updater started"

while true
do
  CURRENT_IP=$(curl -s https://api.ipify.org)
  OLD_IP=$(cat $IP_FILE 2>/dev/null)

  if [ "$CURRENT_IP" = "" ]; then
    log "[FreeDNS] failed to fetch public IP"
    sleep $INTERVAL
    continue
  fi

  if [ "$CURRENT_IP" != "$OLD_IP" ]; then
    log "[FreeDNS] IP changed: $OLD_IP → $CURRENT_IP"
    
    curl -s "https://freedns.afraid.org/dynamic/update.php?<토큰값>

    echo "$CURRENT_IP" > $IP_FILE
    log "[FreeDNS] update completed"
  else
    log "[FreeDNS] IP unchanged ($CURRENT_IP)"
  fi

  sleep $INTERVAL
done

3. Docker 컨테이너로 띄우기

- 업데이트 스크립트 실행시켜줄 컨테이너라 간단하다

  # FreeDNS 자동 갱신 스크립트 컨테이너
  freedns-updater:
    image: alpine:latest
    container_name: freedns-updater
    volumes:
      - ./freedns-updater/update.sh:/update.sh
      - ./freedns-updater/data:/data
    command: >
      sh -c "apk add --no-cache curl && sh /update.sh"
    restart: unless-stopped

4. 정상동작 확인

- 여기까지 왔다면 완성!

- 문제없으면 아래처럼 IP 변경 여부 체크해서 5분마다 동작한다

- 변경되면 오른쪽 사진처럼 자동으로 변경된다

지금 포스팅된 버전은 시간까지 찍히도록 업데이트 해두었음

반응형

'Infra > DevOps' 카테고리의 다른 글

Google Apps Script로 특정 메일오면 알림 받기 (feat. 디스코드)  (0) 2026.06.07
쿠버네티스(Kubernetes, K8s) 실험 일지 (feat. 튜닝 및 방향성에 대한 고찰)  (1) 2025.12.25
맥북에서 VPN 사용 시 주의할 점 (feat. WireGuard)  (0) 2025.12.12
iptable-nft 환경에서 VPN 서버 구축하기 (feat. WireGuard)  (0) 2025.12.12
Flannel이란? (feat. 쿠버네티스, Kubernetes, K8s)  (2) 2025.12.07
'Infra/DevOps' 카테고리의 다른 글
  • Google Apps Script로 특정 메일오면 알림 받기 (feat. 디스코드)
  • 쿠버네티스(Kubernetes, K8s) 실험 일지 (feat. 튜닝 및 방향성에 대한 고찰)
  • 맥북에서 VPN 사용 시 주의할 점 (feat. WireGuard)
  • iptable-nft 환경에서 VPN 서버 구축하기 (feat. WireGuard)
Ratatou2
Ratatou2
온갖 정보들을 기록해두는 메모보드 블로그
  • Ratatou2
    nak-z
    · Ratatou2 ·
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그 이전 진행 중 (24.11.25 ~)
    • 분류 전체보기 (360)
      • OS (117)
        • Linux (46)
        • Window (24)
        • Mac (40)
        • Android (7)
      • Infra (90)
        • DevOps (40)
        • Docker (14)
        • Jenkins (12)
        • n8n (14)
        • Nextcloud (8)
        • Rasberry Pi (2)
      • Dev (29)
        • App (3)
        • JAVA (7)
        • Python (1)
        • DB (3)
        • Vue (2)
        • AI (10)
        • Git (3)
      • Tools (15)
      • Study (69)
        • Algorithm (66)
        • CS (3)
      • Game (11)
        • Project Zomboid (10)
        • Don't Starve Together (1)
      • etc (23)
        • 소비전력 측정일지 (5)
        • Temp (0)
      • 개발 외 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Ratatou2
FreeDNS 자동 갱신 컨테이너 만들기 (feat. 스크립트)
상단으로

티스토리툴바