{"record":{"id":"e755203a040f00b0","repo":"coredns/coredns","slug":"transport-s-not-supported-to-proxy","errorCode":null,"errorMessage":"transport %s not supported to proxy","messagePattern":"transport (.+?) not supported to proxy","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/pkg/proxy/connect.go","lineNumber":290,"sourceCode":"// (localAddr) and the transport proto (\"udp\" or \"tcp\") actually used to reach\n// the upstream.\nfunc (p *Proxy) Connect(ctx context.Context, state request.Request, opts Options) (*dns.Msg, net.Addr, string, error) {\n\tstart := time.Now()\n\toriginId := state.Req.Id\n\n\tvar (\n\t\tret       *dns.Msg\n\t\tlocalAddr net.Addr\n\t\tproto     string\n\t\terr       error\n\t)\n\tswitch p.protocol {\n\tcase transport.HTTPS:\n\t\tret, localAddr, proto, err = p.lookupDoH(ctx, state, opts)\n\tcase transport.DNS, transport.TLS:\n\t\tret, localAddr, proto, err = p.lookupDNS(ctx, state, opts)\n\tdefault:\n\t\treturn nil, nil, \"\", fmt.Errorf(\"transport %s not supported to proxy\", p.protocol)\n\t}\n\tif err != nil {\n\t\treturn nil, localAddr, proto, err\n\t}\n\n\t// recovery the origin Id after upstream.\n\tret.Id = originId\n\n\trc, ok := dns.RcodeToString[ret.Rcode]\n\tif !ok {\n\t\trc = strconv.Itoa(ret.Rcode)\n\t}\n\n\trequestDuration.WithLabelValues(p.proxyName, p.addr, rc).Observe(time.Since(start).Seconds())\n\n\treturn ret, localAddr, proto, nil\n}\n","sourceCodeStart":272,"sourceCodeEnd":308,"githubUrl":"https://github.com/coredns/coredns/blob/558c9757a92b361e550bdba82d0b4ddf3d12d595/plugin/pkg/proxy/connect.go#L272-L308","documentation":"Connect in plugin/pkg/proxy/connect.go dispatches to lookupDoH for the HTTPS transport and lookupDNS for DNS/TLS; any other transport (e.g. a newly added or unrecognized p.protocol value) has no proxy implementation and hits the default branch, producing this error. It is an unsupported-operation guard, not a runtime failure of an existing transport.","triggerScenarios":"Connect is called (from the proxy/fallback plugin's ServeDNS or tests) with p.protocol set to something other than transport.DNS, transport.TLS, or transport.HTTPS — typically transport.QUIC or an unset/zero-value protocol.","commonSituations":"Configuring a forward/upstream with a transport type the proxy path doesn't support (e.g. quic:// upstream with proxy policy); code that forgot to set protocol leaving the zero value; CoreDNS versions where QUIC support is absent from the proxy connector.","solutions":["Change the upstream to a supported scheme: dns://, tls://, or https://.","Remove the proxy policy for that upstream or use a transport the proxy supports.","Upgrade CoreDNS if you need newer transports via proxy; check release notes for QUIC support.","Ensure your code that constructs the proxy sets p.protocol explicitly instead of relying on the zero value."],"exampleFix":"// before\nforward . quic://dns.example.com\n// after\nforward . https://dns.example.com/dns-query","handlingStrategy":"validation","validationCode":"func supportsProxyTransport(p *proxy.Proxy) bool {\n  switch p.Protocol() {\n  case transport.DNS, transport.TLS, transport.HTTPS:\n    return true\n  }\n  return false\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use dns://, tls://, or https:// upstreams when proxy policies are attached.","Explicitly set the transport scheme on upstreams; avoid zero-value protocols.","Check CoreDNS version support for quic:// with proxy before using it."],"tags":["dns","proxy","unsupported-transport"],"backgroundTag":"unsupported-operation","analyzedSha":"558c9757a92b361e550bdba82d0b4ddf3d12d595","analyzedAt":"2026-09-06T22:47:02.106Z","contentChangedAt":"2026-09-06T22:47:02.106Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}