Hi there,

I have successfully configured KEA-DHCP4 and KEA-DHCP6 for homelab use.
IPv4 and IPv6 addresses are assigned as per configuration (some via
reservations, some via pools). It runs together with BIND9 as DNS. Static
BIND9 works fine for IPv4 and IPv6 (forward and reverse). I amended the
configuration for dynamic DNS updates.

Current result:
DDNS works fine for IPv4. The journal file was created by BIND9. 'A'
records for IPv4 are being written into 'db.local.markert.live' and
corresponding 'PTR' records for IPv4 are being written into 'db.192.168'.
However, no 'AAAA' records are being written into 'db.local.markert.live'
and no corresponding 'PTR' records for IPv6 are being written into
'db.fd00.192.168'.

Expected result:
'A' and 'AAAA' records are being written into 'db.local.markert.live',
'PTR' records for IPv6 are being written into 'db.fd00.192.168' and 'PTR'
records for IPv4 are being written into 'db.192.168'.

For further configuration and logging details, please see information below.

Any idea why I am facing this issue?
Help would be highly appreciated. I am actually not sure whether this is a
KEA or BIND9 issue, so if this should be moved to the BIND mailing list,
could you please let me know.

Thank you.
Best,
C.


Additional Information:

1. Configuration for BIND9/KEA:
1.1 named.conf.local
include "/etc/bind/dhcp-vmhomeserver.key";

zone "local.markert.live" {
    type primary;
    file "/var/lib/bind/zones/db.local.markert.live"; // zone file
local.markert.live
    update-policy {
    grant dhcp-vmhomeserver wildcard *.local.markert.live A AAAA DHCID; //
IPv4 and IPv6 updates
    };

};

zone "168.192.in-addr.arpa" {
    type primary;
    file "/var/lib/bind/zones/db.192.168"; // zone file reverse
192.168.0.0/24 (IPv4)
    update-policy {
    grant dhcp-vmhomeserver wildcard *.168.192.in-addr.arpa PTR DHCID; //
IPv4 updates
    };
};

zone
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa" {
    type primary;
file "/var/lib/bind/zones/db.fd00.192.168"; // zone file reverse
fd00:192:168::/48 (IPv6)
update-policy {
    grant dhcp-vmhomeserver wildcard
*.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa
PTR DHCID; // IPv6 updates
    };
};



logging {
     channel default_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel auth_servers_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel dnssec_log {
          file "/var/log/bind/dnssec.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel zone_transfers_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel ddns_log {
          file "/var/log/bind/ddns.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel client_security_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel rate_limiting_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel rpz_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };
     channel dnstap_log {
          file "/var/log/bind/default.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };

     channel queries_log {
          file "/var/log/bind/queries.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity info;
     };

     channel query-errors_log {
          file "/var/log/bind/query-errors.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity dynamic;
     };


     channel default_debug {
          file "/var/log/bind/debug.log" versions 10 size 10m;
          print-time yes;
          print-category yes;
          print-severity yes;
          severity dynamic;
     };

     category default { default_log; default_debug; };
     category config { default_log; default_debug; };
     category dispatch { default_log; default_debug; };
     category network { default_log; default_debug; };
     category general { default_log; default_debug; };
     category zoneload { default_log; default_debug; };
     category resolver { auth_servers_log; default_debug; };
     category cname { auth_servers_log; default_debug; };
     category delegation-only { auth_servers_log; default_debug; };
     category lame-servers { auth_servers_log; default_debug; };
     category edns-disabled { auth_servers_log; default_debug; };
     category dnssec { dnssec_log; default_debug; };
     category notify { default_log; default_debug; };
     category xfer-in { default_log; default_debug; };
     category xfer-out { default_log; default_debug; };
     category update{ ddns_log; default_debug; };
     category update-security { ddns_log; default_debug; };
     category client{ default_log; default_debug; };
     category security { default_log; default_debug; };
     category rate-limit { default_log; default_debug; };
     category spill { default_log; default_debug; };
     category database { default_log; default_debug; };
     category rpz { default_log; default_debug; };
     category dnstap { default_log; default_debug; };
     category trust-anchor-telemetry { default_log; default_debug; };
     category queries { queries_log; };
     category query-errors {query-errors_log; };
};

1.2 named.conf.options
acl "trusted" {

        192.168.0.0/24;
        fd00:192:168::/48;
};

options {
directory "/var/cache/bind";

recursion yes;                 # enables recursive queries
        allow-recursion { trusted; };  # allows recursive queries from
"trusted" clients
        listen-on { 192.168.3.1; };    # nameserver private IPv4 address -
listen on private network only
        listen-on-v6 { fd00:192:168:3::1; };    # nameserver private IPv6
address - listen on private network only
        allow-transfer { none; };      # disable zone transfers by default
        allow-update { !{ !trusted; any; }; key dhcp-vmhomeserver. ; };

        forwarders {
                8.8.8.8;
                1.1.1.1;
                2001:4860:4860::8888;
                2606:4700:4700::1111;
        };

dnssec-validation auto;

listen-on-v6 { any; };
};

1.3 kea-dhcp-ddns.conf
{
"DhcpDdns":
{
  "ip-address": "127.0.0.1",
  "port": 53001,
  "control-socket": {
      "socket-type": "unix",
      "socket-name": "/tmp/kea-ddns-ctrl-socket"
  },

  <?include "/etc/kea/tsig-keys.json"?>

  "forward-ddns" : {
      "ddns-domains" : [
          {
               "name": "local.markert.live.",
               "key-name": "dhcp-vmhomeserver",
               "dns-servers": [
                    {
                        "ip-address": "fd00:192:168:3::1"
                    },
                    {
                        "ip-address": "192.168.3.1"
                    }
               ]
          }
      ]
  },

  "reverse-ddns" : {
      "ddns-domains" : [
          {
               "name": "168.192.in-addr.arpa.",
               "key-name": "dhcp-vmhomeserver",
               "dns-servers": [
                   { "ip-address": "192.168.3.1" }
               ]
          },
          {
               "name":
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa.",
               "key-name": "dhcp-vmhomeserver",
               "dns-servers": [
                   { "ip-address": "fd00:192:168:3::1" }
               ]
          }

      ]
  },

  "loggers": [
    {
        "name": "kea-dhcp-ddns",
        "severity": "DEBUG",
        "debuglevel": 99,
        "output_options": [
            {
                "output": "/var/log/kea/dhcp-ddns.log",
                //"pattern": "%-5p %m\n",
                "maxver": 10
            }
        ]
    }
  ]
}
}

1.4 /var/lib/bind/zones:
-rw-r--r-- 1 bind bind 1555 Apr 26 23:10 db.192.168
-rw-r--r-- 1 bind bind 1980 Apr 26 23:10 db.192.168.jnl
-rw-r--r-- 1 bind bind 1479 Apr 24 04:05 db.fd00.192.168
-rw-r--r-- 1 bind bind 1545 Apr 26 23:10 db.local.markert.live
-rw-r--r-- 1 bind bind 2200 Apr 26 23:10 db.local.markert.live.jnl

1.5 usr.sbin.named (in /etc/apparmor.d)
# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include <tunables/global>

profile named /usr/sbin/named flags=(attach_disconnected) {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,
  capability sys_resource,

  # /etc/bind should be read-only for bind
  # /var/lib/bind is for dynamically updated zone (and journal) files.
  # /var/cache/bind is for slave/stub data, since we're not the origin of
it.
  # See /usr/share/doc/bind9/README.Debian.gz
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/lib/bind/ rw,
  /var/cache/bind/** lrw,
  /var/cache/bind/ rw,

  # Database file used by allow-new-zones
  /var/cache/bind/_default.nzd-lock rwk,

  # gssapi
  /etc/krb5.keytab kr,
  /etc/bind/krb5.keytab kr,

  # ssl
  /etc/ssl/*.cnf r,
  /etc/ssl/*.conf r,

  # root hints from dns-data-root
  /usr/share/dns/root.* r,

  # GeoIP data files for GeoIP ACLs
  /usr/share/GeoIP/** r,

  # dnscvsutil package
  /var/lib/dnscvsutil/compiled/** rw,

  # Allow changing worker thread names
  owner @{PROC}/@{pid}/task/@{tid}/comm rw,

  # named need to check if hugepages is available
  /sys/kernel/mm/transparent_hugepage/enabled r,

  @{PROC}/net/if_inet6 r,
  @{PROC}/*/net/if_inet6 r,
  @{PROC}/sys/net/ipv4/ip_local_port_range r,
  /usr/sbin/named mr,
  /{,var/}run/named/named.pid w,
  /{,var/}run/named/session.key w,
  # support for resolvconf
  /{,var/}run/named/named.options r,

  # some people like to put logs in /var/log/named/ instead of having
  # syslog do the heavy lifting.
  /var/log/named/** rw,
  /var/log/named/ rw,

  # gssapi
  /var/lib/sss/pubconf/krb5.include.d/** r,
  /var/lib/sss/pubconf/krb5.include.d/ r,
  /var/lib/sss/mc/initgroups r,
  /etc/gss/mech.d/ r,

  # ldap
  /etc/ldap/ldap.conf r,
  /{,var/}run/slapd-*.socket rw,

  # dynamic updates
  /var/tmp/DNS_* rw,

  # dyndb backends
  /usr/lib/bind/*.so rm,

  # Samba DLZ
  /{usr/,}lib/@{multiarch}/samba/bind9/*.so rm,
  /{usr/,}lib/@{multiarch}/samba/gensec/*.so rm,
  /{usr/,}lib/@{multiarch}/samba/ldb/*.so rm,
  /{usr/,}lib/@{multiarch}/ldb/modules/ldb/*.so rm,
  /var/lib/samba/bind-dns/dns.keytab rk,
  /var/lib/samba/bind-dns/named.conf r,
  /var/lib/samba/bind-dns/dns/** rwk,
  /var/lib/samba/private/dns.keytab rk,
  /var/lib/samba/private/named.conf r,
  /var/lib/samba/private/dns/** rwk,
  /etc/samba/smb.conf r,
  /dev/urandom rwmk,
  owner /var/tmp/krb5_* rwk,

  # systemd sd_notify
  /run/systemd/notify w,

  # Log-specific entries
  owner /var/log/bind/* rwk,

  # Dynamic Zone updates
  owner /var/lib/bind/zones/* rwk,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.sbin.named>
}

1.6 kea-dhcp4.conf / kea-dhcp6.conf
{
"Dhcp4":
{

"dhcp-ddns": {
        "enable-updates": true
     },

     "ddns-replace-client-name": "when-not-present",
     "ddns-qualifying-suffix": "local.markert.live",
     "ddns-override-client-update": true,
     "ddns-override-no-update": true,

     "hostname-char-set": "[^A-Za-z0-9.-]",
     "hostname-char-replacement": "x",

.........

{

"Dhcp6":
{

"dhcp-ddns": {
        "enable-updates": true
     },

        "ddns-replace-client-name": "when-not-present",
        "ddns-qualifying-suffix": "local.markert.live",
        "ddns-override-client-update": true,
        "ddns-override-no-update": true,

        "hostname-char-set": "[^A-Za-z0-9.-]",
        "hostname-char-replacement": "x",

  .........


5. Logs
5.1 bind/debug.log
26-Apr-2025 22:58:22.162 zoneload: info: managed-keys-zone: loaded serial
557
26-Apr-2025 22:58:22.166 zoneload: info: zone 0.in-addr.arpa/IN: loaded
serial 1
26-Apr-2025 22:58:22.182 zoneload: info: zone 168.192.in-addr.arpa/IN:
loaded serial 39
26-Apr-2025 22:58:22.194 zoneload: info: zone
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa/IN:
loaded serial 3
26-Apr-2025 22:58:22.194 notify: info: zone
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.2.9.1.0.0.0.d.f.ip6.arpa/IN:
sending notifies (serial 3)
26-Apr-2025 22:58:22.194 zoneload: info: zone 255.in-addr.arpa/IN: loaded
serial 1
26-Apr-2025 22:58:22.194 zoneload: info: zone 127.in-addr.arpa/IN: loaded
serial 1
26-Apr-2025 22:58:22.198 notify: info: zone 168.192.in-addr.arpa/IN:
sending notifies (serial 39)
26-Apr-2025 22:58:22.198 zoneload: info: zone local.markert.live/IN: loaded
serial 55
26-Apr-2025 22:58:22.198 zoneload: info: zone localhost/IN: loaded serial 2
26-Apr-2025 22:58:22.198 general: notice: all zones loaded
26-Apr-2025 22:58:22.198 general: notice: running
26-Apr-2025 22:58:23.410 lame-servers: info: timed out resolving
'./DNSKEY/IN': 2001:4860:4860::8888#53
26-Apr-2025 22:58:24.610 lame-servers: info: timed out resolving
'./DNSKEY/IN': 2606:4700:4700::1111#53
26-Apr-2025 22:58:24.622 dnssec: info: managed-keys-zone: Key 20326 for
zone . is now trusted (acceptance timer complete)
26-Apr-2025 22:58:24.622 dnssec: info: managed-keys-zone: Key 38696 for
zone . is now trusted (acceptance timer complete)
26-Apr-2025 22:58:32.206 resolver: notice: resolver priming query complete:
timed out
26-Apr-2025 22:58:57.855 update: info: client @0x7fea9b617168
fd00:192:168:3::1#49017/key dhcp-vmhomeserver: updating zone
'local.markert.live/IN': deleting an RR at debiansandbox.local.markert.live
A
26-Apr-2025 22:58:57.871 update: info: client @0x7feaa5041168
fd00:192:168:3::1#58907/key dhcp-vmhomeserver: updating zone
'local.markert.live/IN': delete all rrsets from name
'debiansandbox.local.markert.live'
26-Apr-2025 22:58:57.883 update: info: client @0x7feaa3e2c168
192.168.3.1#36757/key dhcp-vmhomeserver: updating zone
'168.192.in-addr.arpa/IN': delete all rrsets from name
'3.3.168.192.in-addr.arpa'
26-Apr-2025 22:58:57.891 notify: info: zone 168.192.in-addr.arpa/IN:
sending notifies (serial 40)
26-Apr-2025 22:58:59.163 update: info: client @0x7feaa025a168
fd00:192:168:3::1#41402/key dhcp-vmhomeserver: updating zone
'local.markert.live/IN': adding an RR at 'debiansandbox.local.markert.live'
A 192.168.3.3
26-Apr-2025 22:58:59.163 update: info: client @0x7feaa025a168
fd00:192:168:3::1#41402/key dhcp-vmhomeserver: updating zone
'local.markert.live/IN': adding an RR at 'debiansandbox.local.markert.live'
DHCID AAABK7khAndBJIqWUDuZaDDCuD7KTY8/4Jhb67R1a9+qSj8=
26-Apr-2025 22:58:59.179 update: info: client @0x7feaa3e2c168
192.168.3.1#45014/key dhcp-vmhomeserver: updating zone
'168.192.in-addr.arpa/IN': deleting rrset at '3.3.168.192.in-addr.arpa' PTR
26-Apr-2025 22:58:59.179 update: info: client @0x7feaa3e2c168
192.168.3.1#45014/key dhcp-vmhomeserver: updating zone
'168.192.in-addr.arpa/IN': deleting rrset at '3.3.168.192.in-addr.arpa'
DHCID
26-Apr-2025 22:58:59.179 update: info: client @0x7feaa3e2c168
192.168.3.1#45014/key dhcp-vmhomeserver: updating zone
'168.192.in-addr.arpa/IN': adding an RR at '3.3.168.192.in-addr.arpa' PTR
debiansandbox.local.markert.live.
26-Apr-2025 22:58:59.179 update: info: client @0x7feaa3e2c168
192.168.3.1#45014/key dhcp-vmhomeserver: updating zone
'168.192.in-addr.arpa/IN': adding an RR at '3.3.168.192.in-addr.arpa' DHCID
AAABK7khAndBJIqWUDuZaDDCuD7KTY8/4Jhb67R1a9+qSj8=
26-Apr-2025 22:59:02.891 notify: info: zone 168.192.in-addr.arpa/IN:
sending notifies (serial 41)
-- 
ISC funds the development of this software with paid support subscriptions. 
Contact us at https://www.isc.org/contact/ for more information.

To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.

Kea-users mailing list
Kea-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/kea-users

Reply via email to