Skip to content

Conversation

slyon
Copy link
Contributor

@slyon slyon commented Aug 25, 2025

Description

As of Ubuntu 25.10, we're shipping the systemd-resolved-dnssec package, enabling local DNSSEC in systemd-resolved by default (still in fallback mode). Update the DNSSEC docs around that change in default configuration, better separation of remote validating resolvers & local stub resolvers, and extend it wrt. troubleshooting of local DNSSEC validation.


Related Issue

SD-2170


Contributor License Agreement (CLA)

By contributing to this project, you agree to the terms of
the Canonical Contributor License Agreement (CLA).
If you have not already signed the CLA, please do so here.


Commit Message for Squash Merge

DNSSEC: As of Ubuntu 25.10, we're enabling local DNSSEC validation in systemd-resolved

Update the DNSSEC docs around that change in default configuration, better separation of remote validating resolvers & local stub resolvers, and extend it wrt. troubleshooting of local DNSSEC validation.

Checklist


Additional Notes (Optional)

N/A

@slyon slyon requested a review from s-makin August 25, 2025 14:22
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
```

Should authenticity of DNS records be a concern to you, it's advised to override the default DNSSEC validation settings through an additional drop-in configuration in `/etc/systemd/resolved.conf.d/10-dnssec.conf`, which would reject any unsigned records, after reloading the configuration:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reject any unsigned records part is a bit misleading as that's not what DNSSEC=yes does. It insists on valid signatures for records that are supposed to be signed. Domains not signed remain resolvable.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that this needs clarification. The manpage uses the expression "support DNSSEC properly", and that leaves a lot of room for interpretation, both in the context of documentation, but also in what the correct response of the service is. For the "yes" value, it says "If the DNS server does not properly support DNSSEC all validations will fail.".
Similarly, the "allow-downgrade" option also uses the "support DNSSEC properly" expression.
I guess the behavior we all want is: if records are signed on the server, we want that signature to be valid, and reject if not. If records are not signed (or not supposed to be signed), then we won't require a signature.
And finally, there might be systems out there that definitely want to only deal with signed records, and reject any DNS response that is not authenticated. Is that what "yes" means here?


In general, local DNSSEC validation is only required in more specific secure environments.
In general, local DNSSEC validation is still the most secure approach, validating the records end-to-end, without the need to trust any DNS server along the way.
Copy link
Member

@simondeziel simondeziel Aug 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since systemd-resolved supports DoT, it might be worth adding a quick note that this could also be used to secure the resolver <-> client path if the resolver is trusted.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a generic note, so we could even mention DoH, too. As both DoT and DoH could be used to increase privacy.

$ systemctl reload systemd-resolved.service
```
```{warning}
Be aware that enforcing DNSSEC can lead to errors like `DNS_PROBE_FINISHED_NXDOMAIN` in your browser, especially for local, unsigned domains and you would only be able to reach such services by accessing them through their IP address directly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why single out the browser? You could get errors everywhere, no?

* https://wander.science/projects/dns/dnssec-resolver-test/

```{note}
In case of issues with Domain Name resolution, make sure to remove any drop-in configs for **systemd-resolved**, execute `systemctl reload systemd-resolved.service` and `apt remove systemd-resolved-dnssec`. This will reset any DNSSEC configuration to `DNSSEC=no` and can be confirmed by executing `resolvectl dnssec`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There could also be drop-in configs for resolved.conf, right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it easier to also, or perhaps instead of, instruct to remove the systemd-resolved-dnssec package?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, those are only drop-ins for resolved.conf.

And I need to re-phrase this whole section, as the systemd-resolved-dnssec package is now gone again.

Copy link
Collaborator

@s-makin s-makin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only some minor formatting nits from me (for consistency)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants