summaryrefslogtreecommitdiffhomepage
path: root/wgengine/userspace.go
diff options
context:
space:
mode:
Diffstat (limited to 'wgengine/userspace.go')
-rw-r--r--wgengine/userspace.go36
1 files changed, 23 insertions, 13 deletions
diff --git a/wgengine/userspace.go b/wgengine/userspace.go
index 7f7070b35..5a7fbe472 100644
--- a/wgengine/userspace.go
+++ b/wgengine/userspace.go
@@ -121,7 +121,7 @@ type userspaceEngine struct {
// RouterGen is the signature for a function that creates a
// router.Router.
-type RouterGen func(logf logger.Logf, wgdev *device.Device, tundev tun.Device) (router.Router, error)
+type RouterGen func(router.InitConfig) (router.Router, error)
type EngineConfig struct {
// Logf is the logging function used by the engine.
@@ -309,9 +309,15 @@ func newUserspaceEngineAdvanced(conf EngineConfig) (_ Engine, reterr error) {
}
}()
- // Pass the underlying tun.(*NativeDevice) to the router:
- // routers do not Read or Write, but do access native interfaces.
- e.router, err = conf.RouterGen(logf, e.wgdev, e.tundev.Unwrap())
+ routerCfg := router.InitConfig{
+ Logf: logf,
+ Wgdev: e.wgdev,
+ // Pass the unwrapped tun.(*NativeDevice) to the router:
+ // routers do not Read or Write, but do access native interfaces.
+ Tun: conf.TUN,
+ Resolver: e.resolver,
+ }
+ e.router, err = conf.RouterGen(routerCfg)
if err != nil {
e.magicConn.Close()
return nil, err
@@ -857,17 +863,21 @@ func (e *userspaceEngine) Reconfig(cfg *wgcfg.Config, routerCfg *router.Config)
if routerChanged {
if routerCfg.DNS.Proxied {
- ips := routerCfg.DNS.Nameservers
- upstreams := make([]net.Addr, len(ips))
- for i, ip := range ips {
- stdIP := ip.IPAddr()
- upstreams[i] = &net.UDPAddr{
- IP: stdIP.IP,
- Port: 53,
- Zone: stdIP.Zone,
+ if len(routerCfg.DNS.Nameservers) == 0 {
+ routerCfg.DNS.PerDomain = true
+ } else {
+ ips := routerCfg.DNS.Nameservers
+ upstreams := make([]net.Addr, len(ips))
+ for i, ip := range ips {
+ stdIP := ip.IPAddr()
+ upstreams[i] = &net.UDPAddr{
+ IP: stdIP.IP,
+ Port: 53,
+ Zone: stdIP.Zone,
+ }
}
+ e.resolver.SetUpstreams(upstreams)
}
- e.resolver.SetUpstreams(upstreams)
routerCfg.DNS.Nameservers = []netaddr.IP{tsaddr.TailscaleServiceIP()}
}
e.logf("wgengine: Reconfig: configuring router")