---
title: "INWX DNS Recordmaster - Manage your DNS nameserver records via files in Git"
date: 2024-11-07
categories:
  - english
tags:
  - python
  - tools
headerimage: /blog/file-cabinet.jpg
headercredits: Neatly organise your records
---

I own and manage 30+ domains at [INWX](https://www.inwx.com/), a large and professional domain registrar. Although INWX has a somewhat decent web interface, it became a burden for me to keep an overview of each domain's sometimes dozens of records. Especially when e.g. changing an IP address for more than one domain, it caused multiple error-prone clicks and copy/pastes that couldn't be reverted in the worst case. This is why I created [**INWX DNS Recordmaster**](https://github.com/mxmehl/inwx-dns-recordmaster) which I will shortly present here.

If you are an INWX customer, you can use this tool to manage all your DNS records in YAML files. Ideally, you will store these files in a Git repository which you can use to track changes and roll back in case of a mistake. Having one file per domain provides you a number of further advantages:

* You can easily copy/paste records from other domains, e.g. for `SPF`, `DKIM` or `NS` records
* Overall search/replace of certain values becomes much easier, e.g. of IP addresses
* You can prepare larger changes offline and can synchronise once you feel it's done

INWX DNS Recordmaster takes care of making the required changes of the live records so that it matches the local state. This is done via the INWX API, ensuring that the amount of API calls is minimal.

This even allows you to set up a pipeline that takes care of the synchronisation[^1].

## Wait, there is more

As written above, I already had a large stack of domains that I previously managed via the web interface. This is why some additional convenience features found their way into the tool.

* You can convert all records of an existing and already configured domain at INWX into the file format. This made onboarding my 30+ domains a matter of a few minutes.
* On a global or per-domain level, you can ignore certain record types. For example, if you don't want to touch any `NS` records, you can configure that. By default, `SOA` records are ignored. You may even ignore all live records that don't exist in your local configuration.
* Of course, you can make a dry run to see which effects your configuration will have in practice.

Did I miss something to make it more productive for you? Let me know!

## Install, use, contribute

You are welcome to [install this tool](https://github.com/mxmehl/inwx-dns-recordmaster?tab=readme-ov-file#install), it's Free and Open Source Software after all. All you need is Python installed.

One of the tool's users is the [OpenRail Association](https://openrailassociation.org) which manages some of its domains with this program and [published its configuration](https://github.com/OpenRailAssociation/openrail-dns). This is a prime example of how organisation can make the management of records transparent and easy to change at least internally, if not even externally.

While the tool is not perfect, it already is a huge gain for efficiency and stability of my IT operations, and it already proves its capabilities for other users. To reach the remaining 20% to perfection (that will take 80% of the time, as always), you are most welcome to add issues with enhancement proposals, and if possible, also pull requests.


[^1]: For example, see the [workflow file of the OpenRail Association](https://github.com/OpenRailAssociation/openrail-dns/blob/main/.github/workflows/sync-records.yaml).
