<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:Monaco;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-GB" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We have a pair of signed DNS zones: lancs.ac.uk & lancaster.ac.uk.  lancaster.ac.uk contains a DNAME record which "redirects" all names beneath it to the same name within lancs.ac.uk (i.e. abc.def.lancaster.ac.uk becomes abc.def.lancs.ac.uk).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal">$ dig www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal">[…]<o:p></o:p></p>
<p class="MsoNormal">;; ANSWER SECTION:<o:p></o:p></p>
<p class="MsoNormal">lancaster.ac.uk.              43200   IN           DNAME                lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancaster.ac.uk.   43200   IN           CNAME                www.lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancs.ac.uk.           3600      IN           A             148.88.65.80<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Bind, unbound & knot resolver are happy to (validate &) resolve names beneath either zone (although kresd had difficulty before 2020:
<a href="https://gitlab.nic.cz/knot/knot-resolver/-/issues/234">https://gitlab.nic.cz/knot/knot-resolver/-/issues/234</a>), and dnsviz reports no errors (eg
<a href="https://dnsviz.net/d/www.lancaster.ac.uk/dnssec/">https://dnsviz.net/d/www.lancaster.ac.uk/dnssec/</a>) so we believe the zones are configured reasonably.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">dnsmasq, when dnssec validation is enabled, is unhappy with names beneath lancaster.ac.uk.  I suspect that dnsmasq is unsure how to validate the synthesized, unsigned (correctly: rfc 4035 sect. 3 final para), CNAME record - a quick skim
 of dnsmasq's source doesn't show as much referencing of T_DNAME as I would expect for a DNAME-aware resolver).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I've recreated this with dnsmasq 2.91rc5:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"># make COPTS=-DHAVE_DNSSEC<o:p></o:p></p>
