Browse Source

fix: improve iSH compatibility and DNS reliability

Configure global DNS resolver to use Yandex DNS by default.
Apply wrapISHListener to the manual captcha server to fix the missing syscall in iSH.
pull/162/head
Moroka8 2 months ago
parent
commit
7b430ca71c
  1. 24
      client/main.go
  2. 10
      client/manual_captcha.go

24
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()

10
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()

Loading…
Cancel
Save