wgengine: move DNS configuration out of wgengine/router.
Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:

committed by
Dave Anderson

parent
7183e1f052
commit
4c61ebacf4
@ -84,6 +84,7 @@ type userspaceEngine struct {
|
||||
tundev *tstun.Wrapper
|
||||
wgdev *device.Device
|
||||
router router.Router
|
||||
dns *dns.Manager
|
||||
resolver *resolver.Resolver
|
||||
magicConn *magicsock.Conn
|
||||
linkMon *monitor.Mon
|
||||
@ -143,6 +144,10 @@ type Config struct {
|
||||
// If nil, a fake Router that does nothing is used.
|
||||
Router router.Router
|
||||
|
||||
// DNS interfaces the Engine to the OS DNS resolver configuration.
|
||||
// If nil, a fake OSConfigurator that does nothing is used.
|
||||
DNS dns.OSConfigurator
|
||||
|
||||
// LinkMonitor optionally provides an existing link monitor to re-use.
|
||||
// If nil, a new link monitor is created.
|
||||
LinkMonitor *monitor.Mon
|
||||
@ -193,6 +198,10 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error)
|
||||
logf("[v1] using fake (no-op) OS network configurator")
|
||||
conf.Router = router.NewFake(logf)
|
||||
}
|
||||
if conf.DNS == nil {
|
||||
logf("[v1] using fake (no-op) DNS configurator")
|
||||
conf.DNS = dns.NewNoopManager()
|
||||
}
|
||||
|
||||
tsTUNDev := tstun.Wrap(logf, conf.Tun)
|
||||
closePool.add(tsTUNDev)
|
||||
@ -204,6 +213,7 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error)
|
||||
waitCh: make(chan struct{}),
|
||||
tundev: tsTUNDev,
|
||||
router: conf.Router,
|
||||
dns: dns.NewManager(logf, conf.DNS),
|
||||
pingers: make(map[wgkey.Key]*pinger),
|
||||
}
|
||||
e.isLocalAddr.Store(genLocalAddrFunc(nil))
|
||||
@ -990,25 +1000,26 @@ func (e *userspaceEngine) Reconfig(cfg *wgcfg.Config, routerCfg *router.Config,
|
||||
LocalDomains: dnsCfg.AuthoritativeSuffixes,
|
||||
Routes: map[string][]netaddr.IPPort{},
|
||||
}
|
||||
osCfg := dns.OSConfig{
|
||||
Domains: dnsCfg.SearchDomains,
|
||||
}
|
||||
// We must proxy through quad-100 if MagicDNS hosts are in
|
||||
// use, or there are any per-domain routes.
|
||||
mustProxy := len(dnsCfg.Hosts) > 0 || len(dnsCfg.Routes) > 0
|
||||
routerCfg.DNS = dns.OSConfig{
|
||||
Domains: dnsCfg.SearchDomains,
|
||||
}
|
||||
if mustProxy {
|
||||
routerCfg.DNS.Nameservers = []netaddr.IP{tsaddr.TailscaleServiceIP()}
|
||||
osCfg.Nameservers = []netaddr.IP{tsaddr.TailscaleServiceIP()}
|
||||
resolverCfg.Routes["."] = dnsCfg.DefaultResolvers
|
||||
for suffix, resolvers := range dnsCfg.Routes {
|
||||
resolverCfg.Routes[suffix] = resolvers
|
||||
}
|
||||
} else {
|
||||
for _, resolver := range dnsCfg.DefaultResolvers {
|
||||
routerCfg.DNS.Nameservers = append(routerCfg.DNS.Nameservers, resolver.IP)
|
||||
osCfg.Nameservers = append(osCfg.Nameservers, resolver.IP)
|
||||
}
|
||||
}
|
||||
routerCfg.DNS.Domains = dnsCfg.SearchDomains
|
||||
osCfg.Domains = dnsCfg.SearchDomains
|
||||
e.resolver.SetConfig(resolverCfg) // TODO: check error and propagate to health pkg
|
||||
e.dns.Set(osCfg) // TODO: check error and propagate to health pkg
|
||||
e.logf("wgengine: Reconfig: configuring router")
|
||||
err := e.router.Set(routerCfg)
|
||||
health.SetRouterHealth(err)
|
||||
|
Reference in New Issue
Block a user