<p class="MsoNormal">[…]<o:p></o:p></p>
<p class="MsoNormal"># ./src/dnsmasq --version<o:p></o:p></p>
<p class="MsoNormal">Dnsmasq version 2.91rc5  Copyright (c) 2000-2025 Simon Kelley<o:p></o:p></p>
<p class="MsoNormal">Compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset no-nftset auth DNSSEC loop-detect inotify dumpfile<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This software comes with ABSOLUTELY NO WARRANTY.<o:p></o:p></p>
<p class="MsoNormal">Dnsmasq is free software, and you are welcome to redistribute it<o:p></o:p></p>
<p class="MsoNormal">under the terms of the GNU General Public License, version 2 or 3.<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">First, without dnssec validation, resolution is successful:<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal">$ dig -p 5353 @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -p 5353 @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal">; (1 server found)<o:p></o:p></p>
<p class="MsoNormal">;; global options: +cmd<o:p></o:p></p>
<p class="MsoNormal">;; Got answer:<o:p></o:p></p>
<p class="MsoNormal">;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19572<o:p></o:p></p>
<p class="MsoNormal">;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; OPT PSEUDOSECTION:<o:p></o:p></p>
<p class="MsoNormal">; EDNS: version: 0, flags:; udp: 1232<o:p></o:p></p>
<p class="MsoNormal">; COOKIE: b6f0093fa57419c20100000067d16e0a0b00303eb49db846 (good)<o:p></o:p></p>
<p class="MsoNormal">;; QUESTION SECTION:<o:p></o:p></p>
<p class="MsoNormal">;www.lancaster.ac.uk.                 IN           A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; ANSWER SECTION:<o:p></o:p></p>
<p class="MsoNormal">lancaster.ac.uk.              43200   IN           DNAME                lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancaster.ac.uk.   43200   IN           CNAME                wWw.lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancs.ac.uk.           3600      IN           A             148.88.65.80<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; Query time: 0 msec<o:p></o:p></p>
<p class="MsoNormal">;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)<o:p></o:p></p>
<p class="MsoNormal">;; WHEN: Wed Mar 12 11:20:42 GMT 2025<o:p></o:p></p>
<p class="MsoNormal">;; MSG SIZE  rcvd: 154<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"># ./src/dnsmasq --listen-address=127.0.0.1 --no-daemon --no-hosts --port=5353 --log-queries --no-resolv --server=148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: started, version 2.91rc5 cachesize 150<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset no-nftset auth DNSSEC loop-detect inotify dumpfile<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: using nameserver 148.88.65.52#53<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: cleared cache<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">dnsmasq: query[A] www.lancaster.ac.uk from 127.0.0.1<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: forwarded www.lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply www.lancaster.ac.uk is <CNAME><o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply www.lancs.ac.uk is 148.88.65.80<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Then, with dnssec validation enabled, the status is SERVFAIL, with an "NSEC Missing" error:<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal">$ dig -p 5353 @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -p 5353 @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal">; (1 server found)<o:p></o:p></p>
<p class="MsoNormal">;; global options: +cmd<o:p></o:p></p>
<p class="MsoNormal">;; Got answer:<o:p></o:p></p>
<p class="MsoNormal">;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 18645<o:p></o:p></p>
<p class="MsoNormal">;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; OPT PSEUDOSECTION:<o:p></o:p></p>
<p class="MsoNormal">; EDNS: version: 0, flags:; udp: 1232<o:p></o:p></p>
<p class="MsoNormal">; COOKIE: efab28c4571261b60100000067d16e90e4d4929c967d9830 (good)<o:p></o:p></p>
<p class="MsoNormal">; EDE: 12 (NSEC Missing)<o:p></o:p></p>
<p class="MsoNormal">;; QUESTION SECTION:<o:p></o:p></p>
<p class="MsoNormal">;www.lancaster.ac.uk.                 IN           A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; Query time: 32 msec<o:p></o:p></p>
<p class="MsoNormal">;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)<o:p></o:p></p>
<p class="MsoNormal">;; WHEN: Wed Mar 12 11:22:56 GMT 2025<o:p></o:p></p>
<p class="MsoNormal">;; MSG SIZE  rcvd: 82<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"># ./src/dnsmasq --listen-address=127.0.0.1 --no-daemon --no-hosts --port=5353 --log-queries --no-resolv --server=148.88.65.52 --dnssec<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: started, version 2.91rc5 cachesize 150<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset no-nftset auth DNSSEC loop-detect inotify dumpfile<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: DNSSEC validation enabled<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: configured with trust anchor for <root> keytag 20326<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: using nameserver 148.88.65.52#53<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: cleared cache<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">dnsmasq: query[A] www.lancaster.ac.uk from 127.0.0.1<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: forwarded www.lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] . to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 20326, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 38696, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 26470, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DS for keytag 43876, algo 8, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DNSKEY keytag 43876, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DNSKEY keytag 43056, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DS for keytag 45874, algo 8, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is truncated<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 63831, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 63490, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 54274, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 45874, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DS for keytag 18943, algo 13, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DNSKEY keytag 52067, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DNSKEY keytag 18943, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] www.lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] lancs.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancs.ac.uk is DS for keytag 30106, algo 13, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] lancs.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancs.ac.uk is DNSKEY keytag 30106, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancs.ac.uk is DNSKEY keytag 37821, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: validation www.lancaster.ac.uk is BOGUS<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">As an aside, see that a request for the lancaster.ac.uk DNAME itself is indeed successful:<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal">$ dig -p 5353 @127.0.0.1 DNAME lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -p 5353 @127.0.0.1 DNAME lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal">; (1 server found)<o:p></o:p></p>
<p class="MsoNormal">;; global options: +cmd<o:p></o:p></p>
<p class="MsoNormal">;; Got answer:<o:p></o:p></p>
<p class="MsoNormal">;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55357<o:p></o:p></p>
<p class="MsoNormal">;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; OPT PSEUDOSECTION:<o:p></o:p></p>
<p class="MsoNormal">; EDNS: version: 0, flags:; udp: 1232<o:p></o:p></p>
<p class="MsoNormal">; COOKIE: d05676a64991eea80100000067d16ece6573dd2d0a5376b5 (good)<o:p></o:p></p>
<p class="MsoNormal">;; QUESTION SECTION:<o:p></o:p></p>
<p class="MsoNormal">;lancaster.ac.uk.                             IN           DNAME<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; ANSWER SECTION:<o:p></o:p></p>
<p class="MsoNormal">lancaster.ac.uk.              43200   IN           DNAME                lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; Query time: 40 msec<o:p></o:p></p>
<p class="MsoNormal">;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)<o:p></o:p></p>
<p class="MsoNormal">;; WHEN: Wed Mar 12 11:23:58 GMT 2025<o:p></o:p></p>
<p class="MsoNormal">;; MSG SIZE  rcvd: 112<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"># ./src/dnsmasq --listen-address=127.0.0.1 --no-daemon --no-hosts --port=5353 --log-queries --no-resolv --server=148.88.65.52 --dnssec<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: started, version 2.91rc5 cachesize 150<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset no-nftset auth DNSSEC loop-detect inotify dumpfile<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: DNSSEC validation enabled<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: configured with trust anchor for <root> keytag 20326<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: using nameserver 148.88.65.52#53<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: cleared cache<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">dnsmasq: query[DNAME] lancaster.ac.uk from 127.0.0.1<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: forwarded lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] . to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 26470, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 20326, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply . is DNSKEY keytag 38696, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DS for keytag 43876, algo 8, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DNSKEY keytag 43056, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply uk is DNSKEY keytag 43876, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DS for keytag 45874, algo 8, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DS] lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is truncated<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 45874, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 54274, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 63831, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply ac.uk is DNSKEY keytag 63490, algo 8<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DS for keytag 18943, algo 13, digest 2<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: dnssec-query[DNSKEY] lancaster.ac.uk to 148.88.65.52<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DNSKEY keytag 52067, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is DNSKEY keytag 18943, algo 13<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: validation result is SECURE<o:p></o:p></p>
<p class="MsoNormal">dnsmasq: reply lancaster.ac.uk is <DNAME><o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For reference, here is the result of querying unbound with validation enabled:<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal">$ dig +short @127.0.0.1 txt ch version.bind<o:p></o:p></p>
<p class="MsoNormal">"unbound 1.17.1"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$ dig  @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> @127.0.0.1 www.lancaster.ac.uk<o:p></o:p></p>
<p class="MsoNormal">; (1 server found)<o:p></o:p></p>
<p class="MsoNormal">;; global options: +cmd<o:p></o:p></p>
<p class="MsoNormal">;; Got answer:<o:p></o:p></p>
<p class="MsoNormal">;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31627<o:p></o:p></p>
<p class="MsoNormal">;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; OPT PSEUDOSECTION:<o:p></o:p></p>
<p class="MsoNormal">; EDNS: version: 0, flags:; udp: 1232<o:p></o:p></p>
<p class="MsoNormal">;; QUESTION SECTION:<o:p></o:p></p>
<p class="MsoNormal">;www.lancaster.ac.uk.                 IN           A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; ANSWER SECTION:<o:p></o:p></p>
<p class="MsoNormal">lancaster.ac.uk.              43200   IN           DNAME                lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancaster.ac.uk.   43200   IN           CNAME                www.lancs.ac.uk.<o:p></o:p></p>
<p class="MsoNormal">www.lancs.ac.uk.           3600      IN           A             148.88.65.80<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">;; Query time: 72 msec<o:p></o:p></p>
<p class="MsoNormal">;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)<o:p></o:p></p>
<p class="MsoNormal">;; WHEN: Wed Mar 12 11:30:09 GMT 2025<o:p></o:p></p>
<p class="MsoNormal">;; MSG SIZE  rcvd: 113<o:p></o:p></p>
<p class="MsoNormal">-=-<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">RFC 4035 section 4.8 and RFC 6672 section 5.3 describe some of the contortions required to validate when a DNAME is involved.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">DNSSEC signing is rare, and DNAME records are also rare, so I am unfortunately not aware of any other real-world instances of signed DNAMEs.  Other (unsigned) DNAME records seen in the wild include oxford-brookes.ac.uk & hrz.uni-bonn.de.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">With thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Graham<o:p></o:p></p>
</div>
</body>
</html>