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

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 |