diff --git a/client/main.go b/client/main.go index 55d59e1..e689d89 100644 --- a/client/main.go +++ b/client/main.go @@ -1783,7 +1783,31 @@ func oneTurnConnectionLoop(ctx context.Context, turnParams *turnParams, peer *ne } } +func setupGlobalResolver() { + dialer := &net.Dialer{ + Timeout: 5 * time.Second, + KeepAlive: 30 * time.Second, + } + dnsServers := []string{"77.88.8.8:53", "77.88.8.1:53", "8.8.8.8:53", "8.8.4.4:53", "1.1.1.1:53", "1.0.0.1:53"} + + net.DefaultResolver = &net.Resolver{ + PreferGo: true, + Dial: func(ctx context.Context, network, address string) (net.Conn, error) { + var lastErr error + for _, dns := range dnsServers { + conn, err := dialer.DialContext(ctx, "udp", dns) + if err == nil { + return conn, nil + } + lastErr = err + } + return nil, lastErr + }, + } +} + func main() { + setupGlobalResolver() ctx, cancel := context.WithCancel(context.Background()) globalAppCancel = cancel defer cancel() diff --git a/client/manual_captcha.go b/client/manual_captcha.go index 826478c..4d40e2c 100644 --- a/client/manual_captcha.go +++ b/client/manual_captcha.go @@ -361,11 +361,16 @@ func startCaptchaServer(srv *http.Server, logPrefix string) error { continue } listening = true + wrappedListener, err := wrapISHListener(listener) + if err != nil { + log.Printf("%s: failed to wrap listener for iSH: %v", logPrefix, err) + wrappedListener = listener + } go func(listener net.Listener) { if err := srv.Serve(listener); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Printf("%s: %s", logPrefix, err) } - }(listener) + }(wrappedListener) } if listening { @@ -385,7 +390,8 @@ func runCaptchaServerAndWait(handler http.Handler, captchaURL string, keyCh <-ch fmt.Println("\n==============================================") fmt.Println("ACTION REQUIRED: MANUAL CAPTCHA SOLVING NEEDED") - fmt.Println("Open this URL in your browser: " + localCaptchaOrigin()) + fmt.Println("If your browser didn't open automatically,") + fmt.Println("manually open this URL: " + captchaURL) fmt.Println("==============================================") fmt.Println()