-
-
Notifications
You must be signed in to change notification settings - Fork 373
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FR] Support for RESINFO RRType 261 (RFC9606) #1207
Comments
LDNS_RR_TYPE_RESINFO similar to LDNS_RR_TYPE_TXT.
Hi @mdavids, I added the RESINFO type, so the potential use-case can be used in the configuration. However I believe this needs a second pass in the future (why I leave the issue open atm), to properly address the RFC. |
Thank you for doing this. And I appreciate you leave the issue open for a second pass. I've been thinking about this as well, as the RFC raises some questions with me. It might perhaps be a bit ambiguous. The RFC says that a client: "MUST set the RD bit to 0 and MUST discard the response if the AA flag in the response is set to 0". The 'local-data method' seems to provide the proper response under these conditions (I tested it with TXT, for the lack of RESINFO), so that could be sufficient. But maybe you can think of better ways to implement RFC9606-support in Unbound? To me RFC9606 has some resemblance with RFC4892 ("id.server"), but then again, maybe not. It seems okay to forward any RESINFO queries when there is no local-data or similar 'interception mechanism' defined, given the RD and AA requirements mentioned above. But I'm still a bit puzzled here. Anyway... You might want to test this in real life with DNS4ALL, where we made an attempt to implement it:
With and without RD-bit, to see the difference. What do you think? Also, please note the DoH-option, which is one of two REQUIRED options mentioned in the _Security Consideration_s section. The other one is 'local DNSSEC validation', which I don't quite understand (we do not prohibit Do53 however, because we don't care). |
I believe the part about the AA flag is so that client is sure the reply is coming from the resolver itself. So I believe if your resolver knows about RESINFO, it can reply with the AA flag and don't care about the client RD bit because it will never try to resolve it in the first place.
Actually this is exactly how I was planning to implement this. Intercept the RESINFO type regardless of the qname and return back the information depending how Unbound is configured. If no information is to be returned, refused would be used. But since Unbound would know about RESINFO, it will never process the query further.
I don't think that DNSSEC can help in practice. For sure you can't sign resolver.arpa, and having signed information in a zone-ish thing does not mean that the resolver that happens to serve that record has those capabilities. It would also be an operational nightmare I suppose. Btw I am thinking along these lines for configuration (also note to self):
|
FYI: please note that I did not make up 'temp-dnsseceval' entirely out of the blue: https://datatracker.ietf.org/doc/draft-bortzmeyer-add-resinfo-dnssecval-dns64/ |
* nlnet/master: - For NLnetLabs#1207: [FR] Support for RESINFO RRType 261 (RFC9606), add LDNS_RR_TYPE_RESINFO similar to LDNS_RR_TYPE_TXT. Changelog entry for NLnetLabs#1204: - Merge NLnetLabs#1204: ci: set persist-credentials: false for actions/checkout per zizmor suggestion. set persist-credentials: false per zizmor suggestion - Fix typo in log_servfail.tdir test. Changelog entry for NLnetLabs#1187: - Merge NLnetLabs#1187: Create the SSL_CTX for QUIC before chroot and privilege drop. Create the SSL_CTX for QUIC before chroot and privilege drop (NLnetLabs#1187) - Safeguard alias loop while looking in the cache for expired answers. - Merge NLnetLabs#1198: Fix log-servfail with serve expired and no useful cache contents. - For NLnetLabs#1175, the default value of serve-expired-ttl is set to 86400 (1 day) as suggested by RFC8767. Changelog entry for NLnetLabs#1189, NLnetLabs#1197: - Merge NLnetLabs#1189: Fix the dname_str method to cause conversion errors when the domain name length is 255. - Merge NLnetLabs#1197: dname_str() fixes. - For NLnetLabs#1193, introduce log-servfail.tdir and cleanup the log-servfail setting from other tests. - Fix NLnetLabs#1193: log-servfail fails to log host SERVFAIL responses in Unbound 1.19.2 on Ubuntu 24.04.1 LTS, by not considering cached failures when trying to reply with expired data. - For NLnetLabs#1189, homogenize the input buffer size for dname_str(). - For NLnetLabs#1189, add unit tests for dname_str() and debug check the input buffer size. Fix the dname_str method to cause conversion errors when the domain name length is 255
Perhaps it does not belong here, but I have been playing with this in Net::DNS and have an issue with the example above. The three attributes are concatenated as a single TXT style text string. However, RFC9606 section 6 leads me to suppose that each attribute inhabits a separate text string in the RR (i.e. unquoted, no internal spaces). This distinction is important if the response is to be processed by a perl script.
|
RFC9606 defines the format indirectly by reference to RFC6763 section 6.3: "Each key/value pair is encoded as its own constituent string within the I have raised an erratum against RFC9606 to make that an explicit requirement. |
Please try again. |
Perfect!
Thanks |
|
I am against intercepting any qname and answering for it itself. I just did dns4all query from my localhost resolver and it worked. I would expect this should work for everything but resolver.arpa name. Instead, unbound should allow to be told with own FQDN presented to clients and listen only on those owner names. If I use unbound as localhost resolver, I could Anyway, I think unbound should synthetize also If I would configure I would prefix it with I admit for separate recursive and authoritative public zone server this creates a problem. Because resolver.example.com name would have to be authoritative on normally recursive server. seems like a problem in RESINFO design, because only RESINFO record cannot be delegated to other server from |
I mean, even for resolver.dns4all.eu:
Indicates authoritative records for resolver are not served by the resolver itself. Even in this case RESINFO is on authoritative server, where it cannot react to direct resolver configuration changes (for example disabling validation). It seems resolver would have to use dynamic updates to update its records on authoritative server. So maybe resolver should only respond to |
I don't understand any of this :) RESINFO traversing DNS does not seem trivial and robust to me. Let alone the reliance on (globally) resolvable names for forwarders. |
Without wanting to sound rude, I sometimes feel that the thinking process about RFC9606 here in this issue already goes a lot further than the original authors ever did (were they perhaps Bind9 focussed, where an authoritative and a recursor can be combined in one daemon ?). But I hope i'm wrong. In any case; the (main) reason why we made RESINFO (also) available on the authoritative side, has to do with the Security Considerations section - bullet point 2, which suggests that (in our case) And for us, putting it in the |
So, your against Not sure if I got it right; but that is how I read RFC9606 initially - like some sort of 'internal record' (but also see my comment above - which got me confused). |
I interpret is the client must set RD=0 to query his local resolver. If only that is ever desired, there is no need to respond to other qname than resolver.arpa. The RFC does not say what exactly should happen when RD=1 is used with RESINFO and FQDN not belonging to the current resolver. I think _dns SVCB is there to pick their resolvers. RESINFO is to get more details about the resolver they have chosen IMO. I think there should be some way to query configured forwarders (global or specific zone), which clients allowed to recurse might be able to query. That does not yet exist. But if the server has record on FQDN name, I expect naturally it should be able to query it by any normal way, like a normal record. No, because |
Current behavior
It seems that the RFC9606 RESINFO RRType 261 is not yet supported.
(I checked version 1.22.0)
Describe the desired feature
Support RESINFO RRType
Potential use-case
For example to be able to use it in local-data, like:
local-data: 'resolver.arpa RESINFO "qnamemin temp-dnssecval infourl=https://example.nl"'
UPDATE:
Probably this would be better given the discussion below:
local-data: 'resolver.arpa RESINFO "qnamemin" "temp-dnssecval" "infourl=https://example.nl"'
(I have left the original wrong line here also, so the discussion below can be better understood)
The text was updated successfully, but these errors were encountered: