Dynamic DNS for the lazy sysadmin.
Inspired by ExternalDNS, ZonePop is a DNS syncing service that takes DHCP leases and IPv6 neighbors from any number of sources and syncs those to a DNS provider. No RFC 2136, client configuration, or complex split-horizon DNS resolver setup required (unless you feel like it, of course).
ZonePop is still in the early stages of development (and might be for a long time since it's just a single person maintaining it), so the number of sources and providers is limited for now.
custom- Arbitrary Lua functionvyos_ssh- VyOS DHCP leases fetched via SSH
aws_route53- Updates records in a AWS Route53 hosted zonecustom- Arbitrary Lua functionfile- Generates a file (or multiple) using a Lua function or Golang template, optionally uploading to remote server via SSHhosts_file- Generates an/etc/hostsstyle file, optionally uploading to remote server via SSHhttp- Exposes a JSON list representation accessible via the/endpointsHTTP endpoint.prometheus_metrics- Exports info metrics for each endpoint in Prometheus format, accessible via the/metricsHTTP endpoint.
The configuration file for ZonePop is a Lua script. Why Lua instead of YAML or similar? Lua allows for much more flexibility over how DNS records are created and managed.
A simple config file looks something like this:
return {
sources = {
vyos = {
"vyos_ssh",
config = {
host = os.getenv("VYOS_HOST"),
username = os.getenv("VYOS_USERNAME"),
password = os.getenv("VYOS_PASSWORD"),
},
},
},
providers = {
route53 = {
"aws_route53",
config = {
record_suffix = ".example.com",
forward_zone_id = "Z2FDTNDATAQYW2",
},
},
},
}The main config file should return a Table with the sources and providers keys. The keys for those sub-tables are simply logical names. The first value in each of those tables is the kind. For example, the Route53 provider uses the aws_route53 kind. The next key, config is the configuration for that source or provider. This will vary based on the source and provider (docs TBD).