Passer au contenu

Nous améliorons nos opérations pour mieux vous servir. Les commandes sont expédiées normalement depuis Laval, QC. Questions? Contactez-nous

Bitcoin accepté au paiement  |  Expédié depuis Laval, QC, Canada  |  Soutien expert depuis 2016

PUBLIC_POOL_REG Warning

Public Pool Miner Not Registering on Umbrel Node

Miner reports `Pool: Connected` but the self-hosted Public Pool dashboard on Umbrel (or Start9 / RaspiBlitz / standalone Docker) shows `0 workers online`. The Stratum handshake either never reached the pool, never completed authorization, or the public-pool-ui is reading from a different state than the stratum daemon. Almost always one of: wrong port (`2018` not `3333`), wrong stratum host (use LAN IP, not `umbrel.local`), Umbrel firewall / Docker port mapping broken, Tor-only Bitcoin Core blocking RPC, public-pool container crashed, Bitcoin Core still in IBD, invalid Stratum User address, or NAT loopback / VLAN segmentation.

Warning — Should be addressed soon

Affected Models: Bitaxe Supra, Bitaxe Ultra, Bitaxe Gamma, Bitaxe GT, Bitaxe Hex, Bitaxe Max; NerdAxe, NerdNOS, NerdQAxe, NerdQAxe++; Antminer S9 / S17 / S19 / S21 series repointed at home Public Pool; any Stratum V1 client targeting a self-hosted Public Pool instance on Umbrel, Start9, RaspiBlitz, or bare Docker

Symptoms

  • Miner UI (AxeOS / ESP-Miner / NerdAxe firmware / Antminer dashboard) shows `Pool: Connected` with normal hashrate counter
  • Public Pool web dashboard at `http://<umbrel-ip>:2019` shows `0 workers online` for the configured BTC address
  • AxeOS log shows `Connected to pool` followed by silence — no `mining.notify` work received
  • Miner falls back to its built-in Fallback Stratum Host (`solo.ckpool.org`, `public-pool.io`) within 30-90 seconds and starts hashing externally
  • `sudo docker logs public-pool_pool_1` shows repeated `Error getmininginfo Error: ESOCKETTIMEDOUT`
  • `sudo docker ps` does NOT show a `public-pool` container, OR shows it `Restarting` / `Exited (1)`
  • `sudo ss -tlnp | grep 2018` shows the listener bound to `127.0.0.1:2018` (loopback only) instead of `0.0.0.0:2018`
  • `bitcoin-cli getblockchaininfo` shows `initialblockdownload: true` (Bitcoin Core still syncing)
  • `umbrel.local` works in a laptop browser but the miner's DNS resolver returns NXDOMAIN
  • Umbrel runs in Tor-only mode (`onlynet=onion` in `bitcoin.conf`) and Public Pool's RPC backend cannot reach `bitcoind`
  • Stratum User field contains a Lightning address, an email, or anything that doesn't parse as a valid mainnet on-chain BTC address
  • Miner and Umbrel are on different VLANs / Wi-Fi networks with AP isolation enabled, no inter-VLAN ACL for TCP 2018
  • Miner is configured with the WAN public IP and the consumer router doesn't support NAT loopback / hairpin NAT

Step-by-Step Fix

1

Open the miner's web UI in a browser. Bitaxe / NerdAxe / NerdQAxe: navigate to the device's LAN IP. Antminer pointed at home: log into the Bitmain dashboard. Find the Pool / Stratum / Settings page and locate the four classic Stratum V1 fields: URL, Port, User (Worker), Password. You're rewriting all four in the next steps.

2

Set Stratum URL to the LAN IP of your Umbrel node — NOT `umbrel.local`. Find the IP from your router's DHCP client list or from Umbrel's Settings → Advanced. Example: `192.168.0.98`. Do NOT include `stratum+tcp://`, `http://`, `https://`, or any trailing slash. Just the IP. Pin this IP via DHCP reservation in your router so it doesn't move.

3

