cmd/cli: remove workaround for systemd-resolved

With new version of tailscale fork library, the DNS could now be set
correctly with systemd-resolved, instead of retrying multiple times.
This commit is contained in:
Cuong Manh Le
2025-02-18 20:19:04 +07:00
committed by Cuong Manh Le
parent e30ad31e0f
commit 3403b2039d
+15 -24
View File
@@ -72,34 +72,25 @@ func setDNS(iface *net.Interface, nameservers []string) error {
SearchDomains: []dnsname.FQDN{}, SearchDomains: []dnsname.FQDN{},
} }
trySystemdResolve := false trySystemdResolve := false
for i := 0; i < maxSetDNSAttempts; i++ { if err := r.SetDNS(osConfig); err != nil {
if err := r.SetDNS(osConfig); err != nil { if strings.Contains(err.Error(), "Rejected send message") &&
if strings.Contains(err.Error(), "Rejected send message") && strings.Contains(err.Error(), "org.freedesktop.network1.Manager") {
strings.Contains(err.Error(), "org.freedesktop.network1.Manager") { mainLog.Load().Warn().Msg("Interfaces are managed by systemd-networkd, switch to systemd-resolve for setting DNS")
mainLog.Load().Warn().Msg("Interfaces are managed by systemd-networkd, switch to systemd-resolve for setting DNS") trySystemdResolve = true
trySystemdResolve = true goto systemdResolve
break
}
// This error happens on read-only file system, which causes ctrld failed to create backup
// for /etc/resolv.conf file. It is ok, because the DNS is still set anyway, and restore
// DNS will fallback to use DHCP if there's no backup /etc/resolv.conf file.
// The error format is controlled by us, so checking for error string is fine.
// See: ../../internal/dns/direct.go:L278
if r.Mode() == "direct" && strings.Contains(err.Error(), resolvConfBackupFailedMsg) {
return nil
}
return err
} }
if useSystemdResolved { // This error happens on read-only file system, which causes ctrld failed to create backup
if out, err := exec.Command("systemctl", "restart", "systemd-resolved").CombinedOutput(); err != nil { // for /etc/resolv.conf file. It is ok, because the DNS is still set anyway, and restore
mainLog.Load().Warn().Err(err).Msgf("could not restart systemd-resolved: %s", string(out)) // DNS will fallback to use DHCP if there's no backup /etc/resolv.conf file.
} // The error format is controlled by us, so checking for error string is fine.
} // See: ../../internal/dns/direct.go:L278
currentNS := currentDNS(iface) if r.Mode() == "direct" && strings.Contains(err.Error(), resolvConfBackupFailedMsg) {
if isSubSet(nameservers, currentNS) {
return nil return nil
} }
return err
} }
systemdResolve:
if trySystemdResolve { if trySystemdResolve {
// Stop systemd-networkd and retry setting DNS. // Stop systemd-networkd and retry setting DNS.
if out, err := exec.Command("systemctl", "stop", "systemd-networkd").CombinedOutput(); err != nil { if out, err := exec.Command("systemctl", "stop", "systemd-networkd").CombinedOutput(); err != nil {