본문 바로가기

취미, 관심/NAS, Server

[ubuntu, docker] 도커 컨테이너로 클라우드플레어 DDNS 사용하기

앞서 시놀로지에서 클라우드플레어 API를 이용한 DDNS 설정을 작성했습니다.

2021.10.01 - [Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #1

이번엔 도커를 이용해 간단하게 DDNS를 이용해 봅니다.

 

시놀로지 뿐 아니라 도커가 사용 가능한 모든 장치에서 가능한 방법이라, 활용도가 높을 것 같네요. (특히 저처럼 초보자들..)

위 글에 클플 API Key를 받는 방법이 기술되어 있어, 간단하게 작성합니다.

 

도커가 설치된 환경에서 ssh로 접속하여 아래 명령을 넣으면 끝입니다.

docker run -d --name=cloudflare-ddns --restart=always \
-e API_KEY=[클라우드플레어 API Key] \
-e ZONE=[도메인] \
-e SUBDOMAIN=[DDNS를 적용할 서브도메인. 없는경우 루트 도메인을 갱신함] \
oznu/cloudflare-ddns

별 내용은 없지만, 자세한 설정이나 내용은 아래를 참고해주세요.

https://hub.docker.com/r/oznu/cloudflare-ddns/

 

Docker Hub

 

hub.docker.com

환경 변수의 간단한 설명은 아래와 같습니다.

PROXIED - CloudFlare CDN을 사용하는 경우 true로 설정. 기본값은 false

DELETE_ON_STOP - 컨테이너가 정지되면 dns레코드를 삭제하도록 설정, 기본값은 false

INTERFACE - 네트워크 인터페이스를 지정해줍니다. 기본값은 공개IP

DNS_SERVER - DNS 서버를 설정합니다. 기본값은 1.1.1.1

CRON - 사용자 정의 CRON값, 즉 어느 주기로 실행할지 설정합니다. 기본값은 5분( */5 * * * *)

 

사용하는 컨테이너가 많다면 docker-compose를 사용하여 정리하면 좀더 편하겠죠?

 

docker-compose.yml 파일을 만들어줍니다.

version: '3'
services:
  cf-ddns:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      API_KEY: api_token
      ZONE: example.com
      SUBDOMAIN: subdomain

루트 도메인을 사용하려면, subdomain을 지우거나 주석(#)처리 하시면 됩니다.

 

API Token을 여기에 그냥 노출하면 좀 불안하죠? .env 파일을 만들어서 숨겨봅시다.

 

docker-compose.yml 파일과 같은 경로에 .env파일을 만들고

API_KEY=[api_key]

내용을 넣고, docker-compose.yml 파일을 수정합니다.

version: '3'
services:
  cf-ddns:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      API_KEY: ${API_KEY}
      ZONE: example.com
      SUBDOMAIN: subdomain

 

만약, 도메인이 여러개라면?

여러개 만들면 됩니다. 아쉽게도 다중 도메인에 대한 지원은 하지 않나봐요.

version: '3'
services:
  cf-ddns1:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      API_KEY: ${API_KEY}
      ZONE: example1.com
      SUBDOMAIN: subdomain
  cf-ddns2:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      API_KEY: ${API_KEY}
      ZONE: example2.com
      SUBDOMAIN: subdomain

- 도메인마다 API_KEY가 다르다면? API_KEY도 뒤에 1, 2, 3... 붙여서 바꿔주면 됩니다.

 

container name을 설정해도 됩니다만, 이거같은 경우엔 한번 실행하곤 끝이라서 특별하게 뭘 건들 필요는 없어보입니다.

기본적으로 5분마다 갱신을 합니다.