Set Stratum Port to `2018`. This is non-negotiable on the default Umbrel Public Pool config. Not `3333` (that's `solo.ckpool.org`'s port and Bitaxe's factory default), not `21496` (that's the hosted `public-pool.io`), not `8332` (that's bitcoind RPC). `2018` is the Public Pool stratum port on Umbrel.

4

Set Stratum User (Worker) to a real on-chain BTC address. Generate a fresh receive address in Sparrow Wallet, Electrum, Blue Wallet, or a hardware wallet (Coldcard, Jade, Trezor). Must start with `bc1q`, `bc1p`, `3`, or `1`. Must NOT contain `@`, must NOT be a Lightning address, must NOT be an email. Optional worker suffix: one literal dot, lowercase alphanumerics and hyphens only — e.g. `bc1qxyz...abc.bitaxe-garage-01`.

5

Set Stratum Password to `x`. Public Pool ignores this field for solo address-auth; `x` is the legacy stratum placeholder. Don't put your wallet seed here, don't put a real password, just `x`. Save the miner config and full-power-cycle the device (10 seconds off, then on). Wait 60 seconds. Open `http://<umbrel-ip>:2019` and search for your address — your worker should appear.

6

If the worker still does not appear after 2 minutes, restart the Public Pool app from the Umbrel App Store: Apps → Public Pool → Restart. Wait for the green Running badge. Recheck the dashboard. If still nothing, escalate to Tier 2 (SSH diagnostics).

7

SSH into Umbrel: `ssh umbrel@<umbrel-ip>`, password is what you set during onboarding (default `moneyprintergobrrr` if unchanged — change it). Windows users: install OpenSSH client or PuTTY. Mac/Linux: ssh is built in. Then run `sudo docker ps | grep public-pool`. Confirm a container with status `Up X minutes` and ports `0.0.0.0:2018->2018/tcp`. If absent or `Restarting`, the app is not running — reinstall from the App Store.

8

Read the container logs: `sudo docker logs --tail 200 public-pool_pool_1` (substitute the container name from `docker ps` if different). Look for: `Error getmininginfo Error: ESOCKETTIMEDOUT` (bitcoind RPC unreachable, see Step 10), `ECONNREFUSED` to `:8332` (bitcoind not listening, see Step 10), `EADDRINUSE :::2018` (another process owns port 2018, see Step 11), `initialblockdownload: true` (Bitcoin Core still syncing, see Step 9). The first error line tells you exactly what to fix.

9

Verify Bitcoin Core is fully synced: `bitcoin-cli getblockchaininfo`. You need `chain: "main"`, `initialblockdownload: false`, and `verificationprogress` very close to 1.0. If `initialblockdownload: true`, the only options are: wait it out (1-7 days on consumer hardware), point Public Pool at an already-synced external node, or use the hosted `public-pool.io:21496` until your local node is ready. Public Pool cannot construct block templates against an unsynced chain.

10

Confirm RPC reachability between Public Pool and Bitcoin Core. Edit `~/umbrel/app-data/bitcoin/data/bitcoin/bitcoin.conf`: ensure `rpcallowip=172.16.0.0/12` (Public Pool's Docker network) and `rpcbind=0.0.0.0:8332`. If your config has `onlynet=onion`, that's Tor-only mode — Public Pool's clearnet RPC will fail. Either remove `onlynet=onion` (privacy trade-off) or run Public Pool against a separate clearnet bitcoind. Restart Bitcoin Core after any config change: Umbrel App Store → Bitcoin → Restart.

11

Test the stratum listener from another LAN host (your laptop, NOT the Umbrel itself): `nc -v <umbrel-ip> 2018` on Linux/macOS, or `Test-NetConnection -ComputerName <umbrel-ip> -Port 2018` on Windows PowerShell. Expected: `Connected to <umbrel-ip>`. If `Connection refused`, the listener is not bound externally — restart the app. If `Connection timed out`, a firewall is dropping the packet — check `sudo iptables -L -n | grep 2018` on Umbrel and your router's firewall rules. If `host not found`, the IP is wrong — recheck Step 2.

12

Verify port 2018 is bound to all interfaces, not just loopback: `sudo ss -tlnp | grep 2018` on the Umbrel. You want `LISTEN 0.0.0.0:2018`. If you see `127.0.0.1:2018`, the container is loopback-only and unreachable from the LAN — restart the Public Pool app to refresh the port mapping. If a different process owns 2018 (rare), stop that process or relocate Public Pool to a different host port via custom Docker compose override.

13

Pin a static LAN IP for your Umbrel via DHCP reservation in your router. Reserve the Umbrel's MAC address to a specific IP (e.g. `192.168.0.98`). Reboot Umbrel. Confirm the IP didn't change. Update the miner config to the pinned IP. This is the single most-effective preventive against intermittent `umbrel.local` mDNS failures and the resulting `worker disappeared from pool` problem.

14

If miner and Umbrel are on different VLANs / Wi-Fi networks, open an inter-VLAN ACL for TCP 2018. On Unifi: Settings → Routing & Firewall → Firewall → LAN IN → Add Rule → Allow TCP 2018 from miners-VLAN to services-VLAN on `<umbrel-ip>`. On pfSense / OPNsense: Firewall → Rules → add corresponding pass rule. Test with `nc -v` from a host on the miners VLAN before pointing the Bitaxe — confirm the connection passes the inter-VLAN firewall.

15

If Tier 1-2 are clean but the worker still doesn't register, run a packet capture on the Umbrel during a miner reboot: `sudo tcpdump -i any -n -w /tmp/pubpool.pcap 'tcp port 2018'` for 60 seconds. Move the pcap to a workstation, open in Wireshark, follow the TCP stream. You should see SYN, SYN-ACK, ACK from the miner's IP, then JSON-RPC `mining.subscribe`, `mining.authorize`, `mining.notify`. If the JSON-RPC never arrives, the miner is being blocked at the application layer — capture the rejection reason from `docker logs` and file on https://github.com/benjamin-wilson/public-pool/issues with both artifacts.

16

Stop DIY and escalate. Container is running, port is reachable from miner's network, BTC address is valid on-chain, Bitcoin Core is synced, packet capture shows clean stratum on the wire — and the dashboard still shows 0 workers. That is a public-pool application bug, not your config. Open a D-Central support ticket at https://d-central.tech/contact/ with screenshots of: miner Stratum config, `sudo docker ps | grep public-pool` output, last 100 lines of `sudo docker logs public-pool_pool_1`, and `bitcoin-cli getblockchaininfo`. We see this pattern weekly and will triage it inside one ticket.

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.