IP 변경 시 도메인 자동 갱신 시스템 구축하기 (feat. Docker & DuckDNS)

2025. 5. 31. 12:12·Infra/Docker

IP 바뀌면 서비스 망해요?

호고동..!

생각해보니 현 서버 구조에서는 문제가 하나 있다

바로 IP가 바뀌면 서비스가 전부 종료된다는 것이다

특히 그 서버의 물리적인 거리가 나와 멀수록 서비스 복구에 더 오랜 시간이 걸리겠지...

이 무슨 크리티컬한 이슈여...

 

심지어 나는 아파트의 IP가 바뀜으로 인해 서버에 접속 못 해본 경험이 있다

그런데? DuckDNS에서 IP가 바뀌더라도 알아서 IP를 갱신해서 DNS를 유지해준다면...?

참 편리하겠죠? 지금부터 해보겠습니다.


1. Docker Compose로 DuckDNS 갱신 컨테이너 띄우기

우선 DuckDNS의 토큰을 이용해 주소를 자동으로 갱신해주는 컨테이너가 있다

우리는 이번에 이것을 쓸 것이다

 

사용법은 친절히도 공홈에 다 적혀있다

상세한 내용이 궁금하다면 아래 공식 홈페이지 링크를 참고하자

docker-compose랑 docker, 둘 다 각각 어떻게 띄우는지 상세히 나와있음

더보기

https://hub.docker.com/r/linuxserver/duckdns

 

https://hub.docker.com/r/linuxserver/duckdns

 

hub.docker.com

https://github.com/linuxserver/docker-duckdns/pkgs/container/duckdns

 

GitHub · Build and ship software on a single, collaborative platform

Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.

github.com



2. docker-compose로 duckdns 컨테이너 띄우기

아무튼 나는 docker-compose 버전을 쓸 것이다

아래는 실행 코드 샘플 (출처 : 공홈)

더보기

docker-compose.yml 버전

services:
  duckdns:
    image: lscr.io/linuxserver/duckdns:latest
    container_name: duckdns
    network_mode: host #optional
    environment:
      - PUID=1000 #optional
      - PGID=1000 #optional
      - TZ=Etc/UTC #optional
      - SUBDOMAINS=subdomain1,subdomain2
      - TOKEN=token
      - UPDATE_IP=ipv4 #optional
      - LOG_FILE=false #optional
    volumes:
      - /path/to/duckdns/config:/config #optional
    restart: unless-stopped

docker 버전

docker run -d \
  --name=duckdns \
  --net=host `#optional` \
  -e PUID=1000 `#optional` \
  -e PGID=1000 `#optional` \
  -e TZ=Etc/UTC `#optional` \
  -e SUBDOMAINS=subdomain1,subdomain2 \
  -e TOKEN=token \
  -e UPDATE_IP=ipv4 `#optional` \
  -e LOG_FILE=false `#optional` \
  -v /path/to/duckdns/config:/config `#optional` \
  --restart unless-stopped \
  lscr.io/linuxserver/duckdns:latest

내가 작성한 예시는 아래와 같이 docker-compose.yml에 작성해두었다

 

웬만한 것들은 관리하기 편하도록 .env 파일로 다 빼뒀음


Duck DNS 토큰 확인 방법

아 토큰 값은 duckdns 홈페이지 가서 로그인하면 확인할 수 있다

토큰은 유출하지 않도록 유의하자!


옵션 설명

옵션 설명도 공홈에 있지만 간단히 설명하면 아래와 같다

--net=host 호스트 네트워크를 사용하여 IPv6 탐지를 가능하게 함
-e PUID=1000 컨테이너에서 실행할 사용자(User)의 ID로, 파일 권한 문제를 피하기 위해 사용됨
-e PGID=1000 컨테이너에서 실행할 그룹(Group)의 ID로, 이 역시 파일 권한 관리에 사용됨
-e TZ=Etc/UTC 컨테이너 시간대를 설정함 (e.g. Asia/Seoul, Etc/UTC 등)
-e SUBDOMAINS=sub1,sub2 DuckDNS에서 사용할 서브도메인들 (쉼표로 구분, 공백 없이 입력)(e.g. myhome,server)
-e TOKEN=token DuckDNS 웹사이트에서 발급받은 API 토큰을 입력함
-e UPDATE_IP=ipv4 어떤 IP를 업데이트할지 지정 - ipv4, ipv6, both. both는 IPv4와 IPv6 둘 다 갱신.
-e LOG_FILE=false 로그 파일 생성 여부 (true로 설정하면 로그를 /config 경로에 저장함)
-v /config 설정 파일을 저장할 볼륨 마운트 경로 (LOG_FILE=true일 경우 로그도 여기에 저장됨)
--read-only=true 컨테이너를 읽기 전용 모드로 실행함. (컨테이너를 수정할 수 없게 만들어 보안성 up) 문서 참조

3. 동작 테스트

도커로 띄우고 나면 아래와 같은 로그를 볼 수 있다

테스트는 아래처럼 하면 된다

# 템플릿
curl "https://www.duckdns.org/update?domains=서브도메인&token=토큰&ip=현재IP"

보내고 나면 OK 응답이 와야 정상이다

일단 테스트 완료!

 

물론 이 방법보단 IP를 직접 바꾸고 테스트 하는 것이 더 정확하긴 하다!

다만 IP를 직접 바꿔보는 것은 조만간 해볼 예정이라서 지금은 패스

일단 IP 변경으로 인한 DNS 자동 갱신 시스템을 구축해둔 것으로 만족!

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

[서버 보안 시리즈 #2] 서버에 Fail2Ban 적용하기  (1) 2025.06.09
[서버 보안 시리즈 #1] Nginx 필터링으로 악성 요청 차단하기  (1) 2025.06.05
Docker 컨테이너를 restart 할 때, depends_on으로 묶인 컨테이너도 같이 재시작이 되는가?  (0) 2025.05.30
docker 명령어에서 -u www-data의 의미는?  (0) 2025.04.17
MySQL 컨테이너 내부에서 SQL 명령어 사용하기 (feat. Docker)  (0) 2025.04.15
'Infra/Docker' 카테고리의 다른 글
  • [서버 보안 시리즈 #2] 서버에 Fail2Ban 적용하기
  • [서버 보안 시리즈 #1] Nginx 필터링으로 악성 요청 차단하기
  • Docker 컨테이너를 restart 할 때, depends_on으로 묶인 컨테이너도 같이 재시작이 되는가?
  • docker 명령어에서 -u www-data의 의미는?
Ratatou2
Ratatou2
온갖 정보들을 기록해두는 메모보드 블로그
  • Ratatou2
    nak-z
    Ratatou2
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그 이전 진행 중 (24.11.25 ~)
    • 분류 전체보기 (185) N
      • OS (63) N
        • Linux (34) N
        • Window (20)
        • Mac (5)
        • Android (4)
      • Infra (42) N
        • Docker (13) N
        • Jenkins (9)
        • n8n (13)
        • Nextcloud (1)
        • Rasberry Pi (6)
      • Dev (9)
        • JAVA (3)
        • Python (0)
        • DB (3)
        • Vue (2)
        • AI (1)
        • Git (0)
      • CS & Algorithm (41) N
        • CS (1)
        • Algorithm (40) N
      • Game (10)
        • Zomboid (9)
        • Don't Starve Together (1)
      • etc (20)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • . hELLO· Designed By정상우.v4.10.1 .
Ratatou2
IP 변경 시 도메인 자동 갱신 시스템 구축하기 (feat. Docker & DuckDNS)
상단으로

티스토리툴바