First goal of this project is to learn go. Side effect is a tool that applies phpIPAM changelog to DNS via dynamic updates.


  • -once: run only once and exits, by default it loops forever with a one second sleep in-between
  • -skip-state: start to handle the changelogs from the first entry


Environment variables

  • LOG_LEVEL (optional): one of panic, fatal, error, warn, warning, info, debug or trace. Default: info (see logrus ParseLevel)

Config file

Main config file is named config.yml and is expected to be in the current working directory. It contains dsn, zones and key definitions for forward and reverse updates as follow:

Example of config.yml

dsn: username:[email protected](
forward zones: &server-127-0-0-2-keyname
    algo: hmac-sha256
    keyname: keyname
    secret: wL8Yu+QOrf1+oijvVYgafKIyRYMvXTs6gEMd7yw5wZo= *server-127-0-0-2-keyname
reverse zones: *server-127-0-0-2-keyname *server-127-0-0-2-keyname *server-127-0-0-2-keyname

Bind configuration example

First, generate a key using ddns-confgen -k keyname or tsig-keygen keyname and include the key "xxx" {[...]}; in your bind configuration.

Then configure the zones you want to update with the allow-update stanza. example:

zone "" in {
  type master;
  file "/etc/bind/masters/";
  allow-update { key "keyname"; };

Make sure bind has write permission on the folder to write journal files and write permission on zone files for bind to rewrite it on rndc sync calls.

Reload bind and once configured accordingly, run phpipam2dns


View Github