From 51d3220153e25f8144ca7186a0a5d851ffedd32b Mon Sep 17 00:00:00 2001 From: Marwan Sulaiman Date: Wed, 6 Sep 2023 20:52:14 -0400 Subject: [PATCH] ipn, ipn/ipnlocal: remove log streaming for StreamServe This PR removes the per request logging to the CLI as the CLI will not be displaying those logs initially. Updates #8489 Signed-off-by: Marwan Sulaiman --- cmd/tailscaled/depaware.txt | 2 +- ipn/ipnlocal/local.go | 3 -- ipn/ipnlocal/serve.go | 68 +++---------------------------------- ipn/serve.go | 20 ----------- 4 files changed, 5 insertions(+), 88 deletions(-) diff --git a/cmd/tailscaled/depaware.txt b/cmd/tailscaled/depaware.txt index 4e49741a5..6552b7aab 100644 --- a/cmd/tailscaled/depaware.txt +++ b/cmd/tailscaled/depaware.txt @@ -95,7 +95,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de L github.com/google/nftables/expr from github.com/google/nftables+ L github.com/google/nftables/internal/parseexprfunc from github.com/google/nftables+ L github.com/google/nftables/xt from github.com/google/nftables/expr+ - github.com/google/uuid from tailscale.com/ipn/ipnlocal+ + github.com/google/uuid from tailscale.com/clientupdate github.com/hdevalence/ed25519consensus from tailscale.com/tka+ L 💣 github.com/illarion/gonotify from tailscale.com/net/dns L github.com/insomniacslk/dhcp/dhcpv4 from tailscale.com/net/tstun diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 56a73ef29..85eb7bf56 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -246,9 +246,6 @@ type LocalBackend struct { serveListeners map[netip.AddrPort]*serveListener // addrPort => serveListener serveProxyHandlers sync.Map // string (HTTPHandler.Proxy) => *httputil.ReverseProxy - // serveStreamers is a map for those running Funnel in the foreground - // and streaming incoming requests. - serveStreamers map[uint16]map[uint32]func(ipn.FunnelRequestLog) // serve port => map of stream loggers (key is UUID) // statusLock must be held before calling statusChanged.Wait() or // statusChanged.Broadcast(). diff --git a/ipn/ipnlocal/serve.go b/ipn/ipnlocal/serve.go index 4fd04e03d..13af214d0 100644 --- a/ipn/ipnlocal/serve.go +++ b/ipn/ipnlocal/serve.go @@ -23,7 +23,6 @@ import ( "sync" "time" - "github.com/google/uuid" "tailscale.com/ipn" "tailscale.com/logtail/backoff" "tailscale.com/net/netutil" @@ -282,6 +281,9 @@ func (b *LocalBackend) DeleteForegroundSession(sessionID string) error { // the backend enables it for the duration of the context's lifespan and // then turns it back off once the context is closed. If either are already enabled, // then they remain that way but logs are still streamed +// +// TODO(marwan-at-work): this whole endpoint will be +// deleted in a follow up PR in favor of WatchIPNBus func (b *LocalBackend) StreamServe(ctx context.Context, w io.Writer, req ipn.ServeStreamRequest) (err error) { f, ok := w.(http.Flusher) if !ok { @@ -310,44 +312,13 @@ func (b *LocalBackend) StreamServe(ctx context.Context, w io.Writer, req ipn.Ser err = errors.Join(err, b.SetServeConfig(sc)) }() - var writeErrs []error - writeToStream := func(log ipn.FunnelRequestLog) { - jsonLog, err := json.Marshal(log) - if err != nil { - writeErrs = append(writeErrs, err) - return - } - if _, err := fmt.Fprintf(w, "%s\n", jsonLog); err != nil { - writeErrs = append(writeErrs, err) - return - } - f.Flush() - } - - // Hook up connections stream. - b.mu.Lock() - mak.NonNilMapForJSON(&b.serveStreamers) - if b.serveStreamers[port] == nil { - b.serveStreamers[port] = make(map[uint32]func(ipn.FunnelRequestLog)) - } - id := uuid.New().ID() - b.serveStreamers[port][id] = writeToStream - b.mu.Unlock() - - // Clean up streamer when done. - defer func() { - b.mu.Lock() - delete(b.serveStreamers[port], id) - b.mu.Unlock() - }() - select { case <-ctx.Done(): // Triggered by foreground `tailscale funnel` process // (the streamer) getting closed, or by turning off Tailscale. } - return errors.Join(writeErrs...) + return nil } func setHandler(sc *ipn.ServeConfig, req ipn.ServeStreamRequest) { @@ -408,33 +379,6 @@ func deleteHandler(sc *ipn.ServeConfig, req ipn.ServeStreamRequest, port uint16) } } -func (b *LocalBackend) maybeLogServeConnection(destPort uint16, srcAddr netip.AddrPort) { - b.mu.Lock() - streamers := b.serveStreamers[destPort] - b.mu.Unlock() - if len(streamers) == 0 { - return - } - - var log ipn.FunnelRequestLog - log.SrcAddr = srcAddr - log.Time = b.clock.Now() - - if node, user, ok := b.WhoIs(srcAddr); ok { - log.NodeName = node.ComputedName() - if node.IsTagged() { - log.NodeTags = node.Tags().AsSlice() - } else { - log.UserLoginName = user.LoginName - log.UserDisplayName = user.DisplayName - } - } - - for _, stream := range streamers { - stream(log) - } -} - func (b *LocalBackend) HandleIngressTCPConn(ingressPeer tailcfg.NodeView, target ipn.HostPort, srcAddr netip.AddrPort, getConnOrReset func() (net.Conn, bool), sendRST func()) { b.mu.Lock() sc := b.serveConfig @@ -537,7 +481,6 @@ func (b *LocalBackend) tcpHandlerForServe(dport uint16, srcAddr netip.AddrPort) if backDst := tcph.TCPForward(); backDst != "" { return func(conn net.Conn) error { defer conn.Close() - b.maybeLogServeConnection(dport, srcAddr) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) backConn, err := b.dialer.SystemDial(ctx, "tcp", backDst) cancel() @@ -706,9 +649,6 @@ func (b *LocalBackend) serveWebHandler(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } - if c, ok := getServeHTTPContext(r); ok { - b.maybeLogServeConnection(c.DestPort, c.SrcAddr) - } if s := h.Text(); s != "" { w.Header().Set("Content-Type", "text/plain; charset=utf-8") io.WriteString(w, s) diff --git a/ipn/serve.go b/ipn/serve.go index e6a79b5b6..ad77dedf4 100644 --- a/ipn/serve.go +++ b/ipn/serve.go @@ -12,7 +12,6 @@ import ( "slices" "strconv" "strings" - "time" "tailscale.com/tailcfg" ) @@ -107,25 +106,6 @@ type ServeStreamRequest struct { Funnel bool `json:",omitempty"` } -// FunnelRequestLog is the JSON type written out to io.Writers -// watching funnel connections via ipnlocal.StreamServe. -// -// This structure is in development and subject to change. -type FunnelRequestLog struct { - Time time.Time `json:",omitempty"` // time of request forwarding - - // SrcAddr is the address that initiated the Funnel request. - SrcAddr netip.AddrPort `json:",omitempty"` - - // The following fields are only populated if the connection - // initiated from another node on the client's tailnet. - - NodeName string `json:",omitempty"` // src node MagicDNS name - NodeTags []string `json:",omitempty"` // src node tags - UserLoginName string `json:",omitempty"` // src node's owner login (if not tagged) - UserDisplayName string `json:",omitempty"` // src node's owner name (if not tagged) -} - // WebServerConfig describes a web server's configuration. type WebServerConfig struct { Handlers map[string]*HTTPHandler // mountPoint => handler