Moving my mobile numbers to VoIP
Porting my personal and work mobile numbers to AAISP, using Groundwire as the client, and a small self-hosted proxy to plug the SMS gap.
For the last year or so I’ve been running three eSIMs on my iPhone: personal, work, and a data-only travel SIM that swaps in whenever I’m abroad. iOS only lets two eSIMs be active at any one time, which meant a small but constant dance of enabling and disabling profiles depending on what I was doing that day.
I’ve now ported both my personal and work mobile numbers to VoIP, and the eSIM juggling is gone.
The nudge came from Michael Bazzell’s Extreme Privacy: What It Takes to Disappear, which recommends moving your “real” numbers off a carrier and onto a VoIP provider as part of a broader privacy strategy. For Bazzell the point is untangling your identity from the mobile network. For me it’s almost entirely convenience. Whichever phone I pick up in the morning rings for both numbers, and the data SIM can sit wherever it’s most useful without me having to decide which mobile identity to sacrifice for the day.
The provider and the app
I’m using Andrews & Arnold (AAISP) as the VoIP provider. I’ve used them for broadband on and off for years and they remain one of the few ISPs I’d actively recommend: technically competent, refreshingly honest, and perfectly happy for you to do slightly unusual things with your service. Porting two mobile numbers to them was painless.
For the client I’m using Groundwire from Acrobits. I’ve been through plenty of SIP clients over the years and most of them are either ugly, flaky on push, or weirdly hostile to the idea of multiple accounts. Groundwire is the first one that’s felt like a proper phone replacement. Push notifications actually work, call quality is good, and it handles multiple accounts without any drama.
The SMS problem
AAISP exposes SMS through a plain-text HTTP API, and Groundwire expects messages to be delivered via its own web service hooks in XML. The two formats don’t match, so out of the box sending and receiving text messages just didn’t work: calls were fine, but SMS was effectively dead.
I ended up writing a small PHP proxy that sits between them. Outbound messages go from Groundwire into the proxy, get reshaped, and hit the AAISP API. Inbound messages arrive via an AAISP webhook, get stored in SQLite, and are picked up the next time Groundwire polls. It also pokes Acrobits’ push service when something arrives, so iOS actually surfaces the notification rather than silently waiting on the next poll cycle.
It’s called aaisp-sms-proxy and it’s on GitHub if anyone else is in the same boat. AAISP credentials stay server-side, each number gets its own token so they’re properly isolated, and there’s a tiny bit of rate limiting and log sanitisation in there because it’s on the public internet. I use it every day now and mostly forget it’s there.
GrapheneOS and picking up whichever phone
The other reason this matters is that I’m planning to move my daily driver to GrapheneOS. If your numbers live on a physical or embedded SIM, switching devices is a faff: SIM swaps, eSIM transfers, carrier-app dances, the lot. With VoIP the numbers live in an account, so I install Groundwire on whichever phone I’m carrying and it just rings. Pixel one day, iPhone the next, both at the same time if I want.
The one remaining puzzle is Signal. Signal still treats the phone as the primary device and the desktop clients as tethered secondaries, which is fine for a single-phone setup but doesn’t quite fit mine. I want something closer to proper multi-device: two phones, both independently functional, one potentially offline for weeks at a time without losing messages when it comes back online. That isn’t how Signal is designed to work today, so figuring out a sensible workaround is next on the list.
On privacy
If you’re reading Bazzell and coming at this from a privacy angle, AAISP isn’t the answer. They’re a UK telco and they verify you like any other provider, so the number is still firmly tied to your legal identity. Moving off a SIM buys you some separation from the mobile network itself, but not the kind of disappearance the book describes. For that you’d want a provider willing to sell you a number without identity checks, and AAISP explicitly doesn’t.
My goal was never to vanish, just to stop playing eSIM Tetris every time I landed in another country. The juggling is gone.