{"record":{"id":"ffab852c173ef8f6","repo":"juanfont/headscale","slug":"unsupported-client-version-s-d","errorCode":null,"errorMessage":"unsupported client version: %s (%d)","messagePattern":"unsupported client version: (.+?) \\((.+?)\\)","errorType":"http","errorClass":"ErrUnsupportedClientVersion","httpStatus":400,"severity":"error","filePath":"hscontrol/noise.go","lineNumber":286,"sourceCode":"\nfunc rejectUnsupported(\n\twriter http.ResponseWriter,\n\tversion tailcfg.CapabilityVersion,\n\tmkey key.MachinePublic,\n\tnkey key.NodePublic,\n) bool {\n\t// Reject unsupported versions\n\tif !isSupportedVersion(version) {\n\t\tlog.Error().\n\t\t\tCaller().\n\t\t\tInt(\"minimum_cap_ver\", int(capver.MinSupportedCapabilityVersion)).\n\t\t\tInt(\"client_cap_ver\", int(version)).\n\t\t\tStr(\"minimum_version\", capver.TailscaleVersion(capver.MinSupportedCapabilityVersion)).\n\t\t\tStr(\"client_version\", capver.TailscaleVersion(version)).\n\t\t\tStr(\"node.key\", nkey.ShortString()).\n\t\t\tStr(\"machine.key\", mkey.ShortString()).\n\t\t\tMsg(\"unsupported client connected\")\n\t\thttp.Error(writer, unsupportedClientError(version).Error(), http.StatusBadRequest)\n\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// overrideRemoteAddr returns middleware that pins r.RemoteAddr to addr.\n// Used inside the Noise tunnel: the HTTP/2 server derives r.RemoteAddr\n// from the hijacked TCP socket (the reverse proxy's loopback peer), so\n// the outer request's resolved client IP must be carried across the\n// hijack boundary by hand.\nfunc overrideRemoteAddr(addr string) func(http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr.RemoteAddr = addr\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})","sourceCodeStart":268,"sourceCodeEnd":304,"githubUrl":"https://github.com/juanfont/headscale/blob/565fd254d06c4c7f9a8cad1714a43445c79ba420/hscontrol/noise.go#L268-L304","documentation":"Error \"unsupported client version: %s (%d)\" thrown in juanfont/headscale.","triggerScenarios":"Thrown at hscontrol/noise.go:286 when the library encounters an invalid state.","commonSituations":"The Tailscale client's capability version is unsupported by this headscale build. Upgrade the client or check capver compatibility.","solutions":["Inspect the wrapped error for the underlying cause and correct the failing condition (unsupported client version); retry the operation after fixing the input, configuration, or environment."],"exampleFix":"Inspect the wrapped error for the underlying cause and correct the failing condition (unsupported client version); retry the operation after fixing the input, configuration, or environment.","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"565fd254d06c4c7f9a8cad1714a43445c79ba420","analyzedAt":"2026-08-15T13:12:30.133Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}