claude-home/gaming/xbox-pihole-mlb-the-show-incident.md
Cal Corum f2258dfade
All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 5s
docs: add Xbox Pi-hole incident report for MLB The Show menu delays
Pi-hole was gravity-blocking Microsoft telemetry domains that Xbox
calls synchronously during menu transitions, causing 5-10s hangs.
Created per-client Xbox group with allowlist on both Pi-holes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:41:36 -05:00

5.6 KiB

title description type domain tags
Incident: MLB The Show Xbox Menu Delays Caused by Pi-hole Blocking Root cause analysis for multi-second menu delays in MLB The Show on Xbox, caused by Pi-hole gravity-blocking Microsoft telemetry domains that the game calls synchronously. troubleshooting gaming
xbox
pihole
dns
mlb-the-show
troubleshooting

Incident: MLB The Show Xbox Menu Delays — Pi-hole Blocking

Date: 2026-03-14 Platform: Xbox Series X (MAC: 3C:FA:06:C7:D0:09) Game: MLB The Show 26 Impact: 5-10 second delays when toggling in-game menus

Symptoms

  • Multi-second hangs (5-10s) when navigating between menus in MLB The Show online
  • Game itself loaded and played fine; issue was specifically menu transitions
  • No obvious network errors or disconnections

Root Cause

MLB The Show (and the Xbox OS) make synchronous HTTP calls to Microsoft telemetry and settings domains during menu transitions. When Pi-hole gravity-blocks these domains (returning 0.0.0.0), the game hangs waiting for the TCP connection to time out before proceeding.

Five blocked domains were identified hitting the Xbox:

Domain Blocklist Purpose
settings-win.data.microsoft.com VeleSila/yhosts Xbox/Windows settings sync
arc.msn.com blocklistproject/ads Microsoft ads/telemetry
v10.events.data.microsoft.com blocklistproject/ads, developerdan/ads-tracking Microsoft telemetry
v20.events.data.microsoft.com SNAFU, developerdan/ads-tracking Microsoft telemetry
activity.windows.com developerdan/ads-tracking Windows activity history

Key evidence from Pi-hole logs

The Xbox was retrying settings-win.data.microsoft.com every 1-2 seconds — classic timeout-retry behavior:

Mar 14 08:16:50 query[A] settings-win.data.microsoft.com from 10.0.0.249
Mar 14 08:16:52 query[A] settings-win.data.microsoft.com from 10.0.0.249
Mar 14 08:16:54 query[A] settings-win.data.microsoft.com from 10.0.0.249
Mar 14 08:16:55 query[A] settings-win.data.microsoft.com from 10.0.0.249

The log showed only query entries with no corresponding forwarded/reply — Pi-hole was responding immediately from gravity with 0.0.0.0, so the Xbox got a valid DNS response but then the HTTP connection to 0.0.0.0 would hang until TCP timeout.

Resolution

Created a per-client Xbox group in Pi-hole (both primary and secondary) with allowlist entries for the five domains. This scopes the whitelist to only the Xbox — other devices on the network still have these domains blocked.

Pi-hole Configuration Applied

Both Pi-holes (10.10.0.16 primary, 10.10.0.226 secondary):

  • Group: Xbox (enabled)
  • Client: 3C:FA:06:C7:D0:09 (Xbox Series X) — member of Default + Xbox groups
  • Allowlist (Xbox group only):
    • settings-win.data.microsoft.com
    • arc.msn.com
    • v10.events.data.microsoft.com
    • v20.events.data.microsoft.com
    • activity.windows.com

How to reproduce the fix

# On each Pi-hole (ssh pihole / ssh manticore):
docker exec pihole pihole-FTL sqlite3 -ni /etc/pihole/gravity.db "
  INSERT INTO [group] (name, description, enabled) VALUES ('Xbox', 'Xbox console - relaxed blocking for gaming', 1);
  INSERT INTO client (ip, comment) VALUES ('3C:FA:06:C7:D0:09', 'Xbox Series X');
  INSERT INTO client_by_group (client_id, group_id) SELECT c.id, g.id FROM client c, [group] g WHERE c.ip = '3C:FA:06:C7:D0:09' AND g.name = 'Xbox';
"

# For each domain:
for domain in settings-win.data.microsoft.com arc.msn.com v10.events.data.microsoft.com v20.events.data.microsoft.com activity.windows.com; do
  docker exec pihole pihole-FTL sqlite3 -ni /etc/pihole/gravity.db "
    INSERT INTO domainlist (type, domain, comment, enabled) VALUES (0, '$domain', 'Xbox gaming - unblock for menu responsiveness', 1);
    DELETE FROM domainlist_by_group WHERE domainlist_id = (SELECT id FROM domainlist WHERE domain = '$domain' AND type = 0) AND group_id = 0;
    INSERT INTO domainlist_by_group (domainlist_id, group_id) SELECT d.id, g.id FROM domainlist d, [group] g WHERE d.domain = '$domain' AND d.type = 0 AND g.name = 'Xbox';
  "
done

docker exec pihole pihole reloadlists

Diagnostic Commands

# Find blocked domains for the Xbox
ssh pihole "docker exec pihole grep '10.0.1.47' /var/log/pihole/pihole.log | grep blocked"

# Check if a domain is on a blocklist
ssh pihole "docker exec pihole pihole -q <domain>"

# List all unique domains queried by Xbox
ssh pihole "docker exec pihole grep 'query\[A\] ' /var/log/pihole/pihole.log" | grep '<XBOX_IP>' | awk '{print $6}' | sort -u

# Verify Xbox whitelist
ssh pihole "docker exec pihole pihole-FTL sqlite3 -ni -header -column /etc/pihole/gravity.db \"
  SELECT d.domain, g.name FROM domainlist d
  JOIN domainlist_by_group dbg ON d.id = dbg.domainlist_id
  JOIN [group] g ON dbg.group_id = g.id WHERE d.type = 0 AND g.name = 'Xbox';
\""

Lessons Learned

  1. Xbox/console games make synchronous network calls to telemetry domains during UI operations — blocking these causes visible hangs, not silent failures
  2. Pi-hole blocking returns 0.0.0.0 which is a valid IP — the client gets a DNS response but then TCP-connects to nothing and waits for timeout. This is worse than NXDOMAIN for latency.
  3. Use MAC addresses for Pi-hole client entries instead of IPs — consoles frequently change IPs via DHCP
  4. Always check both Pi-holes — with HA DNS, the Xbox may hit either one depending on which responds first
  5. Look for rapid retry patterns in the logs (same domain queried every 1-3 seconds) as a signal that something is being blocked and causing timeout loops