diff --git a/core/forwarder.go b/core/forwarder.go index fde3085..3dfc4ad 100644 --- a/core/forwarder.go +++ b/core/forwarder.go @@ -88,11 +88,7 @@ func runForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, tag } func runTCPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) { - ip4, ip6 := srv.TailscaleIPs() - ip := ip4 - if !ip.IsValid() { - ip = ip6 - } + ip := getSelfTsnetAddr(srv) ln, err := srv.Listen("tcp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort)) if err != nil { logger.Error("failed to listen", "error", err) @@ -178,11 +174,7 @@ func getConnType(ctx context.Context, srv *tsnet.Server, remoteAddrStr string) s } func runUDPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) { - ip4, ip6 := srv.TailscaleIPs() - ip := ip4 - if !ip.IsValid() { - ip = ip6 - } + ip := getSelfTsnetAddr(srv) ln, err := srv.Listen("udp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort)) if err != nil { logger.Error("failed to listen", "error", err) diff --git a/core/utils.go b/core/utils.go index 682e6a7..e6eabf7 100644 --- a/core/utils.go +++ b/core/utils.go @@ -109,6 +109,14 @@ func getPeerFromRules(ctx context.Context, srv *tsnet.Server, rules map[string][ func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers []netip.Addr, logger *slog.Logger) { for _, peer := range relativePeers { + loLog := logger.With("peer", peer) + peerInfo, err := lc.WhoIs(ctx, peer.String()) + if err != nil { + loLog.Warn("failed to get peer info", "err", err) + } else { + loLog = loLog.With("name", peerInfo.Node.ComputedName) + } + ping, err := func() (*ipnstate.PingResult, error) { cnclCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() @@ -117,22 +125,13 @@ func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers return ping, err }() - loLog := logger.With("peer", peer) - peerInfo, err := lc.WhoIs(ctx, peer.String()) - if err != nil { - loLog.Warn("failed to get peer info", "err", err) - continue - } else { - loLog = loLog.With("name", peerInfo.Node.ComputedName) - } - if err != nil { if errors.Is(err, context.DeadlineExceeded) { loLog.Warn("connectivity: peer ping timeout") } else { loLog.Warn("connectivity: failed to ping peer", "err", err) } - return + continue } var connect string @@ -180,3 +179,12 @@ func StartPeerConnectivityDiagnostics(ctx context.Context, logger *slog.Logger, } }() } + +func getSelfTsnetAddr(srv *tsnet.Server) netip.Addr { + ip4, ip6 := srv.TailscaleIPs() + ip := ip4 + if !ip.IsValid() { + ip = ip6 + } + return ip +}