Fast and lightweight DNS proxy as ad-blocker for local network with many features
Go to file
Dimitri Herzog a4b89537db
update golangci-lint (#510)
* update golangci-lint

* enable gomnd linter

* enable asciicheck linter

* enable bidichk linter

* enable durationcheck linter

* enable errchkjson linter

* enable errorlint linter

* enable exhaustive linter

* enable gomoddirectives linter

* enable gomodguard guard

* enable grouper linter

* enable grouper and ifshort linters

* enable importas linter

* enable makezero linter

* enable nestif linter

* enable nilerr linter

* enable nilnil linter

* enable nlreturn linter

* enable nolintlint linter

* enable predeclared linter

* enable sqlclosecheck linter

* enable tenv linter

* enable wastedassign linter
2022-05-10 09:09:50 +02:00
.github update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
api update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
cache update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
cmd update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
config update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
docs docs: Indent "Integration" sub-points on mkdocs index page (#502) 2022-04-26 10:44:14 +02:00
evt Add failed_download_count prometheus metric (#309) (#395) 2022-01-04 21:24:49 +01:00
helpertest chore: test cleanup and refactoring (#509) 2022-05-06 22:34:08 +02:00
lists update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
log Support of DoH/DoT as bootstrap DNS (#485) 2022-04-22 22:12:35 +02:00
metrics Add failed_download_count prometheus metric (#309) (#395) 2022-01-04 21:24:49 +01:00
model Support of DoH/DoT as bootstrap DNS (#485) 2022-04-22 22:12:35 +02:00
querylog update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
redis update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
resolver update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
server update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
testdata filtering of queries (#450) (#474) 2022-04-01 08:58:09 +02:00
util update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
web Moved index.go to go:embed (#392) 2022-01-01 22:32:22 +01:00
.dockerignore added "dist" to dockerignore 2021-12-13 22:54:55 +01:00
.gitignore Extract client name from the URL (DoH and DoT) (#317) 2021-10-13 22:47:14 +02:00
.golangci.yml update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
.goreleaser.yml Release binaries for darwin (MacOS) (#390) 2022-02-01 22:07:24 +01:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-03-05 10:58:39 +01:00
Dockerfile Fixing unexpanded CMD variable with correct defaulting behavior. (#478) 2022-04-01 09:12:03 +02:00
LICENSE added license text 2020-01-13 21:57:57 +01:00
Makefile update golangci-lint (#510) 2022-05-10 09:09:50 +02:00
README.md Add rewrite support to custom DNS (#449) 2022-03-17 22:30:21 +01:00
codecov.yml refactoring: generate enums 2021-09-11 21:31:03 +02:00
go.mod chore: test cleanup and refactoring (#509) 2022-05-06 22:34:08 +02:00
go.sum chore: test cleanup and refactoring (#509) 2022-05-06 22:34:08 +02:00
main.go use full-qualified name as module 2021-08-27 13:41:36 +02:00
mkdocs.yml Change configuration format for duration (#263) 2021-09-12 21:29:03 +02:00

README.md

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 Total alerts Donation

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 whitelisting

    • Definition of black and white lists per client group (Kids, Smart home devices, etc.)
    • Periodical reload of external black and white lists
    • 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)
  • Security and Privacy - Secure communication

    • Supports modern DNS extensions: DNSSEC, eDNS, ...
    • 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 database - easy to analyze
    • Various REST API endpoints
    • CLI tool
  • Simple configuration - single configuration file 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 and ARM architectures -> runs fine on Raspberry PI
    • Community supported Helm chart for k8s deployment

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