⚠️ NO WARRANTY. READ THIS BEFORE YOU ACT ON ANYTHING BELOW.
These are field notes, not a product. Following them can permanently destroy hardware, permanently lock SIM cards, and cause radio transmission on licensed spectrum. You are responsible for what your equipment transmits and for the laws where you are. ⛔ A private cell cannot complete emergency calls — see the 911 warning below. Nothing here is legal advice.
AT&T shut down its UMTS network on 2022-02-22. The MicroCell femtocells sold to customers to fix indoor coverage stopped being able to do their job that day, and they have been landfill-priced ever since — routinely under $15, often under $10.
They are not landfill. Underneath the Cisco badging they run ip.access femtocell firmware, they speak Iuh natively, and every value that binds one to AT&T ships as an editable placeholder. Pointed at an open-source core, one becomes a private UMTS cell.
What has actually been made to work
Two devices, both taken end to end here, against the same Osmocom core (
osmo-hnbgw+osmo-msc+osmo-mgw+osmo-hlr):
- A Cisco DPH-151 as a private UMTS cell carrying voice, SMS and packet data for four handsets — 2.31 Mbit/s down, 0.28 Mbit/s up, measured — and recovering unattended from a power cut in about 16 minutes. →
docs/BRINGUP.md- An ip.access nano3G S8, taken from a sealed, un-commissioned box through factory reset, commissioning, root, an Iuh transplant and first light, to a second cell carrying voice alongside the first, carrying voice and packet data. →
docs/BRINGUP-NANO3G.md⭐ Packet data works on both —
osmo-sgsn+osmo-ggsn, real PDP contexts, real throughput. The traps that cost the most there are core-side, not radio-side — 62, 63 and 64.Independently, a DPH-153AT has been reported registering with
osmo-hnbgwand radiating UMTS after IPsec was disabled and its hardcoded NTP and HNB-GW addresses were repointed (Osmocom Discourse,tempest). Reported, not reproduced here —docs/BRINGUP-DPH153.md.✅ The DPH-154 HAS a working route in — no memory-corruption exploit, no JTAG, no case opening, no serial console. You stand up the management server it is already looking for (its own
REDIRECTOR_URLnames the host and the port), and then write one CWMP field that the device copies into its root-sourced environment file with no escaping. ⭐ It rides the session the device OPENS TO YOU, so the unit’s total inbound firewall never comes into it. Access is solved. The RADIO is separately gated by a per-unit tamper bit, SET on the unit measured here — so the final phase is unproven and is labelled as such.docs/BRINGUP-DPH154.md.📌 This line read “no known route in” until 2026-09-16. The guide it points at had already been corrected; these citations had not. ⭐ A correction that updates one mention of a fact leaves the others reading as confirmation — and the stale copy was on the front page.
⭐ The nano3G is not a footnote here. It is ip.access’s own product — the thing Cisco badged — and it is the reference for the software half of every model in this repo. Where the two differ, both are stated. It costs $180–200 against the MicroCell’s $10, and
docs/ALTERNATIVES.mdcovers when that is worth paying.
This repo is the write-up: what these devices are, how to get into one, how to bring it
up, and — most valuable of all — the failure modes that cost us days, in
docs/TRAPS.md.
Yes, if you want a small private 3G cell for handsets you already own, you are comfortable with a serial console and a Linux shell, and you can operate it legally where you live.
No, if you need LTE or 5G (these are UMTS-only), if your handsets are Band 1 (2100 MHz
— most of Europe and the UK), or if you cannot transmit legally. See
docs/ALTERNATIVES.md before buying anything.
These are UMTS Band 2 (1900 MHz PCS) and Band 5 (850 MHz Cellular) devices, and neither band is vacant. Read the “Before you transmit: spectrum” section below before you power a radio — it is the section this repo would most like you to not skip.
⚠️ One temptation worth naming here: Band 5 propagates roughly 7 dB better than Band 2, which makes it exactly the wrong thing to reach for when coverage disappoints. Better propagation is less containment.
A handset that camps onto your cell will try to place 911 / 112 / 999 calls through it, and they will not complete. The handset shows the user no warning and no indication: it displays bars, it looks like service, and the call fails when it matters most.
⛔ This is not fixable with configuration. A private core has no route to an emergency services network, and there is no setting that makes one appear.
⇒ ⭐ So the containment rule is not only about spectrum. Use programmed SIMs you control, minimum transmit power, and physical containment, so that no handset you do not control can camp onto it. ⚠️ Band 5 propagates ~7 dB better than Band 2 — better propagation is more strangers’ handsets, not just more coverage.
☠️ If anyone in the building might rely on a phone to call for help, do not run the cell. This is the most dangerous property of a private cell and it is the one most easily forgotten, because nothing ever reports it as an error.
📌 Containment that actually works, and the closed-access settings that keep strangers off:
docs/LEGAL.md.
A unit that ran on AT&T may still carry MCC/MNC 310-410 in its live configuration.
Broadcasting that is impersonating a real network operator. Use a test PLMN — 999-99
is ITU-reserved for exactly this and is what we use throughout; 001-01 is the 3GPP
test network. Change it before you enable the radio, and verify it on the air rather
than in the database (see docs/TRAPS.md — the device has a trap here
where the database and the broadcast disagree).
| item | note |
|---|---|
| DPH-151 / 153 / 154 | typically $8–15 used. Confirm the PSU is included. |
| 12 V DC PSU | read the voltage off the unit’s label — do not guess. |
| 3.3 V USB↔UART adapter | buy a 3.3 V-only part so a 5 V mistake is impossible. |
| Ethernet cable | — |
| GPS antenna | probably not needed — see docs/HARDWARE.md. If you do fit one it must be active; a passive antenna will not lock and the failure is indistinguishable from the interlock being unbeatable. |
| a core network | free software, but you need a machine to run it on |
You need SIMs you can program, so handsets treat your cell as home rather than as a roaming network. Two items, and neither is exotic:
| item | what | note |
|---|---|---|
| Blank writable USIMs | e.g. Gialer 30-pack, writable/programmable USIM, 4G LTE / WCDMA / GSM, 2FF+3FF+4FF — the cards used here | multi-form-factor, so one card fits any handset |
| A PC/SC smartcard reader | any ordinary CCID reader | ⭐ NOT a special “SIM programmer”. The one used here is an Alcor Micro AU9540, driven by pcscd |
⇒ ⭐ There is no dedicated programmer and no soldering. Writing is done in software with
pySim — for these cards, the gialersim profile.
⛔ THREE THINGS THAT WILL COST YOU A CARD IF NOBODY TELLS YOU
- Write Milenage (K + OPc). Never COMP128v1. A 3G/UMTS cell needs Milenage; COMP128v1 is a 2G algorithm and a card written that way will not authenticate here.
- Identify the card by ICCID before every write. Blank cards are physically indistinguishable, and writing the wrong one is not always recoverable.
- There is a one-way door. Card programming has irreversible steps — a wrong ADM key, or an algorithm binding written wrong, can lock a card permanently. Read your tooling’s warnings before the first write, not after.
📌 The core-network side of this — HLR entries, IMSI↔MSISDN, auth data — is Osmocom’s documentation, not this repo’s.
| path | what it is |
|---|---|
docs/MATRIX.md |
⭐ all four models side by side — FCC power per band, silicon, HSUPA, tamper state, config-bank scheme |
docs/HARDWARE.md |
the four models, what differs, what to buy, what not to |
docs/ACCESS.md |
getting a shell, a console, or a management interface |
docs/BRINGUP.md |
DPH-151 — commissioning → Iuh → a first call. Also the router to the other three. |
docs/BRINGUP-NANO3G.md |
ip.access nano3G S8 — sealed box → root → a cell carrying voice |
docs/BRINGUP-DPH153.md |
DPH-153 — the published route, and what transfers from here |
docs/BRINGUP-DPH154.md |
DPH-154 — become its ACS, then inject through LogUpload.Tuning; access solved, radio tamper-gated |
docs/CONFIG.md |
the attributes that matter and what they do |
docs/TRAPS.md |
⭐ the failure modes. Read this before you debug anything. |
docs/ALTERNATIVES.md |
when one of these is the wrong choice |
docs/LEGAL.md |
⭐ operating one legally — Part 5 licensing, containment, emergency calling, what you can publish |
config/ |
sanitised core-network config templates, with placeholders |
tools/ |
scripts that generalise beyond one network |
_config.yml |
GitHub Pages settings. The file does not enable Pages — that is a repo-settings decision. |
This is written from one lab’s logbook, and the logbook was wrong a lot. So:
Where a claim is uncertain, the uncertainty is in the sentence, not in a footnote — because footnotes do not survive being quoted. If a statement here does not carry a hedge, it is because it was measured.
Model scope is stated on every instruction that has one. The three models differ in ways
that matter, and an instruction that is correct for one can destroy another — see the
config-bank trap in docs/TRAPS.md for a worked example.
⚠️ And “model” here includes one device that is not a MicroCell at all. Some findings were
measured on an ip.access nano3G — the product Cisco badged as the DPH — because it runs the
same 563 software train and was available to test against. Entries that came from one say
so — with one honest caveat: where we could establish the software family but not the specific
model, an entry says “an ip.access unit” rather than naming the nano3G, because inventing an
attribution in a repo whose subject is that instructions do not transfer between models would be
worse than the vagueness. Where a nano3G result is all there is, the entry says that too rather
than quietly generalising it: the two devices have already been shown to be opposite on the single setting
most likely to brick a bring-up. See
docs/HARDWARE.md
for what transfers and what does not.
It is not a copy of the lab notebook it was written from. That tree stays private: it holds working private keys, device identifiers, and vendor firmware whose redistribution nobody has assessed. Everything here is rewritten for a reader who has never seen that network — which is also what makes it a guide rather than a logbook.
These cells transmit on licensed cellular spectrum. The carriers that abandoned the networks did not abandon the licences — UMTS Band 2 (1900 MHz) and Band 5 (850 MHz) are refarmed and in active use for LTE and 5G today. Empty of the old technology is not the same as vacant.
So a femtocell on your bench is not an unlicensed device the way a Wi-Fi access point is. Two honest positions:
docs/LEGAL.md has the checklist: eligibility, Form 442, the ELS
filing system, what the application asks for, and the non-interference condition that applies
whether or not you hold one.Nothing here is legal advice. Rules differ by country; find out which apply to you.
This is about making a femtocell you own serve a core you run. That is the whole subject.
⭐ And it is the substance of this project’s position, not a disclaimer wrapped around it.
Owning the device is what makes every route on these pages a repair manual rather than an
attack guide — and it is why the scope holds even where a mechanism would transfer.
📌 Restated at the top of every page that describes a way in, because a scope limit that
lives only on the front page is one the reader never meets. What you may publish and the one
bright line: docs/LEGAL.md.
⛔ ONE CONSTRAINT ON YOUR CORE BEFORE YOU BUILD IT — AND IT IS THE ONE THAT BITES LATER
These devices ship a 2008 TLS stack. A DPH-154 offers TLS 1.0 only, exactly one cipher suite (
0x002f/TLS_RSA_WITH_AES_128_CBC_SHA), and no extensions. ⇒ ⭐⭐ One suite means there is no negotiation margin at all. Any modern default, distro crypto policy, orSECLEVELbump removes the only thing it can speak, and the handshake does not degrade — it ends.☠️ THE FAILURE YOU SHOULD ACTUALLY PLAN FOR IS NOT SETUP. IT IS A ROUTINE UPGRADE, MONTHS LATER.
You will get this working. Then you will upgrade the OS or tighten TLS for an unrelated service on the same host, and every femtocell will stop managing at once — none of them touched. ⛔ It presents as “the devices died”, which sends you to the hardware. ⭐ Simultaneity is the tell: N independent devices do not fail in the same minute — the thing that changed is the one thing they share, which is your core. ✅ So write the requirement down on the CORE, next to whatever runs its upgrades — not in the femtocell notes. The person typing
apt upgradeis not reading this page. 📌 Mechanism, probe and the wayopenssl s_clientmisreports it: trap 24. Same class as the DPH-151’s SSH needing the legacy cipher set — an obsolete peer whose requirements are invisible until maintenance removes them. ⚠️ The SSH one fails loudly at your prompt. This one fails on a device with no screen.
It deliberately does not cover attacking, intercepting or impersonating anyone else’s equipment or network. Some of the same mechanisms would apply — that is true of most networking knowledge — but the material here is organised around reuse, and working attack payloads are not published, here or anywhere.
⚠️ One root path is described in full, and the reason is that a reader who owns one of these
needs to be able to close it. The ip.access nano3G’s management console is a root path, and
ACCESS.md gives the injection sink, the boot-script branch that gates the port, and
the one-write defence — in enough detail to verify on your own unit, because a description too
vague to check is not documentation — while stopping short of an assembled article.
📌 Context, stated so the judgement is visible rather than implied: this hardware generation has no live network and no vendor left to ship a fix. AT&T’s 3G service ended in February 2022, and these are surplus units in the hands of the people reusing them — which is also the audience for this page. The thing that helps them is the mechanism stated accurately, including that the obvious hardening step closes the console you were using.
tools/pre-publish-check.sh runs before every commit and exits non-zero if it finds key
material, device IMEIs (in both 15- and 14-digit forms — a management interface prints
them without the check digit, so a 15-digit search returns a clean, complete-looking zero),
private-key blocks, internal hostnames, or oversized binaries.
It carries its own positive control: it plants a key-shaped string, confirms it finds it, and removes it. A scanner that cannot be shown to see a planted secret proves nothing when it reports none. It also fails the run if the scanner wrote anything to stderr, because a scanner that errored is a scanner whose zeros are meaningless.
tools/check-links.py validates every relative link and #anchor across the Markdown. These
pages cross-reference each other constantly, and once they are served as a site a broken anchor
is broken navigation rather than a cosmetic miss.
⚠️ It is here partly as a worked example of the failure it guards against. Its first version reimplemented GitHub’s heading-to-anchor rule and got it subtly wrong — it collapsed runs of whitespace, so a heading containing an em-dash or an ampersand produced one hyphen where GitHub produces two — and it confidently reported five good links as broken. Two things let that through, and the second is the interesting one:
It now checks the rule against heading/anchor pairs measured from rendered documents that do contain the awkward cases, rather than against this repo’s own convenient sample.
The foundation is fail0verflow’s 2012 DPH-151 work (UART header, SSH password,
the wizard UDP backdoor) — still the only substantial published teardown, and it
explicitly deferred the GPS and Iuh questions to a follow-up that never appeared. The
Osmocom Discourse threads on the DPH-153 are the other main source. This repo tries to
carry that forward rather than repeat it.
⭐ For the ip.access side, the reference is Osmocom’s own nano3G
documentation — an independent,
maintained account of the same software stack, covering the management interface and the
configuration sequence. Where this repo describes that stack, it is correcting or extending a
source that already exists rather than publishing a new one. sysmocom’s shipped femtocell
configuration is the other artefact worth reading: it settles at least one question in
docs/CONFIG.md that our own measurements only corroborated.
AT&T and MicroCell are trademarks of AT&T Intellectual Property. Cisco is a trademark of Cisco Systems, Inc. ip.access and nano3G are trademarks of ip.access Ltd, acquired by Mavenir in September 2020. These marks are used here only to identify the hardware this document describes, as permitted by nominative fair use.
⛔ This project is not affiliated with, endorsed by, or sponsored by AT&T, Cisco, ip.access or Mavenir.
README.md, docs/, config/ — CC BY-SA 4.0, see LICENSE-DOCStools/ — AGPL-3.0-or-later © 2026 Jeffrey Pine Hein. See LICENSE.📌 Commits before 2026-09-18 were published under GPL-3.0 and remain available under it. The
split applies going forward, because GPLv3 is a software licence whose source/object-code
machinery does not map onto prose, and this repository is mostly prose.
Code in tools/ moved from GPL-3.0 to AGPL-3.0-or-later on 2026-09-27; earlier commits keep
the GPL-3.0 grant.
⚠️ The licence covers the writing and the scripts in this repository. It says nothing about
the femtocell firmware itself, which is ip.access’s and is not distributed here — see
docs/HARDWARE.md for what you need to obtain yourself and from where.
Corrections are welcome — see CONTRIBUTING.md for the evidence vocabulary
and the contribution licence. Vendor contact and disclosure posture: SECURITY.md.