# 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 ```bash unbound-ads-generator ``` 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 ```bash go build ``` ## Testing ```bash go test -v ``` # unbound-ads A tool to generate [Unbound DNS server](https://nlnetlabs.nl/projects/unbound/about/) 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 ```bash docker pull public.ecr.aws/s0f9o2k5/unbound-ads:latest ``` ## Usage ### Binary ```bash unbound-ads ``` 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: ```bash unbound-ads https://v.firebog.net/hosts/lists.php?type=tick blocking.conf ``` ### Docker ```bash 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) ```bash # 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.