Skip to content

dawierha/Freenom-dns-updater

 
 

Repository files navigation

A note from bitteruhe and dawierha

This is a fork of bitterhu's fork of maxisoft's (apparently abandoned) project.
bitteruhe's fork becamenex necessary when an issue with freenom's login form was found and never fixed. The fork fixes this issue with the help of a solution found by Shihira.

This fork addresses the issues with the self-signed ssl cert's used. The solution is to simply remove them and only use the certs included with the requests library since I honestly do not know what the self signed certs are used for. As far as I know this is currently the only working fork.


Freenom dns updater

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

Upcoming features

  • Auto renew domains

Installation

pip install freenom-dns-updater

Usage

Basic usage

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

fdu record update $LOGIN $PASSWORD exemple.tk

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

In order to add or update the subdomain sub.example.tk:

fdu record update $LOGIN $PASSWORD example.tk -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
record:
  # 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: test.tk

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

  # here's more advanced exemples

  # the following will update the AAAA record with a specified ipv6
  - domain: test2.tk
    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: test2.tk
    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: test2.tk
    name: ipv6sub
    target: "fd2b:1c1b:3641:1cd8::"

  - domain: test2.tk
    name: ipv4sub
    target: "64.64.64.64"

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)

Schedule

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

fdu process -c -i -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
-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

Docker image

Docker layers

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

Ipv6

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

Examples

  • Update dns records using a gist config file :
docker run -it --rm maxisoft/freenom-dns-updater-armhf fdu update https://gist.githubusercontent.com/maxisoft/1b979b64e4cf5157d58d/raw/freenom.yml
  • 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-armhf

For armhf

There's also an image for armhf (raspberry pi for instance) available at maxisoft/freenom-dns-updater-armhf

About

A tool to update freenom's dns records

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 55.1%
  • HTML 44.6%
  • Dockerfile 0.3%