Manage, troubleshoot, configure, analyze, and review AdGuard Home DNS server.
This skill provides comprehensive management capabilities for AdGuard Home DNS server running on Ubuntu Server.
Before using this skill, ensure you have:
Environment variables configured (in .env or shell):
ADGUARD_URL=https://your-adguard-domain.local
ADGUARD_USER=admin
ADGUARD_PASS=your-password
ADGUARD_SSH_HOST=192.168.x.x
ADGUARD_SSH_USER=your-ssh-user
Python packages installed:
pip install requests paramiko
SSH key authentication (recommended) or password access to Ubuntu server
All API calls use HTTP Basic Auth:
curl -u "$ADGUARD_USER:$ADGUARD_PASS" "$ADGUARD_URL/control/status"
| Task | API Endpoint | Method |
|---|---|---|
| Get status | /control/status |
GET |
| Get DNS info | /control/dns_info |
GET |
| Query log | /control/querylog |
GET |
| Get stats | /control/stats |
GET |
| List clients | /control/clients |
GET |
| Filter status | /control/filtering/status |
GET |
| Clear cache | /control/cache_clear |
POST |
Check AdGuard Home status:
python scripts/adguard_api.py status
Or via curl:
curl -u "$ADGUARD_USER:$ADGUARD_PASS" "$ADGUARD_URL/control/status"
Analyze DNS queries to troubleshoot issues:
python scripts/adguard_api.py querylog --limit 100 --search "blocked"
Filter by response status: all, filtered, blocked, blocked_safebrowsing, blocked_parental, whitelisted, rewritten, safe_search, processed
View current filters:
python scripts/adguard_api.py filters
Add a blocklist:
python scripts/adguard_api.py add-filter --name "My List" --url "https://example.com/blocklist.txt"
Add custom filtering rule:
# Block domain
||ads.example.com^
# Allow domain (whitelist)
@@||allowed.example.com^
# Block with regex
/ads[0-9]+\.example\.com/
List all clients:
python scripts/adguard_api.py clients
Add/configure client:
python scripts/adguard_api.py add-client --name "Living Room TV" --ids "192.168.1.50"
List rewrites:
python scripts/adguard_api.py rewrites
Add rewrite:
python scripts/adguard_api.py add-rewrite --domain "myserver.local" --answer "192.168.1.100"
Get statistics:
python scripts/adguard_api.py stats
Reset statistics:
python scripts/adguard_api.py reset-stats
For tasks requiring direct server access:
# Check service status
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "systemctl status AdGuardHome"
# Restart service
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "sudo systemctl restart AdGuardHome"
# View logs
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "sudo journalctl -u AdGuardHome -n 100"
Location: /opt/AdGuardHome/AdGuardHome.yaml
# Backup config
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "sudo cp /opt/AdGuardHome/AdGuardHome.yaml /opt/AdGuardHome/AdGuardHome.yaml.bak"
# View config
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "sudo cat /opt/AdGuardHome/AdGuardHome.yaml"
ssh $ADGUARD_SSH_USER@$ADGUARD_SSH_HOST "cd /opt/AdGuardHome && sudo ./AdGuardHome -s stop && sudo ./AdGuardHome --update && sudo ./AdGuardHome -s start"
See troubleshooting.md for common issues and solutions including:
See best-practices.md for configuration recommendations including:
See reference.md for complete API endpoint documentation.