From eb5939289c2949bca1ed195f91c424dc650dc4a5 Mon Sep 17 00:00:00 2001 From: Andrew Dunham Date: Mon, 12 Sep 2022 13:43:50 -0400 Subject: [PATCH] cmd/derper: add /generate_204 endpoint (#5601) For captive portal detection. Signed-off-by: Andrew Dunham --- cmd/derper/derper.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cmd/derper/derper.go b/cmd/derper/derper.go index 653c6d9be..f98b45375 100644 --- a/cmd/derper/derper.go +++ b/cmd/derper/derper.go @@ -206,6 +206,7 @@ func main() { mux.Handle("/robots.txt", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "User-agent: *\nDisallow: /\n") })) + mux.Handle("/generate_204", http.HandlerFunc(serveNoContent)) debug := tsweb.Debugger(mux) debug.KV("TLS hostname", *hostname) debug.KV("Mesh key", s.HasMeshKey()) @@ -293,9 +294,12 @@ func main() { }) if *httpPort > -1 { go func() { + port80mux := http.NewServeMux() + port80mux.HandleFunc("/generate_204", serveNoContent) + port80mux.Handle("/", certManager.HTTPHandler(tsweb.Port80Handler{Main: mux})) port80srv := &http.Server{ Addr: net.JoinHostPort(listenHost, fmt.Sprintf("%d", *httpPort)), - Handler: certManager.HTTPHandler(tsweb.Port80Handler{Main: mux}), + Handler: port80mux, ErrorLog: quietLogger, ReadTimeout: 30 * time.Second, // Crank up WriteTimeout a bit more than usually @@ -322,6 +326,11 @@ func main() { } } +// For captive portal detection +func serveNoContent(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNoContent) +} + // probeHandler is the endpoint that js/wasm clients hit to measure // DERP latency, since they can't do UDP STUN queries. func probeHandler(w http.ResponseWriter, r *http.Request) {