BREAKING CHANGE: Die alte Shell-Version muss vor der Installation der Go-Version deinstalliert werden.
9.7 KiB
Tipps & Troubleshooting
Dieses Dokument hilft beim Eingrenzen typischer Probleme im Betrieb. Die Reihenfolge ist bewusst praktisch: erst prüfen, ob der Dienst läuft, dann API, Firewall, Sperren, Listen und optionale Module.
Erste Diagnose
Diese Befehle liefern meistens schon genug Hinweise:
sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100
sudo /opt/adguard-shield/adguard-shield test
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
Wenn du aktuelle Queries sehen willst:
sudo /opt/adguard-shield/adguard-shield live
Service startet nicht
Prüfen:
sudo systemctl status adguard-shield
sudo journalctl -u adguard-shield --no-pager -n 100
Typische Ursachen:
- Konfigurationsdatei fehlt oder hat falsche Rechte
- Binary fehlt oder ist nicht ausführbar
iptables,ip6tablesoderipsetfehlen- AdGuard-Home-API ist nicht erreichbar
- alte Shell-Artefakte verursachen Konflikte
- systemd-Unit wurde manuell geändert, aber
daemon-reloadfehlt
Nützliche Prüfungen:
ls -l /opt/adguard-shield/adguard-shield
ls -l /opt/adguard-shield/adguard-shield.conf
which iptables ip6tables ipset systemctl
sudo systemctl daemon-reload
Verbindung zu AdGuard Home schlägt fehl
Test:
sudo /opt/adguard-shield/adguard-shield test
Prüfe in /opt/adguard-shield/adguard-shield.conf:
ADGUARD_URL="http://127.0.0.1:3000"
ADGUARD_USER="admin"
ADGUARD_PASS="..."
Häufige Fehler:
| Symptom | Mögliche Ursache |
|---|---|
| HTTP 401/403 | Benutzername oder Passwort falsch |
| HTTP 404 | falsche URL oder AdGuard Home nicht hinter dieser URL |
| Timeout | Firewall, DNS, falsche IP, Dienst nicht erreichbar |
| connection refused | AdGuard Home läuft nicht oder anderer Port |
| keine Querylog-Einträge | Querylog in AdGuard Home deaktiviert oder leer |
Direkt testen:
curl -k -u "admin:passwort" "http://127.0.0.1:3000/control/querylog?limit=1&response_status=all"
Passe URL und Zugangsdaten entsprechend an.
Keine Sperren trotz vieler Anfragen
Prüfen:
sudo /opt/adguard-shield/adguard-shield live --once
sudo /opt/adguard-shield/adguard-shield history 50
sudo /opt/adguard-shield/adguard-shield logs --level debug --limit 100
Mögliche Ursachen:
RATE_LIMIT_MAX_REQUESTSist zu hochRATE_LIMIT_WINDOWist zu kurzAPI_QUERY_LIMITist zu niedrig und verpasst Spitzen- Client steht in
WHITELIST - externe Whitelist enthält die IP
- AdGuard Home sieht nicht die echte Client-IP, sondern nur einen Proxy/Forwarder
- Querylog enthält die Anfragen nicht
DRY_RUN=trueist gesetzt
Wichtig bei Proxies und Forwardern: Wenn AdGuard Home nur eine einzige interne IP sieht, zählt AdGuard Shield auch nur diese IP. In solchen Setups muss die Architektur geprüft oder der Forwarder gewhitelistet werden.
Zu viele Sperren
Erst Übersicht:
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield history 100
Dann Ursachen einordnen:
| Ursache | Gegenmaßnahme |
|---|---|
| legitimer Client fragt häufig dieselbe Domain | Client whitelisten oder Limit erhöhen |
| Router/Resolver bündelt viele Clients | Router/Resolver whitelisten |
| CDN/App erzeugt viele Subdomains | SUBDOMAIN_FLOOD_MAX_UNIQUE erhöhen |
| externe Blocklist ist sehr groß | blocklist-status prüfen und Benachrichtigungen deaktiviert lassen |
| GeoIP Allowlist zu eng | Länder prüfen oder GEOIP_MODE ändern |
Falsch gesperrte IP freigeben:
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
sudo /opt/adguard-shield/adguard-shield reset-offenses 192.168.1.100
Dauerhaft ausnehmen:
WHITELIST="127.0.0.1,::1,192.168.1.1,192.168.1.100"
Danach:
sudo systemctl restart adguard-shield
Firewall prüfen
Status:
sudo /opt/adguard-shield/adguard-shield firewall-status
Direkt prüfen:
sudo ipset list adguard_shield_v4
sudo ipset list adguard_shield_v6
sudo iptables -n -L ADGUARD_SHIELD --line-numbers -v
sudo ip6tables -n -L ADGUARD_SHIELD --line-numbers -v
Firewall neu aufbauen:
sudo /opt/adguard-shield/adguard-shield firewall-remove
sudo /opt/adguard-shield/adguard-shield firewall-create
sudo systemctl restart adguard-shield
Nach dem Neustart werden aktive Sperren aus SQLite wieder in die ipsets geschrieben.
Sperren bleiben nach Ablauf aktiv
Prüfen:
sudo /opt/adguard-shield/adguard-shield status
sudo /opt/adguard-shield/adguard-shield history 100
Temporäre Sperren werden beim Start und während des Pollings auf Ablauf geprüft. Wenn eine Sperre permanent ist, wird sie nicht automatisch freigegeben.
Permanent sind typischerweise:
- DNS-Flood-Watchlist-Treffer
- Progressive-Ban-Maximalstufe
- manuelle
ban-Sperren - GeoIP-Sperren
- externe Blocklist mit
EXTERNAL_BLOCKLIST_BAN_DURATION=0
Manuell freigeben:
sudo /opt/adguard-shield/adguard-shield unban 192.168.1.100
Dry-Run verwenden
Dry-Run ist ideal für neue Regeln:
sudo /opt/adguard-shield/adguard-shield dry-run
Währenddessen:
sudo /opt/adguard-shield/adguard-shield history 50
Im Dry-Run werden mögliche Sperren als DRY protokolliert. Es entstehen keine aktiven Sperren und keine Firewall-Änderungen.
Externe Whitelist
Status:
sudo /opt/adguard-shield/adguard-shield whitelist-status
Manuell synchronisieren:
sudo /opt/adguard-shield/adguard-shield whitelist-sync
Typische Probleme:
- URL nicht erreichbar
- Datei enthält Windows-Zeilenenden oder BOM
- Hostname ist nicht auflösbar
- Einträge enthalten Ports oder URLs statt IP/Hostname
- DNS-Auflösung liefert
0.0.0.0, weil AdGuard den Host blockiert
Format prüfen:
192.168.1.100
10.0.0.0/24
trusted.example.com
# Kommentare sind erlaubt
Externe Blocklist
Status:
sudo /opt/adguard-shield/adguard-shield blocklist-status
Manuell synchronisieren:
sudo /opt/adguard-shield/adguard-shield blocklist-sync
Alle externen Blocklist-Sperren freigeben:
sudo /opt/adguard-shield/adguard-shield blocklist-flush
Wenn zu viele IPs gesperrt werden:
EXTERNAL_BLOCKLIST_URLSprüfen.- Liste manuell ansehen.
- Whitelist für eigene IPs ergänzen.
EXTERNAL_BLOCKLIST_NOTIFY=falselassen.- Bei Bedarf
EXTERNAL_BLOCKLIST_AUTO_UNBAN=truesetzen.
GeoIP
Status:
sudo /opt/adguard-shield/adguard-shield geoip-status
Einzelne IP prüfen:
sudo /opt/adguard-shield/adguard-shield geoip-lookup 8.8.8.8
Cache leeren:
sudo /opt/adguard-shield/adguard-shield geoip-flush-cache
Alle GeoIP-Sperren freigeben:
sudo /opt/adguard-shield/adguard-shield geoip-flush
Typische Ursachen:
| Problem | Lösung |
|---|---|
| keine Länder erkannt | MaxMind-Key, MMDB-Pfad oder geoiplookup prüfen |
| private IPs werden nicht geprüft | GEOIP_SKIP_PRIVATE=true ist aktiv, das ist Standard |
| zu viele Länder gesperrt | GEOIP_MODE und GEOIP_COUNTRIES prüfen |
| Allowlist sperrt fast alles | im Allowlist-Modus sind nur genannte Länder erlaubt |
Reports
Status:
sudo /opt/adguard-shield/adguard-shield report-status
Test:
sudo /opt/adguard-shield/adguard-shield report-test
sudo /opt/adguard-shield/adguard-shield report-generate txt
Wenn keine Mail ankommt:
REPORT_EMAIL_TOgesetzt?REPORT_MAIL_CMDvorhanden?- Mailer für root konfiguriert?
- Cron installiert?
- Spam-Ordner geprüft?
Cron prüfen:
sudo cat /etc/cron.d/adguard-shield-report
sudo /opt/adguard-shield/adguard-shield report-send
Benachrichtigungen
Prüfen:
sudo /opt/adguard-shield/adguard-shield logs --level warn --limit 100
Häufige Ursachen:
NOTIFY_ENABLED=false- falscher
NOTIFY_TYPE - Webhook-URL leer
- Ntfy-Topic leer
- Token ungültig
- ausgehende HTTPS-Verbindung blockiert
- externe Blocklist meldet nichts, weil
EXTERNAL_BLOCKLIST_NOTIFY=false - GeoIP meldet nichts, weil
GEOIP_NOTIFY=false
SQLite direkt auswerten
Für tiefergehende Analysen:
sudo sqlite3 /var/lib/adguard-shield/adguard-shield.db \
"select source, reason, count(*) from active_bans group by source, reason order by count(*) desc;"
Letzte History:
sudo sqlite3 /var/lib/adguard-shield/adguard-shield.db \
"select timestamp_text, action, client_ip, domain, reason from ban_history order by id desc limit 20;"
Offense-Zähler:
sudo sqlite3 /var/lib/adguard-shield/adguard-shield.db \
"select client_ip, offense_level, last_offense from offense_tracking order by offense_level desc;"
Alte Shell-Artefakte entfernen
Wenn der Installer alte Dateien meldet, zuerst sauber migrieren. Typische alte Dateien:
adguard-shield.sh
iptables-helper.sh
external-blocklist-worker.sh
external-whitelist-worker.sh
geoip-worker.sh
offense-cleanup-worker.sh
report-generator.sh
unban-expired.sh
adguard-shield-watchdog.sh
Die Go-Version ersetzt diese Funktionen durch das eine Binary. Alte Worker sollten nicht parallel laufen.
Service hart zurücksetzen
Wenn der Zustand unklar ist:
sudo systemctl stop adguard-shield
sudo /opt/adguard-shield/adguard-shield firewall-remove
sudo systemctl start adguard-shield
sudo /opt/adguard-shield/adguard-shield status
Das entfernt die Firewall-Struktur und lässt den Daemon sie beim Start wieder aus SQLite aufbauen.
Deinstallation
Konfiguration behalten:
sudo /opt/adguard-shield/adguard-shield uninstall --keep-config
Alles entfernen:
sudo /opt/adguard-shield/adguard-shield uninstall
Ohne --keep-config werden Installationsverzeichnis, State-Verzeichnis und Logdatei entfernt.