mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-10 13:20:33 +02:00
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:
+15
-24
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user