#dns #bind #named #dnssec

app crab-hole

Pi-Hole clone written in rust using trust-dns

6 releases

0.1.5 Sep 2, 2023
0.1.4 Aug 16, 2023
0.1.3 May 11, 2023

#7 in #named

Download history 6/week @ 2023-06-04 28/week @ 2023-06-11 5/week @ 2023-06-18 4/week @ 2023-06-25 7/week @ 2023-07-02 4/week @ 2023-07-09 6/week @ 2023-07-16 5/week @ 2023-07-23 6/week @ 2023-07-30 9/week @ 2023-08-06 34/week @ 2023-08-13 3/week @ 2023-08-20 26/week @ 2023-08-27 19/week @ 2023-09-03 8/week @ 2023-09-10 10/week @ 2023-09-17

64 downloads per month

AGPL-3.0-or-later

39KB
1K SLoC

🦀 crab-hole

License: AGPL-3.0-or-later crab-hole on crates.io Source Code Repository Packaging status AUR package

Crab-hole is a cross platform Pi-hole clone written in rust using trust-dns. It can be use as a network wide Ad and spy blocker or run on your local pc.

For a secure and private communication carb-hole has buildin support for doh(https), doq(quic) and dot(tls) for down- and upstreams and dnssec for upstreams. It does also come with private friendly default logging settings.

Installation:

Crab-hole is avaibale at the following repositories:

Packaging status

Prebuild binarys can also been downloaded from the Github release.

Building from source:

Alternative you can easily build crab-hole by yourself.

  • install rust
  • run cargo install crab-hole --locked. See the rust book for more information about cargo install.
  • make sure that ~/.cargo/bin is listed at the PATH enviroment variable

Docker

A docker image is available at the Github Container Registry. Example docker-compoe.yml:

version: '3.3'
services:
    crab-hole:
        image: 'ghcr.io/luckyturtledev/crab-hole:latest' #semver tags are available
        ports: #required ports depend on downstream configuration
            - "53:53/tcp"
            - "53:53/udp"
        volumes:
            - './data:/data'
            - './config.toml:/data/config.toml:ro'

Semver tags like v0, v0.1 and v0.1.3 are available to safely allow automatic updates.

Configuration:

Example config file using cloudflare as dot (dns-over-tls) upstream.

[blocklist]
include_subdomains = true
lists = [
	"https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts",
	"https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt"
]

# optional
[api]
port = 8080
listen = "127.0.0.1"
# optional (default = false)
show_doc = true # OpenAPI doc loads content from third party websites
# optional
admin_key = "1234"

[[downstream]]
protocol = "udp"
listen = "localhost"
port = 8080

[[downstream]]
protocol = "udp"
listen = "[::]" #all ipv6 and ipv4 adress
port = 8053

[[downstream]]
protocol = "tls"
listen = "[::]"
port = 8054
certificate = "dns.example.com.crt"
key = "dns.example.com.key"
# optional (default = 3000)
timeout_ms = 3000

[[downstream]]
protocol = "https"
listen = "[::]"
port = 8055
certificate = "dns.example.com.crt"
key = "dns.example.com.key"
dns_hostname = "dns.example.com"
# optional (default = 3000)
timeout_ms = 3000

[[downstream]]
protocol = "quic"
listen = "127.0.0.1"
port = 8055
certificate = "dns.example.com.crt"
key = "dns.example.com.key"
dns_hostname = "dns.example.com"
# optional (default = 3000)
timeout_ms = 3000

# optional
[upstream.options]
# optional (default = false )
validate = true # use DNSSEC
# see https://docs.rs/trust-dns-resolver/0.23.0/trust_dns_resolver/config/struct.ResolverOpts.html for all options

[[upstream.name_servers]]
socket_addr = "[2606:4700:4700::1111]:853"
protocol = "tls"
tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"
trust_nx_responses = false

[[upstream.name_servers]]
socket_addr = "[2606:4700:4700::1001]:853"
protocol = "tls"
tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"
trust_nx_responses = false

[[upstream.name_servers]]
socket_addr = "1.1.1.1:853"
protocol = "tls"
tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"
trust_nx_responses = false

[[upstream.name_servers]]
socket_addr = "1.0.0.1:853"
protocol = "tls"
tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"
trust_nx_responses = false

Dependencies

~39–81MB
~1.5M SLoC