mirror of
https://github.com/tailscale/tailscale.git
synced 2025-05-06 07:37:38 +00:00
net/dns: add GetBaseConfig to OSConfigurator interface.
Part of #953, required to make split DNS work on more basic platforms. Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
parent
fe9cd61d71
commit
68f76e9aa1
@ -163,6 +163,11 @@ func (m directManager) SupportsSplitDNS() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m directManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m directManager) Close() error {
|
func (m directManager) Close() error {
|
||||||
if _, err := os.Stat(backupConf); err != nil {
|
if _, err := os.Stat(backupConf); err != nil {
|
||||||
// If the backup file does not exist, then Up never ran successfully.
|
// If the backup file does not exist, then Up never ran successfully.
|
||||||
|
@ -36,6 +36,11 @@ func (c *fakeOSConfigurator) SupportsSplitDNS() bool {
|
|||||||
return c.SplitDNS
|
return c.SplitDNS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *fakeOSConfigurator) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *fakeOSConfigurator) Close() error { return nil }
|
func (c *fakeOSConfigurator) Close() error { return nil }
|
||||||
|
|
||||||
func TestManager(t *testing.T) {
|
func TestManager(t *testing.T) {
|
||||||
|
@ -300,6 +300,23 @@ func (m windowsManager) Close() error {
|
|||||||
return m.SetDNS(OSConfig{})
|
return m.SetDNS(OSConfig{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m windowsManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
if m.nrptWorks {
|
||||||
|
return OSConfig{}, errors.New("GetBaseConfig not supported")
|
||||||
|
}
|
||||||
|
resolvers, err := m.getBasePrimaryResolver()
|
||||||
|
if err != nil {
|
||||||
|
return OSConfig{}, err
|
||||||
|
}
|
||||||
|
return OSConfig{
|
||||||
|
Nameservers: resolvers,
|
||||||
|
// Don't return any search domains here, because even Windows
|
||||||
|
// 7 correctly handles blending search domains from multiple
|
||||||
|
// sources, and any search domains we add here will get tacked
|
||||||
|
// onto the Tailscale config unnecessarily.
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
// getBasePrimaryResolver returns a guess of the non-Tailscale primary
|
// getBasePrimaryResolver returns a guess of the non-Tailscale primary
|
||||||
// resolver on the system.
|
// resolver on the system.
|
||||||
// It's used on Windows 7 to emulate split DNS by trying to figure out
|
// It's used on Windows 7 to emulate split DNS by trying to figure out
|
||||||
|
@ -202,6 +202,11 @@ func (m nmManager) SetDNS(config OSConfig) error {
|
|||||||
|
|
||||||
func (m nmManager) SupportsSplitDNS() bool { return false }
|
func (m nmManager) SupportsSplitDNS() bool { return false }
|
||||||
|
|
||||||
|
func (m nmManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m nmManager) Close() error {
|
func (m nmManager) Close() error {
|
||||||
return m.SetDNS(OSConfig{})
|
return m.SetDNS(OSConfig{})
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,10 @@ package dns
|
|||||||
|
|
||||||
type noopManager struct{}
|
type noopManager struct{}
|
||||||
|
|
||||||
func (m noopManager) SetDNS(OSConfig) error { return nil }
|
func (m noopManager) SetDNS(OSConfig) error { return nil }
|
||||||
func (m noopManager) SupportsSplitDNS() bool { return false }
|
func (m noopManager) SupportsSplitDNS() bool { return false }
|
||||||
func (m noopManager) Close() error { return nil }
|
func (m noopManager) Close() error { return nil }
|
||||||
|
func (m noopManager) GetBaseConfig() (OSConfig, error) { return OSConfig{}, nil }
|
||||||
|
|
||||||
func NewNoopManager() noopManager {
|
func NewNoopManager() noopManager {
|
||||||
return noopManager{}
|
return noopManager{}
|
||||||
|
@ -17,6 +17,13 @@ type OSConfigurator interface {
|
|||||||
// installing a resolver only for specific DNS suffixes. If false,
|
// installing a resolver only for specific DNS suffixes. If false,
|
||||||
// the configurator can only set a global resolver.
|
// the configurator can only set a global resolver.
|
||||||
SupportsSplitDNS() bool
|
SupportsSplitDNS() bool
|
||||||
|
// GetBaseConfig returns the OS's "base" configuration, i.e. the
|
||||||
|
// resolver settings the OS would use without Tailscale
|
||||||
|
// contributing any configuration.
|
||||||
|
// GetBaseConfig must return the tailscale-free base config even
|
||||||
|
// after SetDNS has been called to set a Tailscale configuration.
|
||||||
|
// Only works when SupportsSplitDNS=false.
|
||||||
|
GetBaseConfig() (OSConfig, error)
|
||||||
// Close removes Tailscale-related DNS configuration from the OS.
|
// Close removes Tailscale-related DNS configuration from the OS.
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
@ -142,6 +142,11 @@ func (m resolvconfManager) SupportsSplitDNS() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m resolvconfManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m resolvconfManager) Close() error {
|
func (m resolvconfManager) Close() error {
|
||||||
var cmd *exec.Cmd
|
var cmd *exec.Cmd
|
||||||
switch m.impl {
|
switch m.impl {
|
||||||
|
@ -157,6 +157,11 @@ func (m resolvedManager) SupportsSplitDNS() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m resolvedManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m resolvedManager) Close() error {
|
func (m resolvedManager) Close() error {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), reconfigTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), reconfigTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -49,6 +49,11 @@ func (r *CallbackRouter) SupportsSplitDNS() bool {
|
|||||||
return r.SplitDNS
|
return r.SplitDNS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *CallbackRouter) GetBaseConfig() (dns.OSConfig, error) {
|
||||||
|
// TODO
|
||||||
|
return dns.OSConfig{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *CallbackRouter) Close() error {
|
func (r *CallbackRouter) Close() error {
|
||||||
return r.SetBoth(nil, nil) // TODO: check if makes sense
|
return r.SetBoth(nil, nil) // TODO: check if makes sense
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user