diff --git a/ipn/local.go b/ipn/local.go index ad11fe202..16934eb8e 100644 --- a/ipn/local.go +++ b/ipn/local.go @@ -1154,6 +1154,7 @@ func (b *LocalBackend) authReconfig() { uc := b.prefs nm := b.netMap hasPAC := b.prevIfState.HasPAC() + disableSubnetsIfPAC := nm != nil && nm.Debug != nil && nm.Debug.DisableSubnetsIfPAC.EqualBool(true) b.mu.Unlock() if blocked { @@ -1178,13 +1179,7 @@ func (b *LocalBackend) authReconfig() { if uc.AllowSingleHosts { flags |= controlclient.AllowSingleHosts } - if hasPAC { - // TODO(bradfitz): make this policy configurable per - // domain, flesh out all the edge cases where subnet - // routes might shadow corp HTTP proxies, DNS servers, - // domain controllers, etc. For now we just want - // Tailscale to stay enabled while laptops roam - // between corp & non-corp networks. + if hasPAC && disableSubnetsIfPAC { if flags&controlclient.AllowSubnetRoutes != 0 { b.logf("authReconfig: have PAC; disabling subnet routes") flags &^= controlclient.AllowSubnetRoutes diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go index fa4c46cf3..bab6f6048 100644 --- a/tailcfg/tailcfg.go +++ b/tailcfg/tailcfg.go @@ -660,6 +660,10 @@ type Debug struct { // TrimWGConfig controls whether Tailscale does lazy, on-demand // wireguard configuration of peers. TrimWGConfig opt.Bool `json:",omitempty"` + + // DisableSubnetsIfPAC controls whether subnet routers should be + // disabled if WPAD is present on the network. + DisableSubnetsIfPAC opt.Bool `json:",omitempty"` } func (k MachineKey) String() string { return fmt.Sprintf("mkey:%x", k[:]) }