AnySec
Private Anycast for a Crypto Exchange: When Your Own Health Checks Take You Fully Offline
← InsightsInfrastructure · 7 min read

Private Anycast for a Crypto Exchange: When Your Own Health Checks Take You Fully Offline

Meta's October 2021 outage wasn't an attack or a hijack — it was a correctly designed health check withdrawing every BGP route at once. The failure mode private Anycast owners have to design against themselves.

By AnySec EngineeringAnySec engineering

The short answer

On October 4, 2021, Meta's DNS servers did exactly what they were built to do: when they lost the ability to reach Meta's own data centers, they withdrew their BGP route advertisements, because unreachable-backbone is normally a sign that a location shouldn't be advertising routes at all. The problem was that on that day, every location lost that connectivity at once, because the backbone itself had gone down during a maintenance operation. Every DNS server, everywhere, correctly declared itself unhealthy and pulled its routes simultaneously — and for about 5.5 hours, the rest of the internet had no way to find Meta's DNS servers to resolve facebook.com, instagram.com, or whatsapp.com. No attacker, no hijack, no capacity shortfall. The safety mechanism worked. That's what took them offline.

Anyone running a private Anycast network builds the same category of mechanism — a health check that pulls a PoP's routes when something's wrong locally — because without it, a broken PoP keeps silently swallowing traffic (a "black hole") instead of failing over. The Meta incident is the canonical proof that the same mechanism, if its failure signal isn't independent per PoP, can turn a partial problem into a total one.

Who this is for

Head of Infrastructure or a network engineering lead at a crypto exchange that already owns, or is building, a private Anycast network — someone who has reasoned through DDoS mitigation-priority contention on a shared edge and BGP-hijack defense via RPKI, and is now asking the question those two don't cover: what happens when the outage is caused by our own failover logic, correctly executing, against a failure condition nobody modeled correctly.

It's not for evaluating whether to own a private Anycast network at all — that decision, and the account-ban, jurisdictional, and cost reasoning behind it, is covered in building a private Anycast edge from scratch. It's also not about a third party's failure: for mitigation-queue contention during a shared-edge DDoS event, see private Anycast for a crypto exchange: when shared DDoS protection isn't enough; for an attacker forging ownership of your address space, see private Anycast for Web3 infrastructure: the BGP hijack DDoS protection misses. This post is about the one failure mode that's entirely internal: the automation you build once you own the network.

What actually happened on October 4, 2021

Meta's own engineering team published a detailed account of the outage. The relevant mechanism, in their words:

"To ensure reliable operation, our DNS servers disable those BGP advertisements if they themselves can not speak to our data centers, since this is an indication of an unhealthy network connection. In the recent outage the entire backbone was removed from operation, making these locations declare themselves unhealthy and withdraw those BGP advertisements."

Cloudflare, watching from outside as an independent network operator, corroborated the timeline from its own BGP and DNS telemetry: routing instability began around 15:40 UTC, Facebook's DNS prefixes stopped being announced by 15:58 UTC, and Cloudflare's own 1.1.1.1 resolver saw traffic spike to roughly 30x normal volume as applications and users everywhere retried failed lookups. Routes reappeared starting around 21:00 UTC, peaking at 21:17 UTC, with full DNS availability restored by 21:28 UTC — a disruption window of roughly 5.5 hours.

What happened
TriggerA maintenance command intended for local backbone capacity assessment instead disconnected Meta's entire backbone network from the internet
Health-check behaviorDNS servers, unable to reach the data centers, correctly judged themselves unhealthy per their own design and withdrew their BGP route advertisements
Blast radiusBecause every location's health check was answering the same underlying question — "can I reach the backbone?" — every location failed it at the same time
Observable effectNo attacker, no hijack, no capacity shortfall; the rest of the internet simply had no route to Meta's DNS servers, so nothing resolved
Duration~5.5 hours (approx. 15:50–21:20 UTC), independently confirmed by Cloudflare's outside BGP/DNS telemetry

Two independent accounts — the operator's own postmortem and a separate network's outside-in telemetry — agree on the mechanism and the timeline. Neither attributes the outage to malicious activity.

Why this isn't the same risk as a DDoS queue or a hijack

The two other Private Anycast risk models already published both involve someone or something outside the organization: a shared-tenant edge's mitigation queue during someone else's attack, or an attacker with no relationship to the business forging a route announcement for IP space they don't own. Both are defended by the same move — own the ASN, own the prefix, own the response.

This one is different in kind. Owning the ASN and the PoPs doesn't remove this risk; it's what creates the surface for it, because someone on the team now has to write the exact logic that decides when a PoP is unhealthy enough to stop announcing its routes. A hyperscaler CDN customer never has to reason about this — the provider's failover automation is the provider's problem. Once a business runs its own Anycast edge, that automation, and every assumption baked into it, belongs to the business.

What a well-designed failover setup does differently

The Meta incident points to two concrete design questions worth answering before a private Anycast network carries live traffic, not after an incident forces the question:

  1. Is the health signal actually local? A check that tests "is the service I'm serving from this PoP responding correctly" fails independently per PoP. A check that tests "can this PoP reach some shared central dependency — a control plane, a config service, a backbone hop" fails everywhere at once if that shared dependency goes down, even though every individual PoP might otherwise be perfectly capable of serving traffic.
  2. Is there a circuit breaker on the withdrawal action itself? If the automation sees more than some threshold share of PoPs try to withdraw within a short window, that pattern is itself the anomaly — a real, independent, PoP-by-PoP failure at every location simultaneously is vastly less likely than the health-check signal itself being wrong or its dependency being down. Pausing automatic withdrawal past that threshold and paging a human is a deliberate trade: slightly slower response to a genuinely widespread outage, in exchange for not amplifying a shared-dependency failure into a total one.

Neither of these is a purchasable feature — they're decisions that have to be designed into the failover and health-check configuration during setup, then proven under a fault-injection exercise that deliberately simulates a shared-dependency failure, not just a single-PoP failure, before the network goes live.

What's delivered, and what it doesn't include

A private Anycast engagement follows the same methodology regardless of which risk motivated the buyer:

  • PoP location selection based on the exchange's actual traffic profile
  • ASN registration and IP-block (IPv4/IPv6) coordination
  • Anycast announcement and BGP setup across the selected PoPs
  • Failover and health-check configuration
  • Fault-injection and throughput validation before sign-off

That's the Global Private Anycast Network Setup engagement. The fault-injection step is where a correlated-failure scenario — simulating loss of a shared dependency across every PoP at once, not just killing one PoP in isolation — belongs, precisely because a single-PoP failure test would never have caught the October 2021 failure mode. Ongoing monitoring of the health-check and withdrawal logic itself, as distinct from monitoring the network's uptime, is an operations-retainer responsibility rather than a one-time setup deliverable.

Limitations

This isn't a claim that health checks or automated failover are the wrong design — the alternative, no automated withdrawal at all, means a broken PoP silently black-holes traffic instead of failing over, which is a worse outcome in the far more common single-PoP-failure case. The argument here is narrower: the failure signal and the withdrawal logic both need to account for correlated, shared-dependency failure, not just independent per-PoP failure, and that has to be deliberately designed and tested rather than assumed. It's also not a claim that this specific incident happened to a crypto exchange, or that AnySec has observed this failure mode in a client's network — it's a documented, two-source-verified incident at a different kind of large-scale network operator, used here because it's the clearest public example of the mechanism, not because the underlying risk is exchange-specific. The mechanism applies to any organization running its own Anycast failover automation, regardless of industry.

Decision: does your failover logic have an independent-per-PoP failure signal and a withdrawal circuit breaker?

If the honest answer is "our health check tests something all our PoPs depend on equally" or "we've never tested what happens if every PoP tries to withdraw at the same time," that's worth resolving before it gets discovered during a real incident rather than a fault-injection exercise. Request a network design review and we'll scope PoP locations, failover logic, and a fault-injection plan that specifically tests correlated-failure scenarios against your actual traffic profile.

Sources and review

The mechanism and cause of Meta's October 4, 2021 outage are drawn directly from Meta Engineering's own account, "More details about the October 4 outage", quoted above. The timeline — routing instability beginning around 15:40 UTC, route withdrawal confirmed by 15:58 UTC, a ~30x spike in 1.1.1.1 resolver traffic, renewed BGP activity peaking at 21:17 UTC, and full DNS availability by 21:28 UTC — is drawn directly from Cloudflare's independent analysis, "Understanding How Facebook Disappeared from the Internet", based on Cloudflare's own outside-in BGP and DNS telemetry. Both sources were fetched and quoted directly for this post, not taken from a secondary summary. Anycast methodology and deliverables reflect AnySec's own published service terms; no AnySec-original attack, cost, or incident statistic is cited in this post. Author: AnySec Engineering. Published 2026-09-16; last reviewed 2026-09-16.


Related reading

Rather not learn this in production.

Talk to the engineers behind these write-ups — no sales script, a straight read on where you stand.

Get a fixed quote