diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index eb6eaf3ce2..567d41bf23 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -3431,6 +3431,16 @@ Token=prefixstable:2002:da8:1::
+
+ UseDNR=
+
+ When true, the DNR servers received in the Router Advertisement will be used. Defaults to
+ the value of .
+
+
+
+
+
UseDomains=
diff --git a/src/network/networkd-dns.c b/src/network/networkd-dns.c
index b57785a92a..25a96eb486 100644
--- a/src/network/networkd-dns.c
+++ b/src/network/networkd-dns.c
@@ -109,6 +109,9 @@ bool link_get_use_dnr(Link *link, NetworkConfigSource proto) {
case NETWORK_CONFIG_SOURCE_DHCP6:
n = link->network->dhcp6_use_dnr;
break;
+ case NETWORK_CONFIG_SOURCE_NDISC:
+ n = link->network->ndisc_use_dnr;
+ break;
default:
assert_not_reached();
}
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index 6110bcdec9..53d1297d1a 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -1912,6 +1912,9 @@ static int ndisc_router_process_encrypted_dns(Link *link, sd_ndisc_router *rt) {
sd_dns_resolver *res;
_cleanup_(ndisc_dnr_freep) NDiscDNR *new_entry = NULL;
+ if (!link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_NDISC))
+ return 0;
+
r = sd_ndisc_router_get_sender_address(rt, &router);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to get gateway address from RA: %m");
diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
index 61dd333e1d..62662654a2 100644
--- a/src/network/networkd-network-gperf.gperf
+++ b/src/network/networkd-network-gperf.gperf
@@ -309,6 +309,7 @@ IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool,
IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ndisc_use_onlink_prefix)
IPv6AcceptRA.UsePREF64, config_parse_bool, 0, offsetof(Network, ndisc_use_pref64)
IPv6AcceptRA.UseDNS, config_parse_tristate, 0, offsetof(Network, ndisc_use_dns)
+IPv6AcceptRA.UseDNR, config_parse_tristate, 0, offsetof(Network, ndisc_use_dnr)
IPv6AcceptRA.UseDomains, config_parse_use_domains, 0, offsetof(Network, ndisc_use_domains)
IPv6AcceptRA.UseMTU, config_parse_bool, 0, offsetof(Network, ndisc_use_mtu)
IPv6AcceptRA.UseHopLimit, config_parse_bool, 0, offsetof(Network, ndisc_use_hop_limit)
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 6339e25cef..3691f7730d 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -484,6 +484,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
.ndisc = -1,
.ndisc_use_redirect = true,
.ndisc_use_dns = -1,
+ .ndisc_use_dnr = -1,
.ndisc_use_gateway = true,
.ndisc_use_captive_portal = true,
.ndisc_use_route_prefix = true,
diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
index 74fefde07a..b4ab117928 100644
--- a/src/network/networkd-network.h
+++ b/src/network/networkd-network.h
@@ -345,6 +345,7 @@ struct Network {
/* NDisc support */
int ndisc;
+ int ndisc_use_dnr;
bool ndisc_use_redirect;
int ndisc_use_dns;
bool ndisc_use_gateway;