|
|
|
|
@ -31,6 +31,8 @@ import ( |
|
|
|
|
"tailscale.com/atomicfile" |
|
|
|
|
"tailscale.com/logtail" |
|
|
|
|
"tailscale.com/logtail/filch" |
|
|
|
|
"tailscale.com/net/dnscache" |
|
|
|
|
"tailscale.com/net/dnsfallback" |
|
|
|
|
"tailscale.com/net/netknob" |
|
|
|
|
"tailscale.com/net/netns" |
|
|
|
|
"tailscale.com/net/tlsdial" |
|
|
|
|
@ -592,10 +594,22 @@ func newLogtailTransport(host string) *http.Transport { |
|
|
|
|
t0 := time.Now() |
|
|
|
|
c, err := nd.DialContext(ctx, netw, addr) |
|
|
|
|
d := time.Since(t0).Round(time.Millisecond) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Printf("logtail: dial %q failed: %v (in %v)", addr, err, d) |
|
|
|
|
} else { |
|
|
|
|
if err == nil { |
|
|
|
|
log.Printf("logtail: dialed %q in %v", addr, d) |
|
|
|
|
return c, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If we failed to dial, try again with bootstrap DNS.
|
|
|
|
|
log.Printf("logtail: dial %q failed: %v (in %v), trying bootstrap...", addr, err, d) |
|
|
|
|
dnsCache := &dnscache.Resolver{ |
|
|
|
|
Forward: dnscache.Get().Forward, // use default cache's forwarder
|
|
|
|
|
UseLastGood: true, |
|
|
|
|
LookupIPFallback: dnsfallback.Lookup, |
|
|
|
|
} |
|
|
|
|
dialer := dnscache.Dialer(nd.DialContext, dnsCache) |
|
|
|
|
c, err = dialer(ctx, netw, addr) |
|
|
|
|
if err == nil { |
|
|
|
|
log.Printf("logtail: bootstrap dial succeeded") |
|
|
|
|
} |
|
|
|
|
return c, err |
|
|
|
|
} |
|
|
|
|
|