Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
ae87d0b
Upstream TSIG support.
ximon18 Apr 2, 2026
25fdfe9
Fix RustDoc violations.
ximon18 Apr 2, 2026
8a11e9d
(De)serialize to Base64.
ximon18 Apr 3, 2026
52c88cf
cargo fmt.
ximon18 Apr 3, 2026
79b3308
(de)serialize TSIG algorithm names exactly as defined in the IANA reg…
ximon18 Apr 7, 2026
4b07b11
Use ^ instead of ! and start adding man page content.
ximon18 Apr 7, 2026
4d56ffb
Add a cascade tsig man page.
ximon18 Apr 7, 2026
53f6205
More TSIG related man page updates.
ximon18 Apr 7, 2026
9b50f3c
Try adding an NSD integration page to showcase TSIG support.
ximon18 Apr 7, 2026
5845baf
Expand the NSD example.
ximon18 Apr 7, 2026
7002eb3
Tweak the NSD example.
ximon18 Apr 8, 2026
0750e4e
Advise how to create a TSIG key.
ximon18 Apr 8, 2026
7143a54
Start creating a system test for upstream TSIG.
ximon18 Apr 8, 2026
c0724ee
FIX: allow hmac- when specifying the algorithm name to `tsig key add`.
ximon18 Apr 8, 2026
678d55e
FIX: Wrong `tsig add` subcommand documentation.
ximon18 Apr 8, 2026
0c0d38c
Make the upstream TSIG system test try using TSIG.
ximon18 Apr 8, 2026
432e779
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 10, 2026
75b6ee3
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 10, 2026
b44b805
Fix merge error.
ximon18 Apr 10, 2026
059cd0a
Fix sphinx-build WARNING: Title underline too short.
ximon18 Apr 10, 2026
5c38ef9
Add `tsig list` CLI subcommand.
ximon18 Apr 10, 2026
80b6b3d
Document the tsig list subcommand.
ximon18 Apr 10, 2026
5c5ef7e
Commit updated generated man pages.
ximon18 Apr 10, 2026
1908500
Remove accidentally commited sphinx-build outputs.
ximon18 Apr 10, 2026
0426bc6
Remove accidentally commited sphinx-build outputs.
ximon18 Apr 10, 2026
15d6da2
Add TODO notes.
ximon18 Apr 10, 2026
86010bb
Introduce public-nameservers and send it to keyset. Handle TSIG related
Philip-NLnetLabs Apr 13, 2026
a83425a
Merge branch 'tsig-upstream-support' into keyset-upstream-nameserver
Philip-NLnetLabs Apr 13, 2026
18f464f
Something went wrong during the merge. First fix.
Philip-NLnetLabs Apr 13, 2026
63256bd
Fix call to reloa_all.
Philip-NLnetLabs Apr 13, 2026
542d70e
Implement `cascade tsig remove`.
ximon18 Apr 13, 2026
e03487b
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 14, 2026
e79a1ad
WIP
ximon18 Apr 14, 2026
596bbb9
WIP
ximon18 Apr 14, 2026
575c152
Bump dnst for set publication-server and set tsig-store-path support.
ximon18 Apr 15, 2026
ce919eb
WIP
ximon18 Apr 15, 2026
8193f94
Merge branch 'tsig-upstream-support' into keyset-upstream-nameserver
ximon18 Apr 15, 2026
1fb2e48
Merge branch 'keyset-upstream-nameserver' into tsig-downstream-support
ximon18 Apr 15, 2026
67becab
Introduce public-nameservers and send it to keyset. Handle TSIG relat…
Philip-NLnetLabs Apr 15, 2026
b8729fb
Merge branch 'tsig-upstream-support' of github.com:NLnetLabs/cascade …
ximon18 Apr 15, 2026
271bfac
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 15, 2026
e6a5192
Fix failing upstream-tsig system test by bumping the dnst version use…
ximon18 Apr 15, 2026
30ee572
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 15, 2026
11bf96a
Improve the policy template documentation for send-notify-to.
ximon18 Apr 15, 2026
787c1b8
Add more RustDoc on the NameserverCommsPolicy type.
ximon18 Apr 15, 2026
3331ff9
Add some more comments to the code.
ximon18 Apr 16, 2026
ee907f2
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 17, 2026
3a3ce07
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 17, 2026
855e6ce
Make tsig subcommand help text more consistent with the terminology u…
ximon18 Apr 17, 2026
3756c89
Report the set of supported TSIG algorithms in the CLI detailed help.
ximon18 Apr 17, 2026
78b1db0
Make tsig list output closer in style to the new zone status CLI outp…
ximon18 Apr 17, 2026
f683960
Make error message less confusing.
ximon18 Apr 17, 2026
04cd247
Man page typo correction and remove pondered addition.
ximon18 Apr 17, 2026
16d2619
cascade zone add man page text improvements.
ximon18 Apr 17, 2026
deb0a21
Minor cascade-tsig man page improvement.
ximon18 Apr 17, 2026
e790b75
Rebuild man pages.
ximon18 Apr 17, 2026
b1c599c
Remove sphinx static files.
ximon18 Apr 17, 2026
ee50dd7
Split large block of text into smaller more readable chunks.
ximon18 Apr 17, 2026
41f50cd
More zone transfer documentation.
ximon18 Apr 20, 2026
3d64c4b
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 20, 2026
f456267
More downstream zone transfer documentation.
ximon18 Apr 20, 2026
db29fd4
Add the new publication_nameservers field to the policy template.
ximon18 Apr 20, 2026
2b48138
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 20, 2026
82191f7
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 20, 2026
49474f7
Check the mid deletion flag when looking for policies using a TSIG key.
ximon18 Apr 20, 2026
6426c9a
Remove outdated comment.
ximon18 Apr 20, 2026
6fbf719
Fix formatting.
ximon18 Apr 20, 2026
e69c452
Additional comments and whitespace.
ximon18 Apr 20, 2026
bb462b3
Additional comment.
ximon18 Apr 20, 2026
3bf9f91
Use domain::dep::octseq to avoid dependency mismatch.
ximon18 Apr 20, 2026
c338121
Remove addition of downstream specific logic from upstream PR.
ximon18 Apr 20, 2026
92c01fd
Revert "Remove addition of downstream specific logic from upstream PR."
ximon18 Apr 20, 2026
f6a7a5c
Remove errant linebreak.
ximon18 Apr 20, 2026
021545e
Remove commented out line.
ximon18 Apr 20, 2026
ad2b492
Impl From<TsigAlgorithm> for Algorithm.
ximon18 Apr 20, 2026
eba3152
Remove unused import.
ximon18 Apr 20, 2026
abf9d92
Make log output more human readable.
ximon18 Apr 20, 2026
787ad2a
Revert "Remove addition of downstream specific logic from upstream PR."
ximon18 Apr 20, 2026
e6d8a5f
Remove outdated comment.
ximon18 Apr 20, 2026
d4a6bbf
Reapply "Remove addition of downstream specific logic from upstream PR."
ximon18 Apr 20, 2026
80ac2e7
Revert "Remove outdated comment."
ximon18 Apr 20, 2026
d77e034
Reapply "Remove addition of downstream specific logic from upstream PR."
ximon18 Apr 20, 2026
5dfa4f3
Revert "Reapply "Remove addition of downstream specific logic from up…
ximon18 Apr 20, 2026
7228b83
Additional comments on the NOTIFY handler re: ACL enforcement.
ximon18 Apr 20, 2026
9bc4f47
Remove policy comments that relate to downstream TSIG.
ximon18 Apr 20, 2026
773369a
Restore missing line.
ximon18 Apr 20, 2026
0fa77c8
Restore missing line exactly.
ximon18 Apr 20, 2026
1cdf7b0
Add a note about how adding a TSIG key has an effect, even without sp…
ximon18 Apr 20, 2026
d466f35
Document the new policy publication-nameservers setting.
ximon18 Apr 20, 2026
b08bc84
Re-generate rendered man pages.
ximon18 Apr 20, 2026
e2c4681
cargo fmt.
ximon18 Apr 20, 2026
2ba41ea
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 20, 2026
a8ff50c
Various review feedback updates.
ximon18 Apr 22, 2026
342cbfd
Use NameserverCommsSpec instead of String following internal discussion.
ximon18 Apr 22, 2026
42f554d
Various review feedback changes.
ximon18 Apr 22, 2026
5f44999
Review feedback: Remove unnecesary 'tsig' feature dependency.
ximon18 Apr 22, 2026
5ab8b6a
Remove left in debug statements.
ximon18 Apr 22, 2026
8354c5b
Review feedback: use explicit error variant.
ximon18 Apr 22, 2026
c5f7819
Review feedback: be more specific about the arguments to be supplied …
ximon18 Apr 22, 2026
8cdaa29
Review feedback: Note the insecure nature of using a command-line arg…
ximon18 Apr 22, 2026
5da60cb
Review feedback: improvements to the `zone add` documentation.
ximon18 Apr 22, 2026
555b728
Consistently use the :RFC:`NNN` linking mechanism in the docs.
ximon18 Apr 22, 2026
f61ccb7
Regenerate man pages.
ximon18 Apr 22, 2026
bc7db24
Review feedback.
ximon18 Apr 22, 2026
ef966b4
Review feedback: Link to man page.
ximon18 Apr 22, 2026
3056a48
Review feedback.
ximon18 Apr 22, 2026
838b675
Review feedback.
ximon18 Apr 22, 2026
ed68983
Minor tweak.
ximon18 Apr 22, 2026
399b384
More review feedback.
ximon18 Apr 22, 2026
f7529db
More review feedback and tweaks.
ximon18 Apr 22, 2026
4c6c181
Regenerate man pages.
ximon18 Apr 22, 2026
a822c42
Clippy.
ximon18 Apr 22, 2026
880cc3f
Increase note to warning.
ximon18 Apr 22, 2026
44282b9
Regenerate man pages.
ximon18 Apr 22, 2026
ebfc0f3
Fix broken RFC links.
ximon18 Apr 22, 2026
5198800
Remove errant back-tick character in docs.
ximon18 Apr 22, 2026
122e737
Merge branch 'main' into tsig-upstream-support
ximon18 Apr 22, 2026
36f4961
Add last error to zone status
tertsdiepraam Apr 22, 2026
144363a
Add more errors to zone status
tertsdiepraam Apr 22, 2026
d4fc435
Fully remove use of domain::tsig in the api crate.
ximon18 Apr 24, 2026
b625ff5
Support reading TSIG secret from a file.
ximon18 Apr 24, 2026
a2db6be
Also test with TSIG key from file.
ximon18 Apr 24, 2026
154d923
Review feedback: Don't wait 10 seconds, detect the XFR failure ASAP.
ximon18 Apr 24, 2026
ee3cb3d
Review feedback: Use a better zonefile path in NSD examples.
ximon18 Apr 24, 2026
aab66bf
Review feedback: Use RustDoc markdown, not reST markdown.
ximon18 Apr 24, 2026
4a58452
Review feedback: Quote --source argument.
ximon18 Apr 24, 2026
b851e81
Minor correction.
ximon18 Apr 24, 2026
078436e
Review feedback: Refer to authenticating communication in general.
ximon18 Apr 24, 2026
106094b
Review feedback.
ximon18 Apr 24, 2026
239a92a
Review feedback: consistent Display styling.
ximon18 Apr 24, 2026
982274e
Review feedback: Note that we might want a more useful error in future.
ximon18 Apr 24, 2026
27bdc14
Update policy docs and regenerate man pages.
ximon18 Apr 24, 2026
49043f8
Record that a zone uses a TSIG key when adding the zone.
ximon18 Apr 28, 2026
ef6ec6e
Various updates.
ximon18 Apr 28, 2026
1b65da9
Merge branch 'tsig-upstream-support' into tsig-downstream-support
ximon18 Apr 28, 2026
15290b7
Reference CLI subcmd using specific RST syntax for subcmas.
ximon18 Apr 28, 2026
664fb08
Also show policies that use TSIG keys.
ximon18 Apr 28, 2026
cb656c4
Update comment to match impl.
ximon18 Apr 28, 2026
876a88c
Remove outdated TODO comment.
ximon18 Apr 28, 2026
62609b8
Merge branch 'main' into tsig-downstream-support
ximon18 Apr 30, 2026
aed5c97
Review feedback: Fix tsig list CLI subcommand.
ximon18 Apr 30, 2026
efb18eb
Extend system test to verify behaviour of tsig remove and tsig list.
ximon18 Apr 30, 2026
3794273
Review feedback: Typo correction in log message.
ximon18 Apr 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions crates/api/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::fmt::{self, Display};
use std::net::SocketAddr;
use std::time::{Duration, SystemTime};
Expand Down Expand Up @@ -262,14 +262,17 @@ impl fmt::Display for TsigRemoveError {
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TsigListResult {
/// The set of TSIG keys known to Cascade plus information about each key.
pub tsig_keys: HashMap<TsigKeyName, TsigKeyInfo>,
pub tsig_key_info: HashMap<TsigKeyName, TsigKeyInfo>,
}

/// Information about a single listed TSIG key.
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TsigKeyInfo {
/// The set of zones with which this TSIG key is used.
pub zones: Vec<ZoneName>,
pub zone_names: HashSet<ZoneName>,

/// The set of policies with which this TSIG key is used.
pub policy_names: HashSet<String>,
}

//----------- ZoneAdd --------------------------------------------------------
Expand Down Expand Up @@ -855,7 +858,7 @@ pub struct ServerPolicyInfo {

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct OutboundPolicyInfo {
pub accept_xfr_requests_from: Vec<NameserverCommsPolicyInfo>,
pub accept_xfr_from: Vec<NameserverCommsPolicyInfo>,
pub send_notify_to: Vec<NameserverCommsPolicyInfo>,
}

Expand Down
4 changes: 2 additions & 2 deletions crates/cli/src/commands/policy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ fn print_policy(p: &PolicyInfo) {
print_review(&p.signer.review);
println!(" server:");
println!(" outbound:");
println!(" accept XFR requests from:");
print_nameserver_comms_policy(&p.server.outbound.accept_xfr_requests_from);
println!(" accept XFR from:");
print_nameserver_comms_policy(&p.server.outbound.accept_xfr_from);
println!(" send NOTIFY to:");
print_nameserver_comms_policy(&p.server.outbound.send_notify_to);
}
27 changes: 20 additions & 7 deletions crates/cli/src/commands/tsig.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,20 +170,33 @@ impl Tsig {
TsigCommand::List => {
let response: TsigListResult = client.get_json("tsig/").await?;

for (tsig_key_name, key_info) in response.tsig_keys {
// For each TSIG key also list the zones that it is used
// with.
let zones = key_info
.zones
for (tsig_key_name, key_info) in response.tsig_key_info {
// For each TSIG key also list the zones and policies that
// it is used with.
let zone_names = key_info
.zone_names
.iter()
.map(ToString::to_string)
.collect::<Vec<String>>()
.join(", ");

let policy_names = key_info
.policy_names
.iter()
.map(ToString::to_string)
.collect::<Vec<String>>()
.join(", ");

println!("{tsig_key_name}");
print!(" zones: ");
if !zones.is_empty() {
println!("{zones}");
if !zone_names.is_empty() {
println!("{zone_names}");
} else {
println!("none");
}
print!(" policies: ");
if !policy_names.is_empty() {
println!("{policy_names}");
} else {
println!("none");
}
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-debug.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-DEBUG" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-DEBUG" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-debug \- Debug / troubleshoot Cascade
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-health.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-HEALTH" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-HEALTH" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-health \- Check the health of Cascade
.sp
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-hsm.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-HSM" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-HSM" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-hsm \- Manage HSMs
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-keyset.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-KEYSET" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-KEYSET" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-keyset \- Execute manual key roll or key removal commands
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-policy.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-POLICY" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-POLICY" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-policy \- Manage policies
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-status.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-STATUS" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-STATUS" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-status \- Show the status of Cascade
.sp
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-template.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-TEMPLATE" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-TEMPLATE" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-template \- Print example config or policy files
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-tsig.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-TSIG" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-TSIG" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-tsig \- Manage TSIG keys
.sp
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade-zone.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE-ZONE" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE-ZONE" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade-zone \- Manage zones
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascade.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADE" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADE" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascade \- Cascade CLI
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascaded-config.toml.5
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADED-CONFIG.TOML" "5" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADED-CONFIG.TOML" "5" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascaded-config.toml \- Cascade configuration file
.sp
Expand Down
22 changes: 17 additions & 5 deletions doc/manual/build/man/cascaded-policy.toml.5
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADED-POLICY.TOML" "5" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADED-POLICY.TOML" "5" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascaded-policy.toml \- Cascade policy file format
.sp
Expand Down Expand Up @@ -348,7 +348,7 @@ key roll.
Each nameserver must be specified as a string in the form:
.INDENT 7.0
.INDENT 3.5
\fB\(dq<IP>:[<PORT>][^<TSIG_KEY_NAME>]\(dq\fP
\fB\(dq<IP>[:<PORT>][^<TSIG_KEY_NAME>]\(dq\fP
.UNINDENT
.UNINDENT
.sp
Expand Down Expand Up @@ -641,17 +641,29 @@ The \fB[server.outbound]\fP section.
.INDENT 0.0
.TP
.B send\-notify\-to = []
The set of nameservers to which NOTIFY messages should be sent
The set of nameservers to which NOTIFY messages should be sent.
.sp
If no nameservers are specified, no NOTIFY messages will be sent.
.sp
Each nameserver must be specified as a string in the form:
.sp
\fI\(dq<IP>:[<PORT>][^<TSIG_KEY_NAME>]\(dq\fP
\fI\(dq<IP>[:<PORT>][^<TSIG_KEY_NAME>]\(dq\fP
.sp
If a TSIG key name is specified, a key by that name must exist in the
Cascade TSIG key store and will be used to authenticate communication with
the nameserver.
.UNINDENT
.INDENT 0.0
.TP
.B accept\-xfr\-from = []
The set of nameservers to accept zone transfer requests from.
.sp
If no nameservers are specified, zone transfer requests will be accepted
from any nameserver.
.sp
Each nameserver must be specified as a string in the form:
.sp
If not specified, no NOTIFY messages will be sent.
\fI\(dq<IP>[^<TSIG_KEY_NAME>]\(dq\fP
.UNINDENT
.SH FILES
.INDENT 0.0
Expand Down
2 changes: 1 addition & 1 deletion doc/manual/build/man/cascaded.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CASCADED" "1" "Apr 24, 2026" "0.1.0-alpha5" "Cascade"
.TH "CASCADED" "1" "Apr 30, 2026" "0.1.0-alpha5" "Cascade"
.SH NAME
cascaded \- DNSSEC signer
.SH SYNOPSIS
Expand Down
17 changes: 14 additions & 3 deletions doc/manual/source/man/cascaded-policy.toml.rst
Original file line number Diff line number Diff line change
Expand Up @@ -520,17 +520,28 @@ The ``[server.outbound]`` section.

.. option:: send-notify-to = []

The set of nameservers to which NOTIFY messages should be sent
The set of nameservers to which NOTIFY messages should be sent.

If no nameservers are specified, no NOTIFY messages will be sent.

Each nameserver must be specified as a string in the form:

`"<IP>[:<PORT>][^<TSIG_KEY_NAME>]"`
`"<IP>[:<PORT>][^<TSIG_KEY_NAME>]"`

If a TSIG key name is specified, a key by that name must exist in the
Cascade TSIG key store and will be used to authenticate communication with
the nameserver.

If not specified, no NOTIFY messages will be sent.
.. option:: accept-xfr-from = []

The set of nameservers to accept zone transfer requests from.

If no nameservers are specified, zone transfer requests will be accepted
from any nameserver.

Each nameserver must be specified as a string in the form:

`"<IP>[^<TSIG_KEY_NAME>]"`

Files
-----
Expand Down
29 changes: 28 additions & 1 deletion doc/manual/source/nsd.rst
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,31 @@ authenticate with NSD:
Using NSD as a secondary to Cascade
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TODO
The NSD settings relevant here are:
- `allow-notify <https://nsd.docs.nlnetlabs.nl/en/latest/manpages/nsd.conf.html#allow~2>`_
- `request-xfr <https://nsd.docs.nlnetlabs.nl/en/latest/manpages/nsd.conf.html#request>`_

To allow NSD to receive and respond to NOTIFY messages from Cascade, and
to instruct NSD to fetch zone updates via zone transfer from Cascade, these
settings need to be added to the zone configuration.

For example the following configures NSD for an upstream Cascade server
running at 192.168.0.2 listening on the default port 4542:

.. code-block::

zone:
name: example.com
allow-notify: 192.168.0.2
request-xfr: 192.168.0.2@4542

To authenticate zone transfer related messages using TSIG you must first have
added the key to both Cascade and NSD using the same :program:`cascade` :subcmd:`tsig add`
command and ``key:`` block as shown above.

To instruct Cascade to use TSIG when communicating with a downstream
nameserver such as NSD you must set the required policy settings and reload
the policy. The relevant policy settings in Cascade are:

- ``server.outbound.send-notify-to``
- ``server.outbound.accept-xfr-from```
14 changes: 14 additions & 0 deletions etc/policy.template.toml
Original file line number Diff line number Diff line change
Expand Up @@ -391,3 +391,17 @@ required = false
#
# If not specified, no NOTIFY messages will be sent.
send-notify-to = []

# The set of nameservers to accept zone transfer requests from.
#
# Each nameserver must be specified as a string in the form:
#
# `"<IP>[^<TSIG_KEY_NAME>]"`
#
# If a TSIG key name is specified, a key by that name must exist in the
# Cascade TSIG key store and will be used to authenticate communication with
# the nameserver.
#
# If not specified, zone transfer requests will be accepted from any
# nameserver.
accept-xfr-from = []
26 changes: 26 additions & 0 deletions integration-tests/scripts/manage-test-environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,11 @@ remote-control:
control-enable: yes
control-interface: "${base_dir}/nsd/nsd.sock"

key:
name: "tsig-key"
algorithm: hmac-sha256
secret: "COzoVsYQmXeXiyq1Quhp0bbVnMyxjPxsaGSoIWR98i0="

pattern:
name: secondary
zonefile: "%s.secondary-zone"
Expand All @@ -300,6 +305,27 @@ pattern:
zone:
name: example.test
include-pattern: secondary

zone:
name: notify-tsig.test
zonefile: "notify-tsig.test.secondary-zone"
allow-notify: 127.0.0.1 tsig-key
request-xfr: AXFR 127.0.0.1@${_cascade_port} NOKEY
provide-xfr: 127.0.0.1 NOKEY

zone:
name: xfr-tsig.test
zonefile: "xfr-tsig.test.secondary-zone"
allow-notify: 127.0.0.1 NOKEY
request-xfr: AXFR 127.0.0.1@${_cascade_port} tsig-key
provide-xfr: 127.0.0.1 NOKEY

zone:
name: notify-and-xfr-tsig.test
zonefile: "notify-and-xfr-tsig.test.secondary-zone"
allow-notify: 127.0.0.1 tsig-key
request-xfr: AXFR 127.0.0.1@${_cascade_port} tsig-key
provide-xfr: 127.0.0.1 NOKEY
EOF

tee "${base_dir}/nsd-primary.conf" <<EOF >&2
Expand Down
24 changes: 24 additions & 0 deletions integration-tests/system-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,27 @@ jobs:
with:
log-level: ${{ inputs.log-level }}
key-source: ${{ matrix.key-source }}

downstream-tsig:
name: Using TSIG with downstream nameservers.
runs-on: ubuntu-latest
strategy:
# max-parallel: 1
fail-fast: true
matrix:
send-notify-to: [ '', '127.0.0.1:1054', '127.0.0.1:1054^tsig-key' ]
accept-xfr-from: [ '', '127.0.0.1', '127.0.0.1^tsig-key' ]
downstream-expects-tsig: [ 0, 1 ]
downstream-uses-tsig: [ 0, 1 ]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/set-build-profile
with:
build-profile: ${{ inputs.build-profile }}
- uses: ./integration-tests/tests/downstream-tsig
with:
log-level: ${{ inputs.log-level }}
send-notify-to: ${{ matrix.send-notify-to }}
accept-xfr-from: ${{ matrix.accept-xfr-from }}
downstream-expects-tsig: ${{ matrix.downstream-expects-tsig }}
downstream-uses-tsig: ${{ matrix.downstream-uses-tsig }}
Loading
Loading