Skip to content

cf-jongsik/cf-ddns

Repository files navigation

Cloudflare DNS update agent

This docker image create and update A record of Cloudflare DNS

and let you use Cloudflare as dynamic DNS service.

#INSTALLATION

##OPTION 1 - install on VM

1. clone the repo
git clone https://github.com/cf-jongsik/cf-ddns.git
2. install
./install.sh
uninstall
./uninstall.sh

##OPTION 2 - docker compose

1. Edit the following sample then save as docker-compose.yaml
services:
  cf-ddns:
    image: docker.io/neomax7/cf-ddns:latest
    environment:
    - TOKEN=PLACE_YOUR_OWN_TOKEN # your TOKEN from Cloudflare Dashboard (require ZONE edit)
    - ZONE=PLACE_YOUR_OWN_ZONE # your ZONE ID from Cloudflare Dashboard
    - RECORD=PLACE_YOUR_SUBDOMAIN # Subdomain of your choice , example: test.example.com => example.com = zone , test = subdomain
    #- TIMEZONE=PLACE_YOUR_TIMEZONE # OPTIONAL: for more accurate cronjob otherwise its UTC
    #- CRON=* * * * * # OPTIONAL: default is every 5 min, make sure no quote or double quote

2. in the same directory as above file
docker compose up -d


##OPTION 3 - docker

docker run -d --rm --env TOKEN=YOUR_TOKEN --env ZONE=YOUR_ZONE_ID --env RECORD=RECORD_OF_CHOICE --env CRON="* * * * *" neomax7/cf-ddns:latest

OR use env-file

docker run -d --rm --env-file .env neomax7/cf-ddns:latest


#Environment Variables

This agent takes following environment variables
#required
TOKEN = Cloudflare API TOKEN with DNS EDIT permission
ZONE = ZONE ID from Cloudflare dashboard
RECORD = name of A record wish to register
#optional
CRON = typical cron schedule ex: */5 * * * *
TIMEZONE = your timezone


#DESCRIPTION

script content

  1. $CRON schedule fires the script
  2. the script searches for the $RECORD in your $ZONE
  3. if the $RECORD exists, delete the record
    (currently Cloudflare API doenst let you patch or put with Bearer token)
  4. create the $RECORD with public IP from ifconfig.me