aboutsummaryrefslogtreecommitdiff

Unbound Ads Generator

A tool to generate Unbound DNS server configuration for blocking advertising domains.

Overview

This program fetches lists of advertising domains from multiple sources and generates a configuration file for the Unbound DNS server to block these domains. It supports multiple input formats and automatically deduplicates domains.

Usage

unbound-ads-generator <url-list> <output-file>

Where: - url-list is a URL pointing to a text file containing a list of URLs (one per line) that provide domain lists - output-file is the path where the Unbound configuration will be written

Input Format

The URL list file should contain URLs (one per line) pointing to domain lists. Lines starting with # are treated as comments.

Example URL list file:

# Ad blocking lists
https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts.txt
https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts

The domain lists can be in either of these formats:

# IP and domain format
0.0.0.0 advertising.example.com

# Plain domain format
advertising.example.com

Output Format

The program generates Unbound configuration in this format:

local-zone: "advertising.example.com" refuse
local-zone: "another-ad.example.com" refuse

Features

  • Supports multiple domain list formats
  • Automatically deduplicates domains
  • Case-insensitive domain matching
  • Progress logging
  • Comment handling
  • Basic domain validation

Building

go build

Testing

go test -v

unbound-ads

A tool to generate Unbound DNS server configuration for domain blocking. It fetches domain lists from URLs and converts them into Unbound's local-zone configuration format for DNS-based ad and malware blocking.

Features

  • Fetches domain lists from multiple URLs
  • Supports various domain list formats (hosts file format, plain domain lists)
  • Deduplicates domains automatically
  • Generates Unbound-compatible configuration
  • Progress logging with slog
  • Docker support

Installation

Using Docker

docker pull public.ecr.aws/s0f9o2k5/unbound-ads:latest

Usage

Binary

unbound-ads <url-list> <output-file>

Where: - url-list is a URL containing a list of domain list URLs (one per line) - output-file is the path where the Unbound configuration will be written

Example:

unbound-ads https://v.firebog.net/hosts/lists.php?type=tick blocking.conf

Docker

docker run --rm -v "$PWD:/data" ghcr.io/yourusername/unbound-ads \
  https://v.firebog.net/hosts/lists.php?type=tick /data/blocking.conf

Building from Source

Requirements: - Go 1.21 or later - just command runner - Docker (optional)

# Build binary
just build

# Build Docker image
just docker-build

# Run tests
just test

Output Format

The tool generates Unbound configuration in this format:

local-zone: "example.com" refuse
local-zone: "ads.example.com" refuse

When added to your Unbound configuration, these entries will cause Unbound to return NXDOMAIN for queries to blocked domains.