diff --git a/net/dns/manager_linux.go b/net/dns/manager_linux.go index 47ce5c1ca..0e9ee2d84 100644 --- a/net/dns/manager_linux.go +++ b/net/dns/manager_linux.go @@ -97,11 +97,22 @@ func NewOSConfigurator(logf logger.Logf, interfaceName string) (ret OSConfigurat dbg("src-is-nm", "yes") if err := dbusPing("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/DnsManager"); err == nil { dbg("nm", "yes") - return newNMManager(interfaceName) + old, err := nmVersionOlderThan("1.26.6") + if err != nil { + return nil, fmt.Errorf("checking NetworkManager version: %v", err) + } + if old { + dbg("nm-old", "yes") + return newNMManager(interfaceName) + } else { + dbg("nm-old", "no") + } + } else { + dbg("nm", "no") } - dbg("nm", "no") + } else { + dbg("src-is-nm", "no") } - dbg("src-is-nm", "no") if _, err := exec.LookPath("resolvconf"); err != nil { dbg("resolvconf", "no") return newDirectManager() @@ -115,7 +126,16 @@ func NewOSConfigurator(logf logger.Logf, interfaceName string) (ret OSConfigurat return newDirectManager() } dbg("nm", "yes") - return newNMManager(interfaceName) + old, err := nmVersionOlderThan("1.26.6") + if err != nil { + return nil, fmt.Errorf("checking NetworkManager version: %v", err) + } + if old { + dbg("nm-old", "yes") + return newNMManager(interfaceName) + } + dbg("nm-old", "no") + return newDirectManager() default: dbg("rc", "unknown") return newDirectManager()