From d76388444231fd487384681d56e25bc0ecadcb51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 3 Aug 2026 13:09:04 +0800 Subject: [PATCH] Fix tailscale panic with IP control URL --- protocol/tailscale/endpoint.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/protocol/tailscale/endpoint.go b/protocol/tailscale/endpoint.go index 34f6a277..2dafe2ba 100644 --- a/protocol/tailscale/endpoint.go +++ b/protocol/tailscale/endpoint.go @@ -9,7 +9,6 @@ import ( "net" "net/http" "net/netip" - "net/url" "os" "path/filepath" "reflect" @@ -189,27 +188,17 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL } else { udpTimeout = C.UDPTimeout } - var remoteIsDomain bool - if options.ControlURL != "" { - controlURL, err := url.Parse(options.ControlURL) - if err != nil { - return nil, E.Cause(err, "parse control URL") - } - remoteIsDomain = M.ParseSocksaddr(controlURL.Hostname()).IsDomain() - } else { - // controlplane.tailscale.com - remoteIsDomain = true - } outboundDialer, err := dialer.NewWithOptions(dialer.Options{ Context: ctx, Options: options.DialerOptions, - RemoteIsDomain: remoteIsDomain, + RemoteIsDomain: true, ResolverOnDetour: true, NewDialer: true, }) if err != nil { return nil, err } + dialerQueryOptions := outboundDialer.(dialer.ResolveDialer).QueryOptions() dnsRouter := service.FromContext[adapter.DNSRouter](ctx) server := &tsnet.Server{ Dir: stateDirectory, @@ -226,7 +215,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL AdvertiseTags: options.AdvertiseTags, Dialer: &endpointDialer{Dialer: outboundDialer, logger: logger}, LookupHook: func(ctx context.Context, host string) ([]netip.Addr, error) { - return dnsRouter.Lookup(ctx, host, outboundDialer.(dialer.ResolveDialer).QueryOptions()) + return dnsRouter.Lookup(ctx, host, dialerQueryOptions) }, DNS: &dnsConfigurtor{}, HTTPClient: &http.Client{ @@ -247,7 +236,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL ctx: ctx, router: router, logger: logger, - queryOptions: outboundDialer.(dialer.ResolveDialer).QueryOptions(), + queryOptions: dialerQueryOptions, dnsRouter: dnsRouter, network: service.FromContext[adapter.NetworkManager](ctx), platformInterface: service.FromContext[adapter.PlatformInterface](ctx),