- New: 05-troubleshooting/networking/pihole-blocks-claude-desktop.md Covers diagnosis via FTL SQLite query log, gravity DB adlist lookup, fix via type-0 domainlist whitelist entry + pihole reloaddns, and why NULL blocking mode produces TCP refused instead of NXDOMAIN. - Updated SUMMARY.md and 05-troubleshooting/index.md with new entry
4.6 KiB
| title | domain | category | tags | status | created | updated | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pi-hole AI Blocklist Blocks Claude Desktop (ERR_CONNECTION_REFUSED) | troubleshooting | networking |
|
published | 2026-04-22 | 2026-04-22 |
Pi-hole AI Blocklist Blocks Claude Desktop (ERR_CONNECTION_REFUSED)
🛑 Problem
Claude Desktop throws a [remoteMarketplaceClient] transport error: net::ERR_CONNECTION_REFUSED error when attempting to install or load a plugin. The app itself loads fine and API calls work, but the marketplace client silently fails.
🔍 Diagnosis
Step 1 — Check the Pi-hole query log for claude.ai
sudo pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db \
"SELECT datetime(timestamp, 'unixepoch', 'localtime') as time, domain, status \
FROM queries \
WHERE domain LIKE '%anthropic%' OR domain LIKE '%claude%' \
ORDER BY timestamp DESC LIMIT 50;"
Look for claude.ai entries with status 1 (gravity/adlist block). Status 2 or 3 means it's resolving fine.
FTL status codes relevant here:
| Status | Meaning |
|---|---|
| 1 | Blocked — gravity (adlist) |
| 2 | Forwarded (allowed) |
| 3 | Cached (allowed) |
| 4 | Blocked — regex domainlist |
| 5 | Blocked — exact domainlist |
Step 2 — Identify which adlist is blocking it
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"SELECT a.address, a.comment \
FROM gravity g \
JOIN adlist a ON g.adlist_id = a.id \
WHERE g.domain = 'claude.ai';"
Root cause: claude.ai appears in AI-focused blocklists because they target AI scraper and training crawlers by domain. Claude Desktop's marketplace client makes outbound requests to claude.ai, which Pi-hole resolves to 0.0.0.0 in NULL blocking mode — resulting in ERR_CONNECTION_REFUSED at the TCP layer.
Known adlists that include claude.ai:
- uBlockOrigin HUGE AI Blocklist (
laylavish/uBlockOrigin-HUGE-AI-Blocklist) - Super SEO Spam Suppressor (
NotaInutilis/Super-SEO-Spam-Suppressor)
✅ Fix
Add claude.ai as an exact whitelist entry (type 0) in Pi-hole's domainlist. This overrides any gravity block.
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"INSERT OR IGNORE INTO domainlist (type, domain, enabled, comment) \
VALUES (0, 'claude.ai', 1, 'Whitelisted — blocked by AI/SEO adlists, needed for Claude Desktop marketplace client');"
Then reload DNS to apply:
sudo pihole reloaddns
Verify the whitelist entry is active
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"SELECT domain, type, enabled, comment FROM domainlist WHERE domain = 'claude.ai';"
Expected output:
claude.ai|0|1|Whitelisted — blocked by AI/SEO adlists, needed for Claude Desktop marketplace client
🔁 Why This Happens
Pi-hole in NULL blocking mode resolves blocked domains to 0.0.0.0. When Claude Desktop's marketplace client tries to connect to claude.ai, the TCP handshake to 0.0.0.0 is immediately refused by the OS — producing ERR_CONNECTION_REFUSED rather than a timeout or DNS error. This makes it look like a network or server issue rather than a DNS block.
AI-focused blocklists cast a wide net and include domains like claude.ai alongside actual AI scraper hostnames. The fix is a precision whitelist entry rather than removing the adlist.
⚠️ Note on the Custom Domainlist
claude.ai may also appear as an accidental exact deny entry in the Pi-hole custom domainlist if it was added via "Block" in the Pi-hole query log UI. This compounds the adlist block. Clean the domainlist if needed:
# Check for exact deny entries
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"SELECT id, domain, type, enabled FROM domainlist WHERE domain = 'claude.ai';"
# Remove an unwanted deny entry (type 1 = exact deny)
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"DELETE FROM domainlist WHERE domain = 'claude.ai' AND type = 1;"
sudo pihole reloaddns
🔎 Quick Reference
# Check if claude.ai is blocked
sudo pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db \
"SELECT datetime(timestamp, 'unixepoch', 'localtime'), domain, status \
FROM queries WHERE domain = 'claude.ai' ORDER BY timestamp DESC LIMIT 10;"
# Find which adlist is blocking it
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"SELECT a.address FROM gravity g JOIN adlist a ON g.adlist_id = a.id \
WHERE g.domain = 'claude.ai';"
# Whitelist it
sudo pihole-FTL sqlite3 /etc/pihole/gravity.db \
"INSERT OR IGNORE INTO domainlist (type, domain, enabled, comment) \
VALUES (0, 'claude.ai', 1, 'Claude Desktop marketplace client');"
# Reload
sudo pihole reloaddns