Issues with dhcpv6 and ddns updates

perl-list perl-list at network1.net
Fri Dec 2 15:07:36 UTC 2016


Robert, 

I don't know anything about DDNS updates as I have never used them, but I can confirm that on release {} in DHCPv6 does not seem to have access to any of the option data. I had the same problem and asked the list about it more than a week ago. I was met with silence. If a developer could comment on this being a bug or simply not implemented yet, that would be great. Target for inclusion of option data in on release {} statements? 

> From: "Robert Senger" <robert.senger at lists.microscopium.de>
> To: "Users of ISC DHCP" <dhcp-users at lists.isc.org>
> Sent: Friday, December 2, 2016 10:01:31 AM
> Subject: Issues with dhcpv6 and ddns updates

> Hi there,

> I am running isc-dhcp-server in ipv6 mode, and I'd like to update the
> local internal dns zones hosted by bind9 with dhcpv6 client's names and
> ipv6 addresses.

> The built-in ddns seems to be completely unable to remove entries from
> the dns upon expiry or release, so I ended up doing ddns stuff on my
> own using "on commit|expiry|release" event handlers and corresponding
> scripts.

> But this also has issues with expiry and release events. While
> (almost...) everything is fine with commits, I am having trouble
> getting enough information about which hosts lease has expired or was
> released.

> This is the code I have in the dhcpd6.conf global scope:

> on commit
> {

> set ClientMac =
> "n/a";

> set ClientIP = pick-first-value(binary-to-ascii(16, 16, ":",
> substring(option dhcp6.ia-na, 16, 16)),
> "n/a");
> set ClientID = pick-first-value(binary-to-ascii(16, 8, ":",
> option dhcp6.client-id),
> "n/a");
> set ClientName = pick-first-value(ddns-hostname, option
> fqdn.hostname, option host-name,
> "n/a");
> log(concat("Commit (global): Mac: ", ClientMac, ", IP: ",
> ClientIP, ", Name: ", ClientName, ", ID: ",
> ClientID));
> #execute("/etc/dhcp/dhcp6commit.sh", ClientMac, ClientIP,
> ClientName,
> ClientID);
> }

> on expiry
> {

> set ClientMac =
> "n/a";

> set ClientIP = pick-first-value(binary-to-ascii(16, 16, ":",
> substring(option dhcp6.ia-na, 16, 16)),
> "n/a");
> set ClientID = pick-first-value(binary-to-ascii(16, 8, ":",
> option dhcp6.client-id),
> "n/a");
> set ClientName = pick-first-value(ddns-hostname, option
> fqdn.hostname, option host-name,
> "n/a");
> log(concat("Expiry (global): Mac: ", ClientMac, ", IP: ",
> ClientIP, ", Name: ", ClientName, ", ID: ",
> ClientID));
> #execute("/etc/dhcp/dhcp6expiry.sh", ClientMac, ClientIP,
> ClientName,
> ClientID);
> }

> on release
> {

> set ClientMac =
> "n/a";

> set ClientIP = pick-first-value(binary-to-ascii(16, 16, ":",
> substring(option dhcp6.ia-na, 16, 16)),
> "n/a");
> set ClientID = pick-first-value(binary-to-ascii(16, 8, ":",
> option dhcp6.client-id),
> "n/a");
> set ClientName = pick-first-value(ddns-hostname, option
> fqdn.hostname, option host-name,
> "n/a");
> log(concat("Release (global): Mac: ", ClientMac, ", IP: ",
> ClientIP, ", Name: ", ClientName, ", ID: ",
> ClientID));
> #execute("/etc/dhcp/dhcp6release.sh", ClientMac, ClientIP,
> ClientName,
> ClientID);
> }

> (I've commented the "execute" statement to not mess up ddns while
> testing).

> And this is what I see in the dhcp log:

> Commit:

> Dec 2 15:02:02 prokyon dhcpd: Reply NA: address
> fd10:2842:f0d1:414:b64e:8a55:154d:ad6 to client with duid
> 00:01:00:01:1e:dd:f7:4d:00:12:f0:90:5a:49 iaid = 1 valid for 1200
> seconds
> Dec 2 15:02:02 prokyon dhcpd: Commit (global): Mac: n/a, IP:
> fd10:2842:f0d1:414:b64e:8a55:154d:ad6, Name: n/a, ID:
> 0:1:0:1:1e:dd:f7:4d:0:12:f0:90:5a:49

> Release:

> Dec 2 15:03:39 prokyon dhcpd: Client
> 00:01:00:01:1e:dd:f7:4d:00:12:f0:90:5a:49 releases address
> fd10:2842:f0d1:414:b64e:8a55:154d:ad6
> Dec 2 15:03:39 prokyon dhcpd: Release (global): Mac: n/a, IP: n/a,
> Name: n/a, ID: n/a

> Expiry:

> Dec 2 15:14:04 prokyon dhcpd: Expiry (global): Mac: n/a, IP: n/a,
> Name: n/a, ID: n/a

> So, everything is alright for commit events, except that there's no
> hostname available. I know how to create a custom hostname from address
> or id, so this is not really a problem.

> But for expiry and release events, there's simply nothing that can be
> passed on to the scripts. No address, no name, no id. It's impossible
> to remove dns entries.

> Next, if I move the "set ClientIP = " lines from inside the "on
> commit|expiry|release" event handlers above those into the global
> scope, I magically get the address for expiry, but not for release:

> Dec 2 15:35:55 prokyon dhcpd: Expiry (global): Mac: n/a, IP:
> fd10:2842:f0d1:414:b64e:8a55:154d:ad6, Name: n/a, ID: n/a
> Dec 2 15:38:17 prokyon dhcpd: Release (global): Mac: n/a, IP: n/a,
> Name: n/a, ID: n/a

> Moving all this code into a host statement (works for known hosts only,
> of course), finally makes it possible to get a hostname and to perform
> clean ddns updates for commit and expiry, but it requires at least one
> dns lookup in the script to get the address from the hostname for
> release events, which is a really, really ugly hack.

> Am I doing something wrong, did I miss something, or ist this
> intended behavior or even a bug?

> Thanks for help,

> Robert

> --
> Robert Senger

> --
> Robert Senger

> _______________________________________________
> dhcp-users mailing list
> dhcp-users at lists.isc.org
> https://lists.isc.org/mailman/listinfo/dhcp-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.isc.org/pipermail/dhcp-users/attachments/20161202/4d8f44b4/attachment-0001.html>


More information about the dhcp-users mailing list