No description
Find a file
Timo Schulze 9703d7a10e
All checks were successful
CI / build (push) Successful in 51s
Fix CI runner label to linux
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 21:42:00 +02:00
.forgejo/workflows Fix CI runner label to linux 2026-06-03 21:42:00 +02:00
.gitignore Fixes 2026-06-03 00:38:11 +02:00
blocklist.txt GUI and Optimization 2026-06-02 19:17:06 +02:00
COMMANDS.md Fixes 2026-06-03 00:38:11 +02:00
dnsblogger Fixes 2026-06-03 00:38:11 +02:00
domains.txt Fixes 2026-06-03 00:38:11 +02:00
go.mod Init 2026-06-02 19:01:29 +02:00
go.sum Init 2026-06-02 19:01:29 +02:00
main.go Changes 2026-06-02 23:02:14 +02:00
README.md Changes 2026-06-02 23:02:14 +02:00
web.go Fixes 2026-06-03 00:38:11 +02:00

dnsBlogger

Befehle & Cheatsheet: COMMANDS.md

Ein DNS-Server der alle Anfragen loggt und optional Domains sperren kann.

Browser/App → [dnsBlogger] → 8.8.8.8 (Upstream)
                  │
                  ├─ Logging (alle Anfragen)
                  ├─ blocklist.txt (NXDOMAIN zurückgeben)
                  └─ domains.txt (alle gesehenen Domains speichern)

Kompilieren

go build -o dnsBlogger .

Verwendung

# Normaler Start (Port 53, braucht sudo)
sudo ./dnsBlogger

Das war's. Der Server lädt automatisch:

  • blocklist.txt — falls die Datei existiert
  • domains.txt — alle gesehenen Domains werden dort gesammelt

Zum Testen ohne sudo (Port 5353):

./dnsBlogger -listen 127.0.0.1:5353

Flags

Flag Standard Beschreibung
-listen 127.0.0.1:53 Bind-Adresse
-upstream 8.8.8.8:53 Upstream DNS (Cloudflare: 1.1.1.1:53)
-blocklist blocklist.txt Andere Blocklist-Datei verwenden
-no-blocklist Blocklist komplett deaktivieren
-domains domains.txt Andere Datei für Domain-Tracking
-no-domains Domain-Tracking deaktivieren
-web 127.0.0.1:8080 Web UI Adresse (ip:port)
-no-web Web UI deaktivieren
-log stdout Log in Datei schreiben (deaktiviert Farben)

Beispiele:

# Andere Blocklist verwenden
sudo ./dnsBlogger -blocklist meine-liste.txt

# Ohne Blocking, nur logging
sudo ./dnsBlogger -no-blocklist

# Cloudflare statt Google als Upstream
sudo ./dnsBlogger -upstream 1.1.1.1:53

# Alles in Dateien, kein Terminal-Output
sudo ./dnsBlogger -log /var/log/dns.log

Console-Ausgabe

2026/06/02 17:52:36.118874 INFO  DNS server listening on 127.0.0.1:53 ...
2026/06/02 17:52:36.118900 INFO  Loaded 55 entries from blocklist.txt
2026/06/02 17:52:36.118910 INFO  Recording unique domains to domains.txt
2026/06/02 17:52:37.001234 QUERY src=127.0.0.1:54321  type=A      name=github.com.
2026/06/02 17:52:37.045678 ALLOW src=127.0.0.1:54321  latency=44ms
2026/06/02 17:52:38.001234 BLOCK src=127.0.0.1:54322  type=A      name=doubleclick.net.
  • QUERY (cyan) — Anfrage eingegangen, wird weitergeleitet
  • ALLOW (grün) — Antwort erhalten und zurückgegeben
  • BLOCK (rot) — Domain geblockt, NXDOMAIN zurückgegeben
  • ERROR (rot) — Upstream nicht erreichbar

Blocklist neu laden (ohne Neustart)

Nach Änderungen an blocklist.txt muss der Server normalerweise neu gestartet werden. Mit SIGHUP geht es ohne Unterbrechung:

# PID des laufenden Servers herausfinden
sudo lsof -i :53 -sTCP:LISTEN | grep dnsBlogger

# Blocklist neu laden (kein Neustart, keine Unterbrechung)
sudo kill -HUP <pid>

Der Server antwortet sofort:

INFO  Reloading blocklist...
INFO  Loaded 57 entries from blocklist.txt

Statistiken

Beim Beenden (Ctrl+C) gibt der Server eine Zusammenfassung aus:

INFO  ─── Stats ───────────────────────────────────────
INFO  Queries: 8432  Blocked: 1205 (14%)  Allowed: 7227  Errors: 0
INFO  Top blocked domains:
INFO    1.  doubleclick.net                               42x
INFO    2.  googleadservices.com                          28x
INFO    3.  bat.bing.com                                  15x

Web UI

Standardmäßig läuft eine Web-Oberfläche auf http://127.0.0.1:8080.

http://127.0.0.1:8080

Features

  • Live Log (links) — alle DNS-Anfragen in Echtzeit, farbkodiert (rot=BLOCK, grün=ALLOW, blau=QUERY). Scrollen pausiert beim Hovern.
  • Domain-Liste (rechts) — alle bisher gesehenen Domains, durchsuchbar. Geblockte Domains stehen oben in Rot.
  • Block / Unblock — ein Klick reicht. Änderungen werden sofort in blocklist.txt gespeichert.
  • Stats-Bar oben — Queries / Blocked / Allowed / Errors / Domains seen (aktualisiert sich alle 5 Sekunden).
  • Live-Indikator (grüner Punkt) — zeigt ob die SSE-Verbindung aktiv ist.

Im Netzwerk erreichbar (z.B. Raspberry Pi)

Einfach den Server so starten:

sudo ./dnsBlogger -listen 0.0.0.0:53 -web 0.0.0.0:8080

Dann erreichst du die UI von jedem Gerät im Netzwerk über:

http://<raspberry-pi-ip>:8080

Die IP des Pi herausfinden:

hostname -I

Empfehlenswert: dem Pi im Router eine feste IP vergeben (DHCP-Reservierung), damit sich die Adresse nach einem Neustart nicht ändert.

Hinweis: Wenn Domains über die UI geblockt oder entblockt werden, schreibt der Server blocklist.txt als flache sortierte Liste neu. Kommentare aus der Original-Datei gehen dabei verloren.


Netzwerk-Modus (alle Geräte im Netzwerk)

Statt nur 127.0.0.1 auf allen Interfaces lauschen — dann kann der Router diesen Rechner als DNS für alle Geräte eintragen:

sudo ./dnsBlogger -listen 0.0.0.0:53

Im Router (z.B. Fritz!Box) unter DHCP-Einstellungen die IP dieses Rechners als DNS-Server eintragen. Alle Geräte im Netzwerk laufen dann automatisch durch dnsBlogger.


blocklist.txt

Eine Domain pro Zeile, # für Kommentare (auch inline):

# Werbung
doubleclick.net
googleadservices.com    # Google Ads

# Social Media
instagram.com

Subdomain-Matching: ads.example.com blockt auch sub.ads.example.com.

Test-Modus: Zeile * einfügen um alles zu blocken — danach entfernen und neu starten.

Nach jeder Änderung: Server neu starten damit die neue Blocklist geladen wird.


domains.txt

Jede Domain die zum ersten Mal aufgerufen wird, landet in domains.txt. Duplikate werden übersprungen — auch über Neustarts hinweg.

Nützlich um zu sehen welche Domains dein Netzwerk kontaktiert, und daraus eigene Blocklist-Einträge zu bauen.


DNS einstellen

macOS

Schritt 1 — Server starten

sudo ./dnsBlogger

Schritt 2 — macOS auf 127.0.0.1 als DNS umstellen

  1. Systemeinstellungen öffnen
  2. WLAN → dein Netzwerk → Details...
  3. Tab DNS auswählen
  4. Bestehende Einträge mit entfernen
  5. Mit + den Eintrag 127.0.0.1 hinzufügen
  6. OKAnwenden

Schritt 3 — Prüfen

scutil --dns | head -5
# nameserver[0] : 127.0.0.1  ← muss so stehen

DNS zurücksetzen (macOS)

  1. Systemeinstellungen → WLAN → Details → DNS
  2. 127.0.0.1 entfernen, leer lassen (Router-DNS) oder 1.1.1.1 eintragen
  3. OK → Anwenden

Windows

Schritt 1 — Eingabeaufforderung als Administrator, dann:

dnsBlogger.exe

Schritt 2 — DNS umstellen

  1. Einstellungen → Netzwerk & Internet → WLAN/Ethernet → Adapteroptionen
  2. Rechtsklick auf Adapter → Eigenschaften
  3. Internetprotokoll Version 4 (TCP/IPv4) → Eigenschaften
  4. „Folgende DNS-Serveradressen verwenden" → 127.0.0.1
  5. OK

DNS zurücksetzen: Selber Weg → „DNS-Serveradresse automatisch beziehen"


Linux (systemd-resolved)

# /etc/systemd/resolved.conf bearbeiten:
[Resolve]
DNS=127.0.0.1
DNSStubListener=no   # wichtig: sonst belegt systemd Port 53

sudo systemctl restart systemd-resolved

Router (alle Geräte im Netzwerk)

Den Server auf einem Gerät mit fester IP starten (z.B. Mac mini, Raspberry Pi):

# Beispiel: Gerät hat IP 192.168.0.10
sudo ./dnsBlogger -listen 192.168.0.10:53

Dann im Router unter DHCP-Einstellungen diesen Rechner als DNS-Server eintragen. Alle Geräte im Netzwerk nutzen danach automatisch dnsBlogger.


DNS-Cache leeren

Nach einer DNS-Änderung immer den Cache leeren:

System Befehl
macOS sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder
Windows ipconfig /flushdns (als Administrator)
Linux (systemd) sudo systemd-resolve --flush-caches
Chrome chrome://net-internals/#dns → „Clear host cache"
Firefox about:networking#dns → „Clear DNS Cache"

Einschränkung: DNS over HTTPS (DoH)

Viele Apps und Browser nutzen DoH — DNS direkt über HTTPS, am lokalen Server vorbei. dnsBlogger kann diese nicht abfangen.

Browser Einstellung
Firefox about:confignetwork.trr.mode5
Chrome Einstellungen → Datenschutz → Sicherheit → Sicheres DNS → deaktivieren
Edge Einstellungen → Datenschutz → DNS über HTTPS → deaktivieren