mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-08-07 22:35:16 +03:00
Fix tailscale panic with IP control URL
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"net/url"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
@@ -189,27 +188,17 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
|
|||||||
} else {
|
} else {
|
||||||
udpTimeout = C.UDPTimeout
|
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{
|
outboundDialer, err := dialer.NewWithOptions(dialer.Options{
|
||||||
Context: ctx,
|
Context: ctx,
|
||||||
Options: options.DialerOptions,
|
Options: options.DialerOptions,
|
||||||
RemoteIsDomain: remoteIsDomain,
|
RemoteIsDomain: true,
|
||||||
ResolverOnDetour: true,
|
ResolverOnDetour: true,
|
||||||
NewDialer: true,
|
NewDialer: true,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
dialerQueryOptions := outboundDialer.(dialer.ResolveDialer).QueryOptions()
|
||||||
dnsRouter := service.FromContext[adapter.DNSRouter](ctx)
|
dnsRouter := service.FromContext[adapter.DNSRouter](ctx)
|
||||||
server := &tsnet.Server{
|
server := &tsnet.Server{
|
||||||
Dir: stateDirectory,
|
Dir: stateDirectory,
|
||||||
@@ -226,7 +215,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
|
|||||||
AdvertiseTags: options.AdvertiseTags,
|
AdvertiseTags: options.AdvertiseTags,
|
||||||
Dialer: &endpointDialer{Dialer: outboundDialer, logger: logger},
|
Dialer: &endpointDialer{Dialer: outboundDialer, logger: logger},
|
||||||
LookupHook: func(ctx context.Context, host string) ([]netip.Addr, error) {
|
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{},
|
DNS: &dnsConfigurtor{},
|
||||||
HTTPClient: &http.Client{
|
HTTPClient: &http.Client{
|
||||||
@@ -247,7 +236,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL
|
|||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
router: router,
|
router: router,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
queryOptions: outboundDialer.(dialer.ResolveDialer).QueryOptions(),
|
queryOptions: dialerQueryOptions,
|
||||||
dnsRouter: dnsRouter,
|
dnsRouter: dnsRouter,
|
||||||
network: service.FromContext[adapter.NetworkManager](ctx),
|
network: service.FromContext[adapter.NetworkManager](ctx),
|
||||||
platformInterface: service.FromContext[adapter.PlatformInterface](ctx),
|
platformInterface: service.FromContext[adapter.PlatformInterface](ctx),
|
||||||
|
|||||||
Reference in New Issue
Block a user