net/dns: correctly capture all traffic in non-split configs.
@@ -137,13 +137,34 @@ func (m *nmManager) trySet(ctx context.Context, config OSConfig) error {
}
}
+ seen := map[dnsname.FQDN]bool{}
+ var search []string
+ for _, dom := range config.SearchDomains {
+ if seen[dom] {
+ continue
+ }
+ seen[dom] = true
+ search = append(search, dom.WithTrailingDot())
+ }
+ for _, dom := range config.MatchDomains {
+ if seen[dom] {
+ continue
+ }
+ seen[dom] = true
+ search = append(search, "~"+dom.WithTrailingDot())
+ }
+ if len(config.MatchDomains) == 0 {
+ // Non-split routing requested, add an all-domains match.
+ search = append(search, "~.")
+ }
+
general := settings["connection"]
general["llmnr"] = dbus.MakeVariant(0)
general["mdns"] = dbus.MakeVariant(0)
ipv4Map := settings["ipv4"]
ipv4Map["dns"] = dbus.MakeVariant(dnsv4)
- ipv4Map["dns-search"] = dbus.MakeVariant(config.SearchDomains)
+ ipv4Map["dns-search"] = dbus.MakeVariant(search)
// We should only request priority if we have nameservers to set.
if len(dnsv4) == 0 {
ipv4Map["dns-priority"] = dbus.MakeVariant(lowerPriority)
@@ -179,7 +200,7 @@ func (m *nmManager) trySet(ctx context.Context, config OSConfig) error {
ipv6Map["never-default"] = dbus.MakeVariant(true)
ipv6Map["dns"] = dbus.MakeVariant(dnsv6)
- ipv6Map["dns-search"] = dbus.MakeVariant(config.SearchDomains)
+ ipv6Map["dns-search"] = dbus.MakeVariant(search)
if len(dnsv6) == 0 {
ipv6Map["dns-priority"] = dbus.MakeVariant(lowerPriority)
} else if len(config.MatchDomains) > 0 {
