{"id":13582261,"url":"https://github.com/folbricht/routedns","last_synced_at":"2026-04-26T18:00:53.159Z","repository":{"id":38429750,"uuid":"190673829","full_name":"folbricht/routedns","owner":"folbricht","description":"DNS stub resolver, proxy and router with support for DoT, DoH, DoQ, and DTLS","archived":false,"fork":false,"pushed_at":"2026-03-31T01:05:17.000Z","size":40951,"stargazers_count":604,"open_issues_count":54,"forks_count":77,"subscribers_count":12,"default_branch":"master","last_synced_at":"2026-04-02T07:37:57.052Z","etag":null,"topics":["dns","dns-client","dns-over-dtls","dns-over-https","dns-over-quic","dns-over-tls","dns-privacy","dns-server","doh","doq","dot","go","golang","pipelining"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/folbricht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-07T01:43:23.000Z","updated_at":"2026-04-02T03:38:18.000Z","dependencies_parsed_at":"2024-01-14T09:57:51.133Z","dependency_job_id":"af029531-3049-419a-a33f-9ac903dc6b21","html_url":"https://github.com/folbricht/routedns","commit_stats":null,"previous_names":[],"tags_count":88,"template":false,"template_full_name":null,"purl":"pkg:github/folbricht/routedns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folbricht%2Froutedns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folbricht%2Froutedns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folbricht%2Froutedns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folbricht%2Froutedns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/folbricht","download_url":"https://codeload.github.com/folbricht/routedns/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folbricht%2Froutedns/sbom","scorecard":{"id":406030,"data":{"date":"2025-08-11","repo":{"name":"github.com/folbricht/routedns","commit":"7c6b811c3349809be8fa71d24b0dc1d1e9ca8c8b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"Maintained","score":10,"reason":"6 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:29","Warn: no topLevel permission defined: .github/workflows/build.yaml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/version_bump.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/build.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/build.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/version_bump.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/folbricht/routedns/version_bump.yaml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3540"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (15) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T21:17:13.235Z","repository_id":38429750,"created_at":"2025-08-18T21:17:13.236Z","updated_at":"2025-08-18T21:17:13.236Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32307015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T17:23:19.671Z","status":"ssl_error","status_checked_at":"2026-04-26T17:23:19.195Z","response_time":129,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","dns-client","dns-over-dtls","dns-over-https","dns-over-quic","dns-over-tls","dns-privacy","dns-server","doh","doq","dot","go","golang","pipelining"],"created_at":"2024-08-01T15:02:33.068Z","updated_at":"2026-04-26T18:00:53.119Z","avatar_url":"https://github.com/folbricht.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# RouteDNS\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/folbricht/routedns.svg)](https://pkg.go.dev/github.com/folbricht/routedns) ![build](https://github.com/folbricht/routedns/workflows/build/badge.svg) ![license](https://img.shields.io/badge/License-BSD-green.svg)\n\nRouteDNS is a composable DNS stub resolver, proxy and router written in Go. It enables building flexible DNS processing pipelines with support for all modern DNS protocols, query routing, caching, blocklists, DNSSEC validation, Lua scripting, and 30+ other pipeline components — all configured via TOML.\n\n## Pipeline Architecture\n\n```mermaid\ngraph LR\n    C[Clients] --\u003e L\n    subgraph RouteDNS\n        L[Listeners\u003cbr/\u003eDNS · DoT · DoH\u003cbr/\u003eDoQ · DTLS · ODoH] --\u003e P[Routers / Groups / Modifiers\u003cbr/\u003eRouter · Cache · Blocklist\u003cbr/\u003eRate Limiter · Load Balancer\u003cbr/\u003eDNSSEC Validator · Lua Script\u003cbr/\u003e...30+ types]\n        P --\u003e R[Resolvers\u003cbr/\u003eDNS · DoT · DoH\u003cbr/\u003eDoQ · DTLS · ODoH]\n    end\n    R --\u003e U[Upstream DNS]\n    classDef ext fill:#e2e8f0,stroke:#64748b,color:#1e293b\n    classDef listen fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f\n    classDef proc fill:#fef3c7,stroke:#f59e0b,color:#78350f\n    classDef resolve fill:#d1fae5,stroke:#10b981,color:#064e3b\n    class C,U ext\n    class L listen\n    class P proc\n    class R resolve\n```\n\nListeners receive queries over any supported protocol. Routers, groups and modifiers form the processing pipeline — routing, filtering, caching, and transforming queries and responses. Resolvers forward queries upstream. Every component implements the same `Resolver` interface, so they can be composed freely.\n\n## Features\n\n**Protocols**\n- Plain DNS over UDP and TCP, with connection reuse and pipelining\n- DNS-over-TLS (DoT, [RFC 7858](https://tools.ietf.org/html/rfc7858)) — client and server\n- DNS-over-HTTPS (DoH, [RFC 8484](https://tools.ietf.org/html/rfc8484)) — client and server with HTTP/2\n- DNS-over-QUIC (DoQ, [RFC 9250](https://datatracker.ietf.org/doc/rfc9250/)) — client and server, with 0-RTT support\n- DNS-over-DTLS ([RFC 8094](https://tools.ietf.org/html/rfc8094)) — client and server\n- DNS-over-HTTPS with QUIC transport — client and server\n- Oblivious DoH (ODoH, [RFC 9230](https://datatracker.ietf.org/doc/rfc9230/)) — client, proxy and target\n- Custom CAs and mutual TLS (mTLS)\n- SOCKS5 proxy support\n\n**Query Processing**\n- DNSSEC validation with IANA trust anchor support\n- DNS64 for NAT64 networks ([RFC 6147](https://datatracker.ietf.org/doc/html/rfc6147)) — synthesize AAAA from A records\n- Blocklists — domain, regex, hosts-file, wildcard formats with auto-refresh from HTTP/file sources\n- Response blocklists — filter by response name, IP/CIDR, GeoIP country, or ASN\n- MAC address filtering via EDNS0\n- Lua scripting with sandboxed execution for custom query handling logic\n- Query/response modification and name translation\n- Static responses using Go templates\n- EDNS0 Client Subnet (ECS) manipulation ([RFC 7871](https://tools.ietf.org/html/rfc7871))\n- EDNS0 query and response padding ([RFC 7830](https://tools.ietf.org/html/rfc7830), [RFC 8467](https://tools.ietf.org/html/rfc8467))\n\n**Routing**\n- Route by query name (regex), query type, query class, source IP/CIDR, or EDNS Client Subnet\n- Time-of-day based routing\n- Multiple routes evaluated in order — first match wins\n\n**Resilience \u0026 Performance**\n- Caching with memory or Redis backend, negative-TTL support, and prefetch\n- TTL manipulation (min/max clamping)\n- Multiple load-balancing algorithms: round-robin, fail-rotate, fastest, random\n- Request deduplication\n- Rate limiting per client subnet\n- Truncate-retry (automatic TCP fallback on truncated UDP responses)\n- Bootstrap addresses to avoid initial service name lookups\n\n**Deployment**\n- Linux network namespace support — listen in one netns, resolve in another\n- Firewall mark (fwmark) and interface binding (SO_BINDTODEVICE) for policy routing and VRF\n- Admin listener with expvar metrics (Prometheus-compatible)\n- Query/response logging, syslog integration\n- Platform independent — written in Go\n\n## Installation\n\nRequires [Go](https://golang.org/dl) 1.24+:\n\n```text\ngo install github.com/folbricht/routedns/cmd/routedns@latest\n```\n\nOr build from source:\n\n```text\ngit clone https://github.com/folbricht/routedns.git\ncd routedns/cmd/routedns \u0026\u0026 go install\n```\n\nPre-built binaries for Linux (amd64, arm64, armv7), macOS (amd64, arm64), FreeBSD, and Windows are available on the [GitHub Releases](https://github.com/folbricht/routedns/releases) page.\n\n### Docker\n\nA container is available on [Docker Hub](https://hub.docker.com/r/folbricht/routedns):\n\n```text\ndocker run -d --rm --network host folbricht/routedns\n```\n\nWith a custom config:\n\n```text\ndocker run -d --rm --network host -v /path/to/config.toml:/config.toml folbricht/routedns\n```\n\n## Quick Start\n\nThis minimal config forwards all local DNS queries encrypted via DNS-over-TLS to Cloudflare, with caching. Set your system's nameserver to `127.0.0.1` (e.g. in `/etc/resolv.conf`).\n\n```toml\n[resolvers.cloudflare-dot]\naddress = \"1.1.1.1:853\"\nprotocol = \"dot\"\n\n[groups.cloudflare-cached]\ntype = \"cache\"\nresolvers = [\"cloudflare-dot\"]\nbackend = {type = \"memory\"}\n\n[listeners.local-udp]\naddress = \"127.0.0.1:53\"\nprotocol = \"udp\"\nresolver = \"cloudflare-cached\"\n\n[listeners.local-tcp]\naddress = \"127.0.0.1:53\"\nprotocol = \"tcp\"\nresolver = \"cloudflare-cached\"\n```\n\nSave as `config.toml` and run:\n\n```text\nroutedns config.toml\n```\n\nAn example systemd service file is provided [here](cmd/routedns/routedns.service).\n\n## Use Cases\n\n### Corporate split DNS\n\nRoute internal queries to company DNS servers while sending everything else securely to Cloudflare via DoH. Company servers are grouped with fail-rotate for resilience.\n\n```mermaid\ngraph LR\n    C[Client] --\u003e L[Listener\u003cbr/\u003eUDP/TCP :53]\n    L --\u003e RT[Router]\n    RT --\u003e|*.mycompany.com| CO[Fail-Rotate\u003cbr/\u003eCompany DNS A/B]\n    RT --\u003e|everything else| CF[Cloudflare DoH]\n    classDef ext fill:#e2e8f0,stroke:#64748b,color:#1e293b\n    classDef listen fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f\n    classDef proc fill:#fef3c7,stroke:#f59e0b,color:#78350f\n    classDef resolve fill:#d1fae5,stroke:#10b981,color:#064e3b\n    class C ext\n    class L listen\n    class RT proc\n    class CO,CF resolve\n```\n\nConfiguration: [use-case-2.toml](cmd/routedns/example-config/use-case-2.toml)\n\n### Content filtering for specific devices\n\nSingle out devices by IP address and apply a custom blocklist plus a filtered upstream resolver, while giving all other devices unfiltered access.\n\n```mermaid\ngraph LR\n    C[Client] --\u003e L[Listener\u003cbr/\u003eUDP/TCP :53]\n    L --\u003e RT[Router]\n    RT --\u003e|source 192.168.1.123| BL[Blocklist] --\u003e CB[CleanBrowsing DoT]\n    RT --\u003e|default| CF[Cloudflare DoT]\n    classDef ext fill:#e2e8f0,stroke:#64748b,color:#1e293b\n    classDef listen fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f\n    classDef proc fill:#fef3c7,stroke:#f59e0b,color:#78350f\n    classDef resolve fill:#d1fae5,stroke:#10b981,color:#064e3b\n    class C ext\n    class L listen\n    class RT,BL proc\n    class CB,CF resolve\n```\n\nConfiguration: [family-browsing.toml](cmd/routedns/example-config/family-browsing.toml)\n\n### Home network ad \u0026 malware blocking\n\nProtect the whole network with multi-layer blocklists (query names, response names, response IPs), caching, and TTL clamping. Blocklists auto-refresh daily from remote HTTP sources.\n\n```mermaid\ngraph LR\n    C[Clients] --\u003e L[Listener\u003cbr/\u003eUDP/TCP :53]\n    L --\u003e CA[Cache]\n    CA --\u003e TTL[TTL Modifier]\n    TTL --\u003e BQ[Query Blocklist]\n    BQ --\u003e BR[Response Name\u003cbr/\u003eBlocklist]\n    BR --\u003e BI[Response IP\u003cbr/\u003eBlocklist]\n    BI --\u003e CF[Cloudflare DoT\u003cbr/\u003eFail-Rotate]\n    classDef ext fill:#e2e8f0,stroke:#64748b,color:#1e293b\n    classDef listen fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f\n    classDef proc fill:#fef3c7,stroke:#f59e0b,color:#78350f\n    classDef resolve fill:#d1fae5,stroke:#10b981,color:#064e3b\n    class C ext\n    class L listen\n    class CA,TTL,BQ,BR,BI proc\n    class CF resolve\n```\n\nConfiguration: [use-case-6.toml](cmd/routedns/example-config/use-case-6.toml)\n\n### DNSSEC validation\n\nValidate DNSSEC signatures on all responses using built-in root trust anchors. Queries with invalid signatures are rejected.\n\n```mermaid\ngraph LR\n    C[Client] --\u003e L[Listener\u003cbr/\u003eUDP/TCP :53]\n    L --\u003e DV[DNSSEC Validator\u003cbr/\u003eIANA Trust Anchor]\n    DV --\u003e CF[Cloudflare DoT]\n    classDef ext fill:#e2e8f0,stroke:#64748b,color:#1e293b\n    classDef listen fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f\n    classDef proc fill:#fef3c7,stroke:#f59e0b,color:#78350f\n    classDef resolve fill:#d1fae5,stroke:#10b981,color:#064e3b\n    class C ext\n    class L listen\n    class DV proc\n    class CF resolve\n```\n\n```toml\n[resolvers.cloudflare-dot]\naddress = \"1.1.1.1:853\"\nprotocol = \"dot\"\n\n[groups.dnssec-validated]\ntype = \"dnssec-validator\"\nresolvers = [\"cloudflare-dot\"]\n\n[listeners.local-udp]\naddress = \"127.0.0.1:53\"\nprotocol = \"udp\"\nresolver = \"dnssec-validated\"\n\n[listeners.local-tcp]\naddress = \"127.0.0.1:53\"\nprotocol = \"tcp\"\nresolver = \"dnssec-validated\"\n```\n\n## Documentation\n\n- [Configuration Guide](doc/configuration.md) — full reference for all component types and options\n- [Example Configs](cmd/routedns/example-config/) — ready-to-use configuration files\n\n## Links\n\n- [RFC 7858](https://tools.ietf.org/html/rfc7858) — DNS-over-TLS\n- [RFC 8484](https://tools.ietf.org/html/rfc8484) — DNS-over-HTTPS\n- [RFC 9250](https://datatracker.ietf.org/doc/rfc9250/) — DNS-over-QUIC\n- [RFC 9230](https://datatracker.ietf.org/doc/rfc9230/) — Oblivious DoH\n- [RFC 8094](https://tools.ietf.org/html/rfc8094) — DNS-over-DTLS\n- [miekg/dns](https://github.com/miekg/dns) — Go DNS library\n- [quic-go](https://github.com/quic-go/quic-go) — Go QUIC implementation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolbricht%2Froutedns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffolbricht%2Froutedns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolbricht%2Froutedns/lists"}