NerdMiner – solo.ckpool.org DNS Resolution Failure
Warning — Should be addressed soon
Symptoms
- OLED / TFT shows `Pool: Connecting…` for 10+ minutes after WiFi connects, never transitions to `Connected`
- Serial console at `115200 baud` shows `getaddrinfo failed` or `lwip_getaddrinfo: 1` against `solo.ckpool.org`
- Local hashes accumulating but `Valid shares` and `Best diff` stay at zero forever
- BTC price and block-height tickers update normally — only the pool stratum hostname does not resolve
- `nslookup solo.ckpool.org` from a desktop on the same LAN returns NXDOMAIN, only `AAAA`, or a clearly-wrong IPv4
- You added a Pi-hole, AdGuard Home, NextDNS, or VPN around the same time the Nerdminer stopped working
- Your ISP recently rolled out IPv6 (Bell Fibe, Rogers Ignite, Telus, Comcast, AT&T, BT, Vodafone)
- Multiple Nerdminer units on the same network show identical `Connecting…` stuck state
- Hardcoding the CKPool IPv4 into the firmware makes worker registration succeed within 60 seconds
- Nerdminer worked for weeks then stopped — no firmware change, no pool change
- Other devices on the same LAN reach `solo.ckpool.org` cleanly (laptop, Raspberry Pi, Antminer)
- Home router DNS is set to ISP defaults
- Reboot of the Nerdminer alone does not clear the issue — only a router or DNS change does
Step-by-Step Fix
Cold power-cycle the Nerdminer for 30 full seconds — pull the USB cable, wait 30 seconds for capacitors to drain and the ESP32 LWIP DNS cache to fully clear, then reconnect. Five seconds is not enough — LWIP DNS table state can persist in SRAM longer than expected and a soft reboot does not always wipe it. This single step fixes the 'DNS cache wedged after a router reboot' pattern that bites operators who restart network gear without restarting the miner. If the worker registers within 60 seconds of power-up, you are done.
Verify the pool hostname spelling and TLD letter-by-letter. Open the Nerdminer's WiFi config portal (5-second BOOT button hold puts most boards into AP mode for re-config). Inspect the pool URL field. Compare letter-by-letter to `solo.ckpool.org`. Common typos: `solockpool.org`, `solo.ckpool.com` (wrong TLD), `solo.ckpool.org/` (trailing slash breaks parsing on some firmware builds). A single missing or extra character produces NXDOMAIN every time, and the config portal does not validate the hostname before saving.
Confirm the port is `3333`, not `21496` or `4334`. `solo.ckpool.org` listens on port `3333` for stratum. `21496` is `public-pool.io`. `4334` is some braiins variants. Pasting the wrong port from a guide written for a different pool is the second most common operator error at the Nerdminer setup screen — DNS resolves fine but the TCP socket connects to nothing on the wrong port and the firmware logs a generic 'connection failed' that looks identical to a DNS issue.
Switch to a known-good public pool as a sanity check. Temporarily change the pool URL to `public-pool.io` with port `21496` and a worker name `<your-bc1q-segwit-address>.nerdminer`. Public-Pool is permissive about workers and well-known clean DNS-wise. Cold-cycle the miner. If the worker registers at Public-Pool but not at `solo.ckpool.org`, the issue is specifically DNS resolution of `solo.ckpool.org` from your network — and the fix is router DNS or hardcoded IP.
Check the worker / address format. `solo.ckpool.org` requires your own Bitcoin address as the worker name (anything you mine to is paid directly to that address — no account, no signup). Use a `bc1q…` SegWit address. Do NOT use a `bc1p…` Taproot address — CKPool's payout path historically rejects bech32m / Taproot. Do NOT use a Lightning address. Wrong address format produces an immediate disconnect that can look like DNS failure if you were not watching the serial log carefully.
Change router DNS to Cloudflare (`1.1.1.1` and `1.0.0.1`) or Quad9 (`9.9.9.9` and `149.112.112.112`). Log into your router admin (typically `http://192.168.1.1`). Find DNS settings under WAN, Internet, or Network. Replace ISP defaults with Cloudflare or Quad9 primary + secondary. Save. Reboot the router, then cold-cycle the Nerdminer for 30 seconds so it picks up the new DNS via DHCP. ISP DNS is the single most common cause of intermittent Nerdminer DNS failures — Cloudflare and Quad9 are free, fast, and do not hijack `NXDOMAIN`.
Disable DNS-rebinding protection on the router or allow-list `solo.ckpool.org`. Many consumer routers (UniFi, ASUS, Netgear, eero, OPNsense, pfSense) enable DNS-rebinding protection by default — silently filtering DNS responses where a public hostname resolves to an RFC1918 IP. Find the setting under Security or Firewall. Either disable globally or add an exception for `solo.ckpool.org` and `*.ckpool.org`. Pi-hole / AdGuard Home / NextDNS users: open the query log, search `solo.ckpool.org`, confirm no 'crypto,' 'mining,' or 'P2P' category is blocking it. Allow-list explicitly.
Hardcode the CKPool IPv4 into the NerdMiner_v2 pool config. From a desktop on the same LAN, run `nslookup solo.ckpool.org 1.1.1.1` to get the current authoritative IPv4. In the Nerdminer's config portal, replace `solo.ckpool.org` with the bare IPv4. Save and reboot. The worker should register within 60 seconds. CKPool's IP set is stable for weeks at a time — refresh the hardcoded IP every month or two via `nslookup` and update the firmware config. Bulletproof way to remove DNS entirely from the Nerdminer's path.
Set a DHCP reservation for the Nerdminer with explicit DNS pushed. In your router's DHCP table, find the Nerdminer's MAC (look for hostname `nerdminer-xxxx`, `T-Display-S3`, or an Espressif OUI). Reserve a fixed IP. In advanced DHCP options, push specific DNS servers (Cloudflare, Quad9) directly to that reservation. Bypasses any ISP-gateway-level DNS hijacking and ensures the Nerdminer always lands on the same IP — handy for monitoring scripts and for telling at a glance which board is which.
Verify with `nslookup` from the same LAN before and after the router DNS change. Run `nslookup solo.ckpool.org 192.168.1.1` (querying your router) and compare against `nslookup solo.ckpool.org 1.1.1.1` (querying Cloudflare directly). If the router returns a different IP than Cloudflare, the router is rewriting DNS — fix the router config or bypass it with the DHCP-reservation trick in step 9. If the router returns the same IP as Cloudflare and the Nerdminer still fails, the issue is firmware-side (Tier 3) not network-side.
Reflash the latest stable NerdMiner_v2 via the official web-flasher at `https://bitmaker-hub.github.io/NerdMiner_v2/`. Connect a USB **data** cable (charge-only cables will not enumerate) to a Chrome or Edge browser. Select the correct board variant from the dropdown — `T-Display-S3`, `T-Dongle-S3`, `ESP32-2432S028R` (CYD), `ESP32-WROOM-32`, M5StickC, etc. Wrong board variant = wrong pinout = bricked TFT or no boot. Click 'Erase Flash' before reflashing — wipes NVS, old WiFi credentials, old pool config, and any wedged LWIP DNS state. Then flash the latest stable `.bin` for your board.
Capture a serial boot log at `115200 baud`. USB data cable, serial terminal (PuTTY on Windows, `screen /dev/ttyACM0 115200` on Linux/macOS, Arduino Serial Monitor cross-platform). Reboot the Nerdminer. Save the first 60 seconds of output. Search for these lines: `WiFi connected`, `[NTP]`, `lwip_getaddrinfo:`, `[POOL]`. The error code on `lwip_getaddrinfo` tells you the failure class: `1` = no such host (NXDOMAIN), `11` = would-block / retry timeout (DNS server too slow), `4` = name truncated (typo or buffer issue). Cross-reference the ESP-IDF LWIP API docs.
Run a stratum proxy on your LAN to take public DNS out of the Nerdminer's path entirely. Options: `cgminer --proxy`, `stratum-mining-proxy`, or a Raspberry Pi running a small Node.js or Go relay. Point the Nerdminer at the proxy's bare IPv4 and a local port (e.g. `192.168.1.50:3333`). The proxy resolves `solo.ckpool.org` using the host OS's resolver (full IPv6 support, larger cache, proper retry logic), then forwards stratum to the Nerdminer over a bare-IP socket. If shares get through via the proxy but not direct, the issue is 100% the Nerdminer's LWIP DNS resolver — not CKPool, not credentials. Right architecture for 3+ Nerdminers.
Test for IPv6-only `AAAA` records and force IPv4 at the resolver. Run `dig solo.ckpool.org A @1.1.1.1` and compare to `dig solo.ckpool.org AAAA @1.1.1.1`. CKPool publishes both `A` and `AAAA` records — if your specific resolver path is only returning `AAAA`, that is the trap. Two fixes: (a) hardcode the IPv4 found via Cloudflare's resolver into the Nerdminer firmware, (b) change router DNS to a resolver that returns `A` records preferentially (Cloudflare and Quad9 both do). If both `A` and `AAAA` come back from Cloudflare but you still see IPv6-only behavior, your router is filtering responses.
Audit your DNS-blocking layer for over-blocking. Pi-hole admin → Query Log; AdGuard Home → Filtering → Logs; NextDNS → Logs. Search for `ckpool.org`. If it shows blocked (red), check which list flagged it. Common offenders: NextDNS's 'crypto' category, certain hagezi or OISD blocklist subcategories on Pi-hole / AdGuard. Allow-list `*.ckpool.org` explicitly. Also check for wildcard rules (`*.io`, `*.org`) in custom block lists that might catch legitimate pools — over-broad regex is a common cause of 'I added a blocklist last week and now my Nerdminer broke' tickets.
Stop DIY and contact D-Central support when (a) you have reflashed the latest stable NerdMiner_v2 twice with 'Erase Flash' between attempts, hardcoded the CKPool IPv4, switched router DNS to Cloudflare, and allow-listed `solo.ckpool.org` on every DNS-blocking layer — and DNS still fails; (b) the serial log shows `lwip_getaddrinfo` errors even when the Nerdminer config contains a hardcoded IPv4 (impossible mode pointing at corrupted flash, partition-table damage, or LWIP regression); (c) multiple Nerdminer units on the same network all fail DNS simultaneously while desktops resolve cleanly. The D-Central Discord and `BitMaker-hub/NerdMiner_v2` issue tracker are both right escalation channels.
What D-Central does at this point: bench-side reproduction with identical Nerdminer board variant (T-Display-S3, T-Dongle-S3, CYD on the bench), identical NerdMiner_v2 firmware build, controlled network with known-good DNS, full serial trace including `CONFIG_LWIP_DEBUG` output if needed (custom build with debug flags). If we reproduce the failure, we file an issue against `BitMaker-hub/NerdMiner_v2` with the trace and a reproducer. D-Central stocks the full Nerdminer family and contributes back to the open-source pleb-mining ecosystem — maintainers triage hardware-grade reports faster than vague tickets.
Ship to D-Central if you want bench-grade diagnosis. Anti-static bag, padded mailer or small box. Include a note: Nerdminer board variant (T-Display-S3 / T-Dongle-S3 / CYD / M5StickC / other), firmware version, pool URL exactly as configured, photo of the config portal, your router make/model, and what you have already tried. We test on a controlled bench network, isolate firmware-vs-network-vs-hardware, return with a full report. Most 'Nerdminer DNS fail' tickets close without hardware repair because the issue is upstream — but bench reproduction proves it definitively. Turnaround typically 3–7 business days for diagnostic-only tickets.
When to Seek Professional Repair
If the steps above do not resolve the issue, or if you are not comfortable performing these repairs yourself, professional service is recommended. Attempting advanced repairs without proper equipment can cause further damage.
Related Error Codes
Still Having Issues?
Our team of Bitcoin Mining Hackers has been repairing ASIC miners since 2016. We have seen it all and fixed it all. Get a professional diagnosis.
