|
|
|
|
@ -69,6 +69,7 @@ type Direct struct { |
|
|
|
|
clock tstime.Clock |
|
|
|
|
logf logger.Logf |
|
|
|
|
netMon *netmon.Monitor // or nil
|
|
|
|
|
health *health.Tracker |
|
|
|
|
discoPubKey key.DiscoPublic |
|
|
|
|
getMachinePrivKey func() (key.MachinePrivate, error) |
|
|
|
|
debugFlags []string |
|
|
|
|
@ -119,10 +120,11 @@ type Options struct { |
|
|
|
|
Hostinfo *tailcfg.Hostinfo // non-nil passes ownership, nil means to use default using os.Hostname, etc
|
|
|
|
|
DiscoPublicKey key.DiscoPublic |
|
|
|
|
Logf logger.Logf |
|
|
|
|
HTTPTestClient *http.Client // optional HTTP client to use (for tests only)
|
|
|
|
|
NoiseTestClient *http.Client // optional HTTP client to use for noise RPCs (tests only)
|
|
|
|
|
DebugFlags []string // debug settings to send to control
|
|
|
|
|
NetMon *netmon.Monitor // optional network monitor
|
|
|
|
|
HTTPTestClient *http.Client // optional HTTP client to use (for tests only)
|
|
|
|
|
NoiseTestClient *http.Client // optional HTTP client to use for noise RPCs (tests only)
|
|
|
|
|
DebugFlags []string // debug settings to send to control
|
|
|
|
|
NetMon *netmon.Monitor // optional network monitor
|
|
|
|
|
HealthTracker *health.Tracker |
|
|
|
|
PopBrowserURL func(url string) // optional func to open browser
|
|
|
|
|
OnClientVersion func(*tailcfg.ClientVersion) // optional func to inform GUI of client version status
|
|
|
|
|
OnControlTime func(time.Time) // optional func to notify callers of new time from control
|
|
|
|
|
@ -248,7 +250,7 @@ func NewDirect(opts Options) (*Direct, error) { |
|
|
|
|
tr := http.DefaultTransport.(*http.Transport).Clone() |
|
|
|
|
tr.Proxy = tshttpproxy.ProxyFromEnvironment |
|
|
|
|
tshttpproxy.SetTransportGetProxyConnectHeader(tr) |
|
|
|
|
tr.TLSClientConfig = tlsdial.Config(serverURL.Hostname(), health.Global, tr.TLSClientConfig) |
|
|
|
|
tr.TLSClientConfig = tlsdial.Config(serverURL.Hostname(), opts.HealthTracker, tr.TLSClientConfig) |
|
|
|
|
tr.DialContext = dnscache.Dialer(opts.Dialer.SystemDial, dnsCache) |
|
|
|
|
tr.DialTLSContext = dnscache.TLSDialer(opts.Dialer.SystemDial, dnsCache, tr.TLSClientConfig) |
|
|
|
|
tr.ForceAttemptHTTP2 = true |
|
|
|
|
@ -271,6 +273,7 @@ func NewDirect(opts Options) (*Direct, error) { |
|
|
|
|
discoPubKey: opts.DiscoPublicKey, |
|
|
|
|
debugFlags: opts.DebugFlags, |
|
|
|
|
netMon: opts.NetMon, |
|
|
|
|
health: opts.HealthTracker, |
|
|
|
|
skipIPForwardingCheck: opts.SkipIPForwardingCheck, |
|
|
|
|
pinger: opts.Pinger, |
|
|
|
|
popBrowser: opts.PopBrowserURL, |
|
|
|
|
@ -894,10 +897,10 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap |
|
|
|
|
ipForwardingBroken(hi.RoutableIPs, c.netMon.InterfaceState()) { |
|
|
|
|
extraDebugFlags = append(extraDebugFlags, "warn-ip-forwarding-off") |
|
|
|
|
} |
|
|
|
|
if health.Global.RouterHealth() != nil { |
|
|
|
|
if c.health.RouterHealth() != nil { |
|
|
|
|
extraDebugFlags = append(extraDebugFlags, "warn-router-unhealthy") |
|
|
|
|
} |
|
|
|
|
extraDebugFlags = health.Global.AppendWarnableDebugFlags(extraDebugFlags) |
|
|
|
|
extraDebugFlags = c.health.AppendWarnableDebugFlags(extraDebugFlags) |
|
|
|
|
if hostinfo.DisabledEtcAptSource() { |
|
|
|
|
extraDebugFlags = append(extraDebugFlags, "warn-etc-apt-source-disabled") |
|
|
|
|
} |
|
|
|
|
@ -970,7 +973,7 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap |
|
|
|
|
} |
|
|
|
|
defer res.Body.Close() |
|
|
|
|
|
|
|
|
|
health.Global.NoteMapRequestHeard(request) |
|
|
|
|
c.health.NoteMapRequestHeard(request) |
|
|
|
|
watchdogTimer.Reset(watchdogTimeout) |
|
|
|
|
|
|
|
|
|
if nu == nil { |
|
|
|
|
@ -1041,7 +1044,7 @@ func (c *Direct) sendMapRequest(ctx context.Context, isStreaming bool, nu Netmap |
|
|
|
|
metricMapResponseMessages.Add(1) |
|
|
|
|
|
|
|
|
|
if isStreaming { |
|
|
|
|
health.Global.GotStreamedMapResponse() |
|
|
|
|
c.health.GotStreamedMapResponse() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if pr := resp.PingRequest; pr != nil && c.isUniquePingRequest(pr) { |
|
|
|
|
|