Skip to main content

A tool to update freenom's dns records

Project description

Freenom dns updater

GitHub license Unit Test dev and main branch PyPI - Wheel

A tool written in python to update freenom's dns records

Main Features

  • Manage (add/update/remove) a domain's dns record with cli
  • Automatic records updates according to ip (v4/v6) changes
  • Auto renew domains

Upcoming features

  • Password encryption


pip install freenom-dns-updater


Basic usage

Let's say you want to add or update your main A/AAAA domain records with your current ip (v4/v6). Simply type :

fdu record update $LOGIN $PASSWORD

Note that if you don't have a ipv6 access, the tool will detect that and will update only the A record (ipv4) of

In order to add or update the subdomain

fdu record update $LOGIN $PASSWORD -n sub

Advanced usage

If you want to update multiple (sub)domains you could call the tool for each domains. Even better, you can create a configuration file.
A configuration is a YAML file, which look like :

login: yourlogin@somemail.domain
password: yourpassword

# list here the records you want to add/update
  # the following will update both the A and AAAA records with your current ips (v4 and v6).
  # Note that if you don't have a ipv6 connection, the program'll detect it and will only update the A record (ipv4)
  - domain:

  # the following will update both your subdomain's A and AAAA records with your current ips (v4 and v6)
  - domain:
    name: mysubdomain

  # here's more advanced exemples

  # the following will update the AAAA record with a specified ipv6
  - domain:
    name: # you can omit this line
    type: AAAA
    target: "fd2b:1c1b:3641:1cd8::" # note that you have to quote ipv6 addresses
    ttl: 24440

  # the following will update your subdomain's A record with your current ip (v4)
  - domain:
    name: mysubdomain
    type: A
    target: auto # you can omit this line

  # you can omit the record type and give only ipv4 or ipv6 addresses.
  - domain:
    name: ipv6sub
    target: "fd2b:1c1b:3641:1cd8::"

  - domain:
    name: ipv4sub
    target: ""

In order to use such configuration, you can use the following command :

fdu update /path/to/config

Where /path/to/config can be either:

  • A path to a file (default location is /etc/freenom.yml)
  • A http url (a raw secret gist for instance)


In order to launch regularly an update, you can launch the tool with :

fdu process -c -i -r -t 3600 /path/to/config

Where the params are :

param description
-c cache the ip and update only if there is any changes
-i ignore errors when updating
-r renew the domains
-t time (in second) to wait between two updates
/path/to/config a path or a url to a configuration file

Using systemd

For ease of use a systemd unit file is available along the source code.

  • Save your configuration into /etc/freenom.yml
  • Copy the systemd/system/freenom-dns-updater.service into a valid systemd unit folder (/usr/lib/systemd/system/ for instance).
  • finally enable the service using
systemctl enable freenom-dns-updater
systemctl start freenom-dns-updater

Using other Os / services manager

There's two straightforward choices :

  • Launch the previous fdu process command
  • Schedule the fdu update command using cron, windows' scheduled task, ...

Known issues

  • The website is not really stable (503/504 errors very often) => there's 3 retry on every request made by the tool but even with this it's common to face a remote server error

Docker image

If you want to run this tool in an "isolated" environment there's a docker image available at maxisoft/freenom-dns-updater


Note that if you want to use the ipv6 functionality, you have to enable the docker ipv6 stack


  • Update dns records using a gist config file :
docker run -it --rm maxisoft/freenom-dns-updater fdu update
  • Run the tool in a background docker with a local config file :
docker run -d --rm -v /path/to/config:/etc/freenom.yml maxisoft/freenom-dns-updater

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freenom dns updater-1.2.9.tar.gz (22.4 kB view hashes)

Uploaded source

Built Distribution

freenom_dns_updater-1.2.9-py3-none-any.whl (25.5 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page