blocky

0xERR0RApache-2.0活跃维护

用 Go 写的轻量级 DNS 代理,在局域网层面拦截广告和恶意域名,支持 DoH、家长控制等规则,可自建替代 Pi-hole。

Fast and lightweight DNS proxy as ad-blocker for local network with many features

v0.35.0发布于 2026-09-05 16:55 UTC7,100star +5 / 7 天320fork同步于 2026-11-10 17:34 UTC

怎么上手

由 README 提炼,执行前请确认
docker pull spx01/blocky
硬件要求按 README 说明

README 未说明显存等硬件要求;支持 x86-64、ARM、MIPS 架构,可在树莓派和 OpenWrt 路由器上运行。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Go 写的轻量 DNS 代理兼广告拦截器,给局域网做去广告和自定义解析

用 Go 写的轻量级 DNS 代理,在局域网层面拦截广告和恶意域名,支持 DoH、家长控制等规则,可自建替代 Pi-hole。

核心能力

  • 按客户端组配置允许/拒绝列表并定期重载
  • 深度检查响应 CNAME 与响应 IP 进行拦截
  • 支持 DoH、DoT、DoQ、DoH3 等现代 DNS 协议
  • 缓存与预取常用查询,可并行使用多个上游解析器
  • 输出 Prometheus 指标、CSV 或数据库查询日志与 REST API

容易踩的坑

README 未给出具体启动命令与端口,需查阅官方文档的安装章节;配置文件为 YAML 格式,需自行准备;外部拦截列表需另行配置并会定期重载

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.35.0
  1. v0.35.0最新正式版2026-09-05 · 2026-09-05 16:55 UTC

    Changelog

    Features

    • 7dd039c90d2fad74e5b01cf363d765bd4f4e38ec: feat(resolver): add blocky_client_response_total metric (#2222) (@jvandenbroek)
    • 769d9089dbeeacc1e575622f930f0a5f71e4b33e: feat(resolver): add refused block type (#2239) (@ChrisJr404)
    • 45a242ffce62c3e203f9a2c8a87fbb8ba106c7ab: feat: add MIPS64 architecture builds (#2253) (@0xERR0R)

    Bug fixes

    • 4cf62ce9087bca960c147be0148db28e3c424bab: fix(cmd): healthcheck follows ports.dns from the config (#2221) (@maximilize)
    • a42d6566720389b7606887fb6500b1d6d5c853c7: fix(dnssec): don't return DNSSEC records to clients with the DO bit clear (#2203) (@kevinpark1217)
    • a0cee0a07d02e8f2afba69c081d57722be41560e: fix(querylog): exclude sqlite on Solaris and illumos (#2242) (@drscream)
    • 802869a578434813267d9faa681015bcdf4186e5: fix(resolver): Return SOA record with custom DNS NOERROR response (#2244) (@bb4242)
    • 190d5125be36df3a4564c326a08214d4dbbbe8f7: fix(resolver): count down cached authority and additional TTLs (#2197) (@maximilize)
    • 2e5d4781362bdc029509778d3d6015f555306d0e: fix(resolver): reply to NOTFQDN queries with a well-formed NXDOMAIN (#2250) (@0xERR0R)
    • dcdd952ab5433ad900571c7f84e1d8269f731300: fix(resolver): restore fallbackUpstream for rewritten queries (#2223) (@maximilize)
    • c46ed648642a065e41a5b14e9b5bc63bfeb51507: fix(resolver): retry DoH queries that fail on a stale pooled connection (#2251) (@0xERR0R)
    • 344de8662e2580a5f29e6566a96413545d89bfbb: fix(resolver): scope allowlist-only mode to the whole client (#2249) (@0xERR0R)
    • e2b40db357cc8c4108419af4023ed7ee1ff47452: fix(resolver): send the original name to the next resolver for rewritten queries (#2232) (@0xERR0R)
    • ff2aae4437326519f5b13f0427b26c8a1596a15d: fix(server): always answer an EDNS0 query with an OPT record (#2240) (@jackboykin)
    • db8d889b7bceda902ca10745966eb5e2bd50ba37: fix(server): compress responses larger than 512 bytes (#2213) (@0xERR0R)
    • 78d5367151d626419eba0b0373eed3b3166f215d: fix: don't pass EDNS0 DNS Cookies through (#2252) (@0xERR0R)

    Build and dependencies

    • 5e7e84482c7dac20b8817a9745ec2a989d8af282: build(deps): bump actions/setup-python from 6 to 7 (#2182) (@dependabot[bot])
    • 29d187ea2e3b5ecd75112e2a23182deb5ebf674e: build(deps): bump actions/stale from 10 to 11 (#2196) (@dependabot[bot])
    • 938b83961b8d66c7c93401b62a9f8e3f66527a17: build(deps): bump docker/login-action from 4 to 4.5.2 (#2199) (@dependabot[bot])
    • 554a41e937e180b3ae5a8da0fd07f5a00fdf51ea: build(deps): bump docker/login-action from 4.5.2 to 4.6.0 (#2206) (@dependabot[bot])
    • 04dd5e27409b47a56f369dd4a75d29ba0d58d8a8: build(deps): bump github.com/go-chi/chi/v5 from 5.3.1 to 5.3.2 (#2234) (@dependabot[bot])
    • 870b30e0ceec4cf9eceee8d25dd9847cf1059117: build(deps): bump github.com/miekg/dns from 1.1.72 to 1.1.73 (#2235) (@dependabot[bot])
    • a9870d6373a4283e0a6bed5f528fbfc6c5980715: build(deps): bump github.com/moby/go-archive from 0.2.0 to 0.3.0 (#2229) (@dependabot[bot])
    • cd984d5d61e4757b1704e20322759eef612d70fc: build(deps): bump github.com/oapi-codegen/runtime from 1.6.0 to 1.7.0 (#2230) (@dependabot[bot])
    • 54bf28fc929f0e8eb8fbb39323405aaf1fac6757: build(deps): bump github.com/onsi/ginkgo/v2 from 2.32.0 to 2.32.1 (#2220) (@dependabot[bot])
    • d3b0f1ca027979941442835846202e91ea84730c: build(deps): bump github.com/onsi/gomega from 1.42.1 to 1.43.0 (#2246) (@dependabot[bot])
    • e33ab870a9b0a0b3611ac504711cee0703f4c501: build(deps): bump github.com/quic-go/quic-go from 0.61.0 to 0.62.0 (#2248) (@dependabot[bot])
    • 253b912dfbbe5fecb4ad7b2b68022fff7541c265: build(deps): bump github.com/santhosh-tekuri/jsonschema/v6 from 6.0.2 to 6.0.3 (#2210) (@dependabot[bot])
    • 4a3c1909356ffa8720d8629c74f1e4afeb5dcd10: build(deps): bump github.com/sirupsen/logrus from 1.10.0 to 1.10.2 (#2245) (@dependabot[bot])
    • c5eb53308374d8486bcd938050927e9a5fb4f917: build(deps): bump github.com/sirupsen/logrus from 1.9.4 to 1.10.0 (#2225) (@dependabot[bot])
    • 027badd17a70adfb056577d3edfa1a09ac355bc6: build(
  2. v0.34.02026-07-27 · 2026-07-27 20:37 UTC
    查看更新说明

    Changelog

    Bug fixes

    • 91a8f4437e983c840874aec4aded47fd90bd6ddf: fix(bootstrap): fall back to other resolved addresses when a dial fails (#2190) (@maximilize)
    • 0a206718a007cde55582dac62683a75b8510f97c: fix(cache): set DO bit on prefetch reloads to keep DNSSEC-signed entry valid (#2158) (@logingood)
    • d55cd4f50dc143d8eed4e72213e9c8a3369bca49: fix(docker): pre-create writable /app/cache and /logs owned by UID 100 (#2172) (@0xERR0R)
    • dc958efd0b9624d3f029f6477a14a505eb633868: fix(lists): skip a lone "/" blocklist line instead of panicking (#2156) (@maximilize)
    • 1d450af5e1240a2d069d1083eb80e7253077ac8c: fix(resolver): match custom DNS PTR queries case insensitively (#2191) (@maximilize)
    • 472bac923de909ad8ec28f3f571baf30e66dcbd4: fix(stats): attribute filtered and non-FQDN queries to the client name (#2167) (@0xERR0R)
    • c07bd555b0532a4a7c3459721fb2214de1ac6630: fix(stats): count only true blocks (BLOCKED) as blocked (#2161) (@maximilize)
    • 84353421d78a2415077ba7b8fff45622737ad01c: fix(stats): give DNS rebinding protection its own REBIND response type (#2166) (@0xERR0R)

    Build and dependencies

    • c163c75e118852750d6ebeb8e0df91b2a299e6ba: build(deps): bump actions/setup-go from 6 to 7 (#2168) (@dependabot[bot])
    • 958760dc47a5f3a1e0e93f5218553477eb07cf9a: build(deps): bump github.com/breml/rootcerts from 0.3.6 to 0.3.7 (#2181) (@dependabot[bot])
    • d94652ffdce6af66a07cd8b9df168aa343fcffeb: build(deps): bump github.com/go-chi/chi/v5 from 5.3.0 to 5.3.1 (#2157) (@dependabot[bot])
    • d784ac5c0486752ca196e9051c5441382e61c6f8: build(deps): bump github.com/jedib0t/go-pretty/v6 from 6.8.1 to 6.8.2 (#2154) (@dependabot[bot])
    • 23575a47721dea7497ee9017274594b64c5fd1f5: build(deps): bump github.com/jedib0t/go-pretty/v6 from 6.8.2 to 6.8.3 (#2183) (@dependabot[bot])
    • b1f8a7212c762de99fe762c4ce772a2c7c70343b: build(deps): bump github.com/oapi-codegen/runtime from 1.4.2 to 1.5.0 (#2164) (@dependabot[bot])
    • 4fda662ed8878b6428ee8eb8638dfff7b7256698: build(deps): bump github.com/oapi-codegen/runtime from 1.5.0 to 1.6.0 (#2170) (@dependabot[bot])
    • 7c8aeb445f8538fbbd0e7811ec0a9f3d4eb3d723: build(deps): bump github.com/pires/go-proxyproto from 0.12.0 to 0.13.0 (#2153) (@dependabot[bot])
    • 77c115b68cf34d611cbee8fd06a899b5546b9832: build(deps): bump github.com/pires/go-proxyproto from 0.13.0 to 0.14.0 (#2155) (@dependabot[bot])
    • 6154af24b363965d7114851735c6b6146db9371b: build(deps): bump github.com/pires/go-proxyproto from 0.14.0 to 0.15.0 (#2162) (@dependabot[bot])
    • bd9e3ae6a971ef771df9815ffe10cde1cafaad67: build(deps): bump github.com/prometheus/client_golang from 1.23.2 to 1.24.0 (#2185) (@dependabot[bot])
    • 6fd79dd9707469dca70f39f4a92a12e271d8a2c1: build(deps): bump github.com/prometheus/client_golang from 1.24.0 to 1.24.1 (#2193) (@dependabot[bot])
    • 82777cad05100dbdecfbeec773f3a2d27a2cc1e1: build(deps): bump github.com/quic-go/quic-go from 0.60.0 to 0.61.0 (#2192) (@dependabot[bot])
    • 59f0b0f6240db99083d09a97b7f2f00b92a4f43a: build(deps): bump golang.org/x/net from 0.56.0 to 0.57.0 (#2159) (@dependabot[bot])
    • 288ff55e140b4b679cda58ec68dfdd3155d4c0ff: build(deps): bump oapi-codegen to 2.7.1 and kin-openapi to 0.144.0 (#2195) (@0xERR0R)

    Misc

    • 541860dd66ca9d04ca30605345841d4d6161c4f8: ci: automate sponsor list in README (#2173) (@0xERR0R)
    • 493142d289d586179534ac5d10703f460402dc20: ci: build sponsor avatar URLs from the login to avoid HTML escaping (#2177) (@0xERR0R)
    • d9e2827d40c32fb6c75f73113afa335ca079feb0: ci: fail the sponsors job instead of silently wiping the sponsor list (#2175) (@0xERR0R)

    ❤️ Support Blocky

    Blocky is free and open source, developed in my spare time — no telemetry, no ads, no hidden filtering. If it's useful to you, please consider supporting its continued development:

    GitHub Sponsors · thanks.dev · Liberapay · Ko-fi · [PayPa

  3. v0.33.02026-06-30 · 2026-06-30 08:22 UTC
    查看更新说明

    Changelog

    Features

    • 552eda5d7e8fd2de93efea4514f338fe468f7c70: feat(cli): add 'blocky stats' command (#2138) (@0xERR0R)
    • e9deb53045412ddd02f065bc73e978bbecf5f653: feat(queryLog): add dnstap as a query log destination (#2144) (@rtmongold)

    Bug fixes

    • a191ad2000de2813820a0b4407f3588d4bba85dd: fix(dnssec): propagate Indeterminate (not Bogus) for unreachable chain of trust (#2120) (#2139) (@0xERR0R)
    • 4b524e868c2dacb5d716d1f59a19cce9819c0a77: fix(ecs): apply useAsClient above cache and client-name lookup (#2140) (#2141) (@0xERR0R)

    Build and dependencies

    • afea4524d4b57147a58332463fabdf4c8afa7792: build(deps): bump github.com/breml/rootcerts from 0.3.5 to 0.3.6 (#2133) (@dependabot[bot])
    • 247a3c13cbc49b6816d41fbbf982ef51ac9ec60f: build(deps): bump github.com/jedib0t/go-pretty/v6 from 6.6.7 to 6.8.1 (#2145) (@dependabot[bot])
    • 2aa728de884404191fca6a930a5a1027e4cf6a72: build(deps): bump github.com/oapi-codegen/runtime from 1.4.1 to 1.4.2 (#2134) (@dependabot[bot])
    • 3f3f7d95316a157dc2b75ae9c6943f8c23b84480: build(deps): bump github.com/onsi/ginkgo/v2 from 2.31.0 to 2.32.0 (#2135) (@dependabot[bot])
    • 2d0e6f2855d0dc0c3fc8fb77c84f967ea3c04d81: build(deps): bump github.com/onsi/gomega from 1.42.0 to 1.42.1 (#2137) (@dependabot[bot])
    • 61d9a980c4f0bed024cac65c1d2b039fb99ff67f: build(deps): bump github.com/testcontainers/testcontainers-go/modules/mariadb from 0.42.0 to 0.43.0 (#2131) (@dependabot[bot])
    • cf865a6b61d014dd380cbb50f8cf574a3ec65fe4: build(deps): bump github.com/testcontainers/testcontainers-go/modules/postgres from 0.42.0 to 0.43.0 (#2130) (@dependabot[bot])
    • e3c30dc4fce4699fde75a5dea993fa97f05d1d95: build(deps): bump github.com/testcontainers/testcontainers-go/modules/redis from 0.42.0 to 0.43.0 (#2129) (@dependabot[bot])
    • a58f1c8f809859309fabffef4d532523d6c8201b: build(deps): bump google.golang.org/protobuf from 1.36.10 to 1.36.11 (#2148) (@dependabot[bot])
    • 6df83cd99367d87ddf8046907f1a1c60194fd529: build(deps): bump gorm.io/gorm from 1.31.1 to 1.31.2 (#2147) (@dependabot[bot])

    Misc

    • 6da7ce121c5abea2345d31b8f9b20990e9adbccb: perf(blocking): Tier 2 — lock-free grouped cache, cheapest-first lookup, client-name indexing (#2146) (@0xERR0R)
    • 302ca65668f3b3535ddaf2cf0f4236d7f6973f2a: perf(log): cut per-request logger allocations on the resolver hot path (#2142) (@0xERR0R)
    • 223df0c74247214b4fc70df57b1c9a31d7e45ed8: perf(queryLog): skip per-request LogEntry build when off or ignored (#2149) (@0xERR0R)
    • b73422e8198c4d9c87f074aed489c59d48ad42df: perf(resolver): allocation-free resolver selection in ParallelBestResolver (#2150) (@0xERR0R)

    ❤️ Support Blocky

    Blocky is free and open source, developed in my spare time — no telemetry, no ads, no hidden filtering. If it's useful to you, please consider supporting its continued development:

    GitHub Sponsors · thanks.dev · Liberapay · Ko-fi · PayPal

    Thank you to everyone supporting Blocky! 🙏

  4. v0.32.12026-06-20 · 2026-06-20 08:37 UTC
    查看更新说明

    Changelog

    Bug fixes

    • d3a1fe57d5ee70b3c573f2bcade0556957f0a028: fix(dnssec): don't cache transient Indeterminate validation results (#2120) (#2127) (@0xERR0R)
    • fc353a009230735e20888e08e373ad88f4bc15bb: fix(dnssec): only validate public-upstream answers (#2126) (#2128) (@0xERR0R)
    • 53cfbda3399b256527394ef837ce15a6b2007034: fix(querylog): add loong64 to unsupported list (#2123) (@rtmongold)

    Build and dependencies

    • cad2480c4ede15165ddfc034cf5cdf3091f1672d: build(deps): bump actions/checkout from 6 to 7 (#2124) (@dependabot[bot])
    • 6ff7db7b61202c4e3a7053e67db052f821b4a2b8: build(deps): bump github.com/moby/moby/api from 1.54.2 to 1.55.0 (#2125) (@dependabot[bot])

    ❤️ Support Blocky

    Blocky is free and open source, developed in my spare time — no telemetry, no ads, no hidden filtering. If it's useful to you, please consider supporting its continued development:

    GitHub Sponsors · thanks.dev · Liberapay · Ko-fi · PayPal

    Thank you to everyone supporting Blocky! 🙏

  5. v0.32.02026-06-16 · 2026-06-16 14:36 UTC
    查看更新说明

    Changelog

    Features

    • c851293904f8a7f941e09448b1f0fe5b4a935994: feat(blocking): log the matched rule in the block reason (#2091) (@0xERR0R)
    • 87be127f9e58df90f59b2a4f7782426722df5c17: feat(cache): Shard the result cache to remove the single-lock read ceiling (#2097) (@0xERR0R)
    • 7c6da156e8fe22446e4bbe0d80b609fef3c51dea: feat(config): structurally merge config folder files (#1827) (#2112) (@0xERR0R)
    • e7958e0dc14322583ea7e32edcea44f2aeb487c1: feat(lists): opt-in on-disk download cache with conditional revalidation (#2087) (@0xERR0R)
    • b82199b64a8429f185fa04c1a7b750c86ddca245: feat(querylog): ignore domains (exact/wildcard/regex) in query log (#2084) (@0xERR0R)
    • bee2d8bb87d1f5f5013b1a526d29ef813834e5a1: feat(resolver): UDP-first plain-DNS upstream and EDNS0 buffer floor (#2100) (@0xERR0R)
    • 0b70e5cfd2838325d53e9d8ac9ee69248eb1fb1a: feat(resolver): add DNS rebinding protection (#2111) (@0xERR0R)
    • 1b8e08a6f93c9f4b618d092067a49a06cefb9824: feat(resolver): pool DoT connections and enable TLS session resumption (#2098) (@0xERR0R)
    • 4018d9e5da51215d183310e24be0e81e9ab1035f: feat: in-memory statistics subsystem with /api/stats REST endpoint (#2093) (@0xERR0R)
    • 7abca446a597103b122e9894c176e4468b81b958: feat: support PROXY protocol on proxied DoT/DoH listeners (#2094) (@kastakhov)

    Bug fixes

    • 2496d12559f344fe0e49fd069b324d1ec3c4da7d: fix(dnssec): close DNSSEC validation bypass & cache-scope pollution (GHSA-x845-2f78-7v36) (#2119) (@0xERR0R)
    • 06555e04de1fa4063d05fe0520e38f7af325dcd5: fix(metrics): bound reason label cardinality for blocked responses (#2114) (@0xERR0R)
    • e0ea9b3ea56e3d074569abd3010251e7c6ebd593: fix(resolver): eliminate recursive RLock deadlock in blocking group resolution (#2106) (@0xERR0R)
    • 80f742e6f0d9612d494f065f8202e61a5c7b4c97: fix(server): answer browser CORS preflights for custom headers and Private Network Access (#2109) (@0xERR0R)
    • 9702c8fbd0b8f9356e0e0879ffc495f2944668b8: fix(stats): populate allow/denylist counts in /api/stats at startup (#2113) (@0xERR0R)

    Build and dependencies

    • 821e378131b78398a62f81c6dbf788dfd5d9a379: build(deps): bump codecov/codecov-action from 6 to 7 (#2089) (@dependabot[bot])
    • d63f84b37aa234e8e80390c09b2e45e9e4a14a89: build(deps): bump github.com/0xERR0R/expiration-cache from 0.1.0 to 0.2.0 (#2095) (@dependabot[bot])
    • 81f2b2a523ab0dc2f84fa2a50dd7161ebc82292d: build(deps): bump github.com/onsi/ginkgo/v2 from 2.29.0 to 2.30.0 (#2108) (@dependabot[bot])
    • 9c5abdfcb2bf7b27d8c6bf9c55e3092ef170de1b: build(deps): bump github.com/onsi/ginkgo/v2 from 2.30.0 to 2.31.0 (#2116) (@dependabot[bot])
    • 6c0ec5f604a8e4b4c6cfe305c881cf226eb3ddaf: build(deps): bump github.com/onsi/gomega from 1.41.0 to 1.42.0 (#2115) (@dependabot[bot])
    • 4beb9fed8373ddd0ab4d0567c17ee5f1195adcfe: build(deps): bump github.com/quic-go/quic-go from 0.59.1 to 0.60.0 (#2090) (@dependabot[bot])
    • 8fe22023516e25a57d6aacf23f60f4c7e6e4de80: build(deps): bump golang.org/x/net from 0.55.0 to 0.56.0 (#2101) (@dependabot[bot])
    • 52fa6a4863aa40ad09bd95817d2bac018f671476: build(deps): bump golang.org/x/sys from 0.45.0 to 0.46.0 (#2096) (@dependabot[bot])

    Misc

    • 1c9f717c9d2fad94e01accd28466f1d09b067b8b: ci(e2e): speed up e2e job via Ginkgo proc oversubscription (#2085) (@0xERR0R)
    • 8d49922a9afad384f070cf50b2194e792b3282b4: ci: cross-compile multi-arch docker image instead of QEMU emulation (#2081) (@0xERR0R)
    • 355a9a177ae6d462d74c78766af61e0460fd821a: docs(grafana): redesign Grafana dashboard and update integration guide (#2110) (@0xERR0R)
    • c791e8057e199b318e8062f1924bbb35c01deb7e: perf(e2e): probe blocky healthcheck at 250ms during start period (#2086) (@0xERR0R)
    • a0fb375df96631c0889c69b2e29b32518845e775: perf(lists): speed up blocklist loading (cache build + parsing) (#2083) (@0xERR0R)
    • 316b073dfe33944f46863d001206a5d489e3d6d5: perf(resolver): pre-classify client groups to cut per-query allocations (#2103) (@0xERR0R)
    • d5028066c9af5b09cff89455e2d87fae7c7323ed: perf(server): l

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    GitHub Workflow Status GitHub Workflow Status GitHub latest version GitHub Release Date GitHub go.mod Go version Docker pulls Docker Image Size (latest) Codecov Codacy grade Go Report Card Donation Liberapay receiving

    Blocky

    Blocky is a DNS proxy and ad-blocker for the local network written in Go with following features:

    Features

    • Blocking - Blocking of DNS queries with external lists (Ad-block, malware) and allowlisting

      • Definition of allow/denylists per client group (Kids, Smart home devices, etc.)
      • Periodical reload of external allow/denylists
      • Regex support
      • Blocking of request domain, response CNAME (deep CNAME inspection) and response IP addresses (against IP lists)
    • Advanced DNS configuration - not just an ad-blocker

      • Custom DNS resolution for certain domain names
      • Conditional forwarding to external DNS server
      • Upstream resolvers can be defined per client group
    • Performance - Improves speed and performance in your network

      • Customizable caching of DNS answers for queries -> improves DNS resolution speed and reduces amount of external DNS queries
      • Prefetching and caching of often used queries
      • Using multiple external resolver simultaneously
      • Low memory footprint
    • Various Protocols - Supports modern DNS protocols

      • DNS over UDP and TCP
      • DNS over HTTPS (aka DoH)
      • DNS over TLS (aka DoT)
      • DNS over QUIC (aka DoQ, RFC 9250)
      • DNS over HTTPS/3 (aka DoH3, RFC 9114)
    • Security and Privacy - Secure communication

      • Supports modern DNS extensions: DNSSEC, eDNS, ...
      • DNSSEC validation of upstream resolvers
      • Free configurable blocking lists - no hidden filtering etc.
      • Provides DoH Endpoint
      • Uses random upstream resolvers from the configuration - increases your privacy through the distribution of your DNS traffic over multiple provider
      • Blocky does NOT collect any user data, telemetry, statistics etc.
    • Integration - various integration

      • Prometheus metrics
      • Prepared Grafana dashboards (Prometheus and database)
      • Logging of DNS queries per day / per client in CSV format or MySQL/MariaDB/PostgreSQL/Timescale database - easy to analyze
      • Various REST API endpoints
      • CLI tool
    • Simple configuration - single or multiple configuration files in YAML format

      • Simple to maintain
      • Simple to backup
    • Simple installation/configuration - blocky was designed for simple installation

      • Stateless (no database, no temporary files)
      • Docker image with Multi-arch support
      • Single binary
      • Supports x86-64, ARM, and MIPS architectures -> runs fine on Raspberry PI and OpenWrt routers
      • Community supported Helm chart for k8s deployment

    ❤️ Support Blocky

    Blocky is free, open source, and built entirely in my spare time — with no telemetry, no data collection, and no hidden filtering. It keeps the DNS for thousands of home networks, homelabs, and businesses clean and private, and it always will.

    Maintaining a project this size — fixing bugs, reviewing pull requests, shipping new features, and keeping up with security — takes a lot of time. Thousands of people run Blocky; only a handful support it. If Blocky is useful to you, please consider chipping in. Your support directly funds ongoing development and helps keep Blocky independent and ad-free, forever.

    Even a small recurring contribution makes a real difference and is hugely appreciated. 🙏

    Sponsor on GitHub Support on thanks.dev Donate on Liberapay Buy me a coffee on Ko-fi Donate via PayPal

    🥇 Gold sponsors

    Sponsors

    Thank you to everyone who supports Blocky! ❤️

    Quick start

    You can jump to Installation chapter in the documentation.

    Full documentation

    You can find full documentation and configuration examples at: https://0xERR0R.github.io/blocky/

    Contribution

    Issues, feature suggestions and pull requests are welcome!

    ko-fi