USB modem hell: Getting a fallback network for $5
aka “How to use a ZTE MF110/MF627/MF636/MF190 on Linux in 2020”
I was looking at random cheap networking stuff on the Turkish ebay clone the other day when I stumbled upon the good old 3G modems.
I always wanted one, and at some point one entered the house, but I never got a chance to use it, and I no longer am on good terms with the person who owns it now. I also ended up being given one by my grandparents several years ago, but I managed to break the sim slot before I could test it by storing a sim converter in it without the actual sim, which got stuck on the pins, and the attempts to pull it out led to the pins being destroyed. Ouch.
So, after all this time, I wanted to finally give it a shot, and they were being sold for as cheap as $3.5 + shipment, so I ordered the first one I saw, which was an “Avea Jet” model. It arrived this morning in a bootleg nutella box, and I had to pay like $2 to shipment. Yup. Can't make that shit up.
But yeah, the modem was inside that, wrapped in bubble wrap. I quickly opened it up, grabbed a SIM that has an actual data plan, found an appropriate SIM converter, stuffed it in:
So... I plugged it into my computer... and it didn't show up as a modem on neither modemmanager when I ran mmcli --list-modems
, nor on dmesg:
Uh oh.
Back when my grandparents gave me their old one years ago, I didn't need to install drivers or do any special config for it to be detected, but I was running Ubuntu 16.04 back then.
This suddenly got me worried. What if the relevant kernel module was dropped since then? What if arch doesn't build it in? What if this device never got supported? What if the modem itself was broken? What if the modem is carrier locked (I was using a Turkcell SIM)?
I plugged it into the only Windows computer to try and figure out stuff, but that left me with more concerns, especially about the modem itself being broken, as the CD drive just decided to not load after some time, and as I couldn't see the modem in device manager.
So I started searching, and stumbled upon this arch wiki page, and it's pretty much the basis of this blog post.
I already had many of the software needed such as modemmanager
, usbutils
and mobile-broadband-provider-info
, but turns out I also needed usb_modeswitch
and also optionally nm-connection-editor
for easy configuration of the settings (nmtui doesn't support it), and modem-manager-gui
if you want a GUI for SMS.
The whole thing boiled down to:
# pacman -S mobile-broadband-provider-info modemmanager usbutils usb_modeswitch --needed
# pacman -S nm-connection-editor modem-manager-gui --needed # these are optional
# systemctl enable --now ModemManager
But even after that, I was a little scared. usb_modeswitch --help
talked about modes for huawei, cisco and many other manufacturers, but ZTE was missing from that list:
I sighed. I took a deep breath, and I re-plugged the modem and... what do you know, it showed up as a modem on dmesg and mmcli:
First off I opened modem-manager-gui, and sent a text to my girlfriend, who was able to confirm that she got it:
Being relieved that there's no apparent SIM lock or any other modem issues, I booted up nm-connection-editor
, hit +
, picked Mobile Broadband
, and followed the wizard:
After saving, I finally booted up nmtui
, disconnected from wifi and connected to the mobile broadband network:
And voila. I'm now writing this blog post while on a mobile network.
It's not fast by any means, but at least I can fall back to this in an emergency:
We're also planning having a similar setup on a colo with an IoT SIM so that we can still access the network if anything goes wrong.
That's all! Hope you enjoyed this blog post.
Optional reading after this post: A retrospective of 3G routers in Turkey