|
|
|
|
@ -1442,35 +1442,41 @@ func (b *LocalBackend) authReconfig() { |
|
|
|
|
|
|
|
|
|
rcfg := routerConfig(cfg, uc) |
|
|
|
|
|
|
|
|
|
// If CorpDNS is false, rcfg.DNS remains the zero value.
|
|
|
|
|
var dcfg dns.Config |
|
|
|
|
|
|
|
|
|
// If CorpDNS is false, dcfg remains the zero value.
|
|
|
|
|
if uc.CorpDNS { |
|
|
|
|
proxied := nm.DNS.Proxied |
|
|
|
|
if proxied && len(nm.DNS.Nameservers) == 0 { |
|
|
|
|
b.logf("[unexpected] dns proxied but no nameservers") |
|
|
|
|
proxied = false |
|
|
|
|
} |
|
|
|
|
rcfg.DNS = dns.OSConfig{ |
|
|
|
|
Nameservers: nm.DNS.Nameservers, |
|
|
|
|
Domains: nm.DNS.Domains, |
|
|
|
|
Proxied: proxied, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
nameToIP := make(map[string][]netaddr.IP) |
|
|
|
|
set := func(name string, addrs []netaddr.IPPrefix) { |
|
|
|
|
if len(addrs) == 0 || name == "" { |
|
|
|
|
return |
|
|
|
|
for _, ip := range nm.DNS.Nameservers { |
|
|
|
|
dcfg.DefaultResolvers = append(dcfg.DefaultResolvers, netaddr.IPPort{ |
|
|
|
|
IP: ip, |
|
|
|
|
Port: 53, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
dcfg.SearchDomains = nm.DNS.Domains |
|
|
|
|
dcfg.AuthoritativeSuffixes = magicDNSRootDomains(nm) |
|
|
|
|
set := func(name string, addrs []netaddr.IPPrefix) { |
|
|
|
|
if len(addrs) == 0 || name == "" { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
var ips []netaddr.IP |
|
|
|
|
for _, addr := range addrs { |
|
|
|
|
ips = append(ips, addr.IP) |
|
|
|
|
} |
|
|
|
|
dcfg.Hosts[name] = ips |
|
|
|
|
} |
|
|
|
|
for _, addr := range addrs { |
|
|
|
|
nameToIP[name] = append(nameToIP[name], addr.IP) |
|
|
|
|
dcfg.Hosts = map[string][]netaddr.IP{} |
|
|
|
|
set(nm.Name, nm.Addresses) |
|
|
|
|
for _, peer := range nm.Peers { |
|
|
|
|
set(peer.Name, peer.Addresses) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for _, peer := range nm.Peers { |
|
|
|
|
set(peer.Name, peer.Addresses) |
|
|
|
|
} |
|
|
|
|
set(nm.Name, nm.Addresses) |
|
|
|
|
|
|
|
|
|
err = b.e.Reconfig(cfg, rcfg, nameToIP, magicDNSRootDomains(nm)) |
|
|
|
|
err = b.e.Reconfig(cfg, rcfg, &dcfg) |
|
|
|
|
if err == wgengine.ErrNoChanges { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
@ -1725,7 +1731,7 @@ func (b *LocalBackend) enterState(newState ipn.State) { |
|
|
|
|
b.blockEngineUpdates(true) |
|
|
|
|
fallthrough |
|
|
|
|
case ipn.Stopped: |
|
|
|
|
err := b.e.Reconfig(&wgcfg.Config{}, &router.Config{}, nil, nil) |
|
|
|
|
err := b.e.Reconfig(&wgcfg.Config{}, &router.Config{}, &dns.Config{}) |
|
|
|
|
if err != nil { |
|
|
|
|
b.logf("Reconfig(down): %v", err) |
|
|
|
|
} |
|
|
|
|
@ -1817,7 +1823,7 @@ func (b *LocalBackend) stateMachine() { |
|
|
|
|
// a status update that predates the "I've shut down" update.
|
|
|
|
|
func (b *LocalBackend) stopEngineAndWait() { |
|
|
|
|
b.logf("stopEngineAndWait...") |
|
|
|
|
b.e.Reconfig(&wgcfg.Config{}, &router.Config{}, nil, nil) |
|
|
|
|
b.e.Reconfig(&wgcfg.Config{}, &router.Config{}, &dns.Config{}) |
|
|
|
|
b.requestEngineStatusAndWait() |
|
|
|
|
b.logf("stopEngineAndWait: done.") |
|
|
|
|
} |
|
|
|
|
|