I just received an unlocked Huawei E3276s-150 4G/LTE USB modem/surfstick I bought on eBay the other day. I went for the E3276s-150 because the 150 seemed to be the most compatible option for European 4G mobile networks. There are even cheaper Huawei E3276 models like the E3276-920 which you can buy for less than 20 bucks. However, the 920 seems to be frequency-optimized for Asian mobile networks and may not perform as well as a E3276s-150 in Western Europe.
To my great surprise, setting up the Huawei E3276 on Ubuntu 15.04 Desktop was literally plug & play. After a few seconds after plugging it in, I was greeted with a “Connection Established” message. Nicely done, Canonical!
On Ubuntu Server, like most Huawei modems, the stick is recognised as a memory card reader. It has to be switched to a USB modem device first using the usb_modeswitch
command in order to establish a mobile network connection. If it’s not already installed, usb_modeswitch
can be installed using apt-get -y install usb-modeswitch
.
Memory card reader mode:
drfalken@wopr:~# lsusb Bus 001 Device 007: ID 12d1:1f01 Huawei Technologies Co., Ltd.
To turn the E3276 into a modem:
drfalken@wopr:~# usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000'
If the change was successful, lsusb
shows a different USB product id now:
drfalken@wopr:~# lsusb Bus 001 Device 007: ID 12d1:14db Huawei Technologies Co., Ltd.
At the same time, dmesg
should output something like this:
drfalken@wopr:~# dmesg -T [Fri May 29 20:55:41 2015] usb 1-1: New USB device found, idVendor=12d1, idProduct=14db [Fri May 29 20:55:41 2015] usb 1-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0 [Fri May 29 20:55:41 2015] usb 1-1: Product: HUAWEI Mobile [Fri May 29 20:55:41 2015] usb 1-1: Manufacturer: HUAWEI Technology [Fri May 29 20:55:41 2015] cdc_ether 1-1:1.0 eth1: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, 57:2d:70:33:22:10
Since the modem registered itself on eth1 (the name depends on the number of network devices, it doesn’t HAVE to be on eth1), we now simply fetch an IP address from the modem using:
drfalken@wopr:~# dhclient -v eth1 Internet Systems Consortium DHCP Client 4.2.4 Copyright 2004-2012 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/eth1/57:2d:70:33:22:10 Sending on LPF/eth1/57:2d:70:33:22:10 Sending on Socket/fallback DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 3 (xid=0x3b73326b) DHCPREQUEST of 192.168.1.100 on eth1 to 255.255.255.255 port 67 (xid=0x3b73326b) DHCPOFFER of 192.168.1.100 from 192.168.1.1 DHCPACK of 192.168.1.100 from 192.168.1.1 bound to 192.168.1.100 -- renewal in 36557 seconds.
Yay, the modem has made itself available on 192.168.1.100 (it even has a web interface on port 80) with a /24 prefix and a gateway at 192.168.1.1.
By the way, make sure none of your local networks use 192.168.1.0/24 or it will collide with the Huawei’s local network.
Depending on a few factors dhclient
may or may not have changed the default gateway. If the default gateway points to the modem, it will be at 192.168.1.1 on eth1:
drfalken@wopr:~# ip route show | grep default default via 192.168.1.1 dev eth1
If this is not the case, you may have to remove the existing default gateway and replace it using:
drfalken@wopr:~# ip route del default ; ip route add default via 192.168.1.1
And… connected!
drfalken@wopr:~# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=22.7 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=34.9 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=39.7 ms
Make sure /etc/resolv.conf
contains a valid nameserver if you can’t resolve domain names.
To switch the Huawei E3276 into a modem at boot time, create /etc/udev/rules.d/70-usb-modeswitch.rules
and insert this line:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f01", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000'"
To automatically add a valid nameserver in /etc/resolv.conf
when eth1 comes up, add these lines to /etc/dhcp/dhclient.conf
:
interface "eth1" { prepend domain-name-servers 8.8.8.8; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.fqdn, dhcp6.sntp-servers; require routers, domain-name-servers; }
If you don’t want to run dhclient
manually, you can either add an eth1 dhcp section in /etc/network/interfaces
or add the dhclient eth1
command to /etc/rc.local
.
Just FYI: I’ve been using Vivid Vervet’s (Ubuntu 15.04) 3.19 kernel in Ubuntu Server 14.04 LTS. Vivid’s newer kernel can be installed using apt-get install linux-image-generic-lts-vivid
. Not sure if it makes a difference compared to 14.04’s default kernel though.
It’s working fine with one modem. I have two of these modems and I want to connect both of them at the same time. but only one of them works right now. How to fix?
Thanks for sharing. i’ll try this tutorial.
Thanks a lot it worked for me!!!
Do you know how to update the firmware of Huawei E3276 to mobile partner version? My E3276 is with Hilink.
im so noob. any simple tutorial?
thanks
Thanks for sharing this! Don’t you need to set APN, login and password? So, the modem would connect with your carrier and receive IP address…
Absolutely.
Cheers,
Jan
Great!
So probably you set APN, login, passw before using the command:
dhclient -v eth1
Where/how did you have set these configs?
thanks!
For the HiLink edition of the E3276 you simply point your browser to http://192.168.0.1 after getting an IP address (usually 192.168.0.100) from the stick’s DHCP server using the dhclient command.
Cheers,
Jan