summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrew Lytvynov <awly@tailscale.com>2025-01-09 15:36:35 -0800
committerAndrew Lytvynov <awly@tailscale.com>2025-01-09 15:36:35 -0800
commit51774b3382bb248fd9562b40616aca3ce031eb99 (patch)
treea16b2401b49f8c6c80a17115072f3ef7fda08959
parent6ddeae755695de850c56c788cba10bd4736934bb (diff)
downloadtailscale-awly/appconnector-debug-logs.tar.xz
tailscale-awly/appconnector-debug-logs.zip
WIP: debug logs for app connector debuggingawly/appconnector-debug-logs
-rw-r--r--control/controlclient/auto.go6
-rw-r--r--net/dns/resolver/forwarder.go39
-rw-r--r--net/dns/resolver/tsdns.go1
3 files changed, 39 insertions, 7 deletions
diff --git a/control/controlclient/auto.go b/control/controlclient/auto.go
index edd0ae29c..5a798a384 100644
--- a/control/controlclient/auto.go
+++ b/control/controlclient/auto.go
@@ -7,6 +7,7 @@ import (
"context"
"errors"
"fmt"
+ "log"
"net/http"
"sync"
"sync/atomic"
@@ -423,6 +424,11 @@ type mapRoutineState struct {
var _ NetmapDeltaUpdater = mapRoutineState{}
func (mrs mapRoutineState) UpdateFullNetmap(nm *netmap.NetworkMap) {
+ for _, p := range nm.Peers {
+ if routes := p.PrimaryRoutes(); routes.Len() > 0 {
+ log.Printf("DEBUG: node %q routes %q", p.Name(), routes.AsSlice())
+ }
+ }
c := mrs.c
c.mu.Lock()
diff --git a/net/dns/resolver/forwarder.go b/net/dns/resolver/forwarder.go
index c00dea1ae..2a8206bd7 100644
--- a/net/dns/resolver/forwarder.go
+++ b/net/dns/resolver/forwarder.go
@@ -6,9 +6,7 @@ package resolver
import (
"bytes"
"context"
- "crypto/sha256"
"crypto/tls"
- "encoding/base64"
"encoding/binary"
"errors"
"fmt"
@@ -23,6 +21,7 @@ import (
"sync/atomic"
"time"
+ "golang.org/x/net/dns/dnsmessage"
dns "golang.org/x/net/dns/dnsmessage"
"tailscale.com/control/controlknobs"
"tailscale.com/envknob"
@@ -938,6 +937,11 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
if len(resolvers) == 0 {
resolvers = f.resolvers(domain)
+ names := make([]string, len(resolvers))
+ for _, r := range resolvers {
+ names = append(names, r.name.Addr)
+ }
+ f.logf("DEBUG: resolvers for %q: %q", domain, names)
if len(resolvers) == 0 {
metricDNSFwdErrorNoUpstream.Add(1)
f.health.SetUnhealthy(dnsForwarderFailing, health.Args{health.ArgDNSServers: ""})
@@ -974,9 +978,9 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
defer fq.closeOnCtxDone.Close()
if verboseDNSForward() {
- domainSha256 := sha256.Sum256([]byte(domain))
- domainSig := base64.RawStdEncoding.EncodeToString(domainSha256[:3])
- f.logf("request(%d, %v, %d, %s) %d...", fq.txid, typ, len(domain), domainSig, len(fq.packet))
+ //domainSha256 := sha256.Sum256([]byte(domain))
+ //domainSig := base64.RawStdEncoding.EncodeToString(domainSha256[:3])
+ f.logf("request(%d, %v, %q, %s) %d...", fq.txid, typ, len(domain), domain, len(fq.packet))
}
resc := make(chan []byte, 1) // it's fine buffered or not
@@ -1018,8 +1022,29 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
metricDNSFwdErrorContext.Add(1)
return fmt.Errorf("waiting to send response: %w", ctx.Err())
case responseChan <- packet{v, query.family, query.addr}:
- if verboseDNSForward() {
- f.logf("response(%d, %v, %d) = %d, nil", fq.txid, typ, len(domain), len(v))
+ answers, err := func() ([]string, error) {
+ p := new(dnsmessage.Parser)
+ _, err := p.Start(v)
+ if err != nil {
+ return nil, err
+ }
+ if err := p.SkipAllQuestions(); err != nil {
+ return nil, err
+ }
+ ans, err := p.AllAnswers()
+ if err != nil {
+ return nil, err
+ }
+ var res []string
+ for _, a := range ans {
+ res = append(res, a.Body.GoString())
+ }
+ return res, nil
+ }()
+ if err != nil {
+ f.logf("failed to parse DNS response: %v", err)
+ } else {
+ f.logf("response(%d, %v, %q) = %q, nil", fq.txid, typ, domain, answers)
}
metricDNSFwdSuccess.Add(1)
f.health.SetHealthy(dnsForwarderFailing)
diff --git a/net/dns/resolver/tsdns.go b/net/dns/resolver/tsdns.go
index 43ba0acf1..ecadeb1fc 100644
--- a/net/dns/resolver/tsdns.go
+++ b/net/dns/resolver/tsdns.go
@@ -1297,6 +1297,7 @@ func (r *Resolver) respond(query []byte) ([]byte, error) {
if rcode == dns.RCodeRefused {
return nil, errNotOurName // sentinel error return value: it requests forwarding
}
+ r.logf("DEBUG: resolveLocal(%q) ip: %q code: %q", name, ip, rcode)
resp := parser.response()
resp.Header.RCode = rcode