Internet móvil con el modem 3G USB Huawei E303 en la Raspberry Pi

En este post expliqué cómo hacer funcionar el modem 3G Huawei E173 en la Raspberry Pi. Tengo ahora un módem E303 (en concreto E303h-1), y voy a intentar lo mismo.

El Huawei E303 es un dispositivo de internet móvil que funciona con redes 3G, EDGE, GPRS, GSM, HSDPA y HSUPA, y soporta las bandas GSM de 2100, 850, 900, 1800 y 1900 MHz.

Como ya expliqué, puede ser una tarea difícil. Uno de los motivos es que estos “pinchos USB” suelen llevar una memoria interna, o una ranura para una tarjeta microUSB, y la Raspberry Pi no lo reconoce como un módem sino como un dispositivo de almacenamiento (que es la intención de los fabricantes, para que al conectarlo a un PC con Windows, este automáticamente instale los drivers desde el almacenamiento). Para solucionar esto, y que la Raspberry Pi reconozca al dispositivo como lo que es, un modem, hay que recurrir al programa usb-modeswitch, y hay que prepararse para dedicarle muchas horas de búsqueda por internet para tu configuración, y luego mil pruebas…

IMG_6242

Dispositivo Huawei E303. Vista frontal

IMG_6243

Dispositivo Huawei E303. Vista trasera

IMG_6244

Dispositivo Huawei E303. Vista sin la tapa

Conseguir que la Raspberry Pi reconozca el modem Huawei E303

Antes de nada hay que asegurarse de que nuestra Raspberry Pi está bien alimentada, pues el modem 3G puede consumir bastante corriente. Lo segundo es que hayamos quitado el pin de la tarjeta SIM que hemos introducido en el modem 3G (esto generalmente lo podremos hacer o bien desde un móvil, o desde el programita/página web que salta por defecto al conectar el pincho a un PC).

Conecto el pincho y ejecuto el comando lsusb. Me sale, entre otros dispositivos USB que tengo conectados, este:

Bus 001 Device 006: ID 12d1:1f01 Huawei Technologies Co., Ltd. 

Si desconecto el pincho, ejecuto el comando tail -f /var/log/messages, y vuelvo a conectar el pincho sale:

Apr 18 10:07:25 piglobo2a kernel: [ 4792.775768] usb 1-1.4: new high-speed USB device number 7 using dwc_otg
Apr 18 10:07:25 piglobo2a kernel: [ 4792.877566] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1f01
Apr 18 10:07:25 piglobo2a kernel: [ 4792.877606] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 18 10:07:25 piglobo2a kernel: [ 4792.877625] usb 1-1.4: Product: HUAWEI Mobile
Apr 18 10:07:25 piglobo2a kernel: [ 4792.877642] usb 1-1.4: Manufacturer: HUAWEI
Apr 18 10:07:25 piglobo2a kernel: [ 4792.877660] usb 1-1.4: SerialNumber: FFFFFFFFFFFFFFFF
Apr 18 10:07:25 piglobo2a kernel: [ 4792.932324] usb-storage 1-1.4:1.0: USB Mass Storage device detected
Apr 18 10:07:25 piglobo2a kernel: [ 4792.933467] scsi host2: usb-storage 1-1.4:1.0
Apr 18 10:07:26 piglobo2a kernel: [ 4793.954310] scsi 2:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
Apr 18 10:07:26 piglobo2a kernel: [ 4794.052926] sr 2:0:0:0: [sr0] scsi-1 drive
Apr 18 10:07:26 piglobo2a kernel: [ 4794.054690] sr 2:0:0:0: Attached scsi generic sg1 type 5
Apr 18 10:07:26 piglobo2a kernel: [ 4794.073335] scsi 2:0:0:1: Direct-Access     HUAWEI   TF CARD Storage  2.31 PQ: 0 ANSI: 2
Apr 18 10:07:26 piglobo2a kernel: [ 4794.075205] sd 2:0:0:1: Attached scsi generic sg2 type 0
Apr 18 10:07:26 piglobo2a kernel: [ 4794.081446] sd 2:0:0:1: [sdb] Attached SCSI removable disk

Lo está reconociendo como una unidad de almacenamiento, y no como un modem, que es lo que quiero. Entonces tengo que instalar el programa usb_modeswitch:

sudo apt-get install usb-modeswitch

Si ahora hago lsusb obtengo:

Bus 001 Device 010: ID 12d1:14dc Huawei Technologies Co., Ltd.

Es decir, ha cambiado el id original 12d1:1f01 por el nuevo 12d1:14dc.

Y si hago de nuevo tail -f /var/log/messages, obtengo:

Apr 18 10:15:12 piglobo2a kernel: [ 5260.033848] usb 1-1.4: new high-speed USB device number 11 using dwc_otg
Apr 18 10:15:12 piglobo2a kernel: [ 5260.135921] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1f01
Apr 18 10:15:12 piglobo2a kernel: [ 5260.135960] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 18 10:15:12 piglobo2a kernel: [ 5260.135980] usb 1-1.4: Product: HUAWEI Mobile
Apr 18 10:15:12 piglobo2a kernel: [ 5260.135998] usb 1-1.4: Manufacturer: HUAWEI
Apr 18 10:15:12 piglobo2a kernel: [ 5260.136018] usb 1-1.4: SerialNumber: FFFFFFFFFFFFFFFF
Apr 18 10:15:13 piglobo2a kernel: [ 5260.267266] usb-storage 1-1.4:1.0: USB Mass Storage device detected
Apr 18 10:15:13 piglobo2a kernel: [ 5260.276429] scsi host6: usb-storage 1-1.4:1.0
Apr 18 10:15:13 piglobo2a usb_modeswitch: switching device 12d1:1f01 on 001/011
Apr 18 10:15:14 piglobo2a kernel: [ 5261.336395] usb 1-1.4: USB disconnect, device number 11
Apr 18 10:15:14 piglobo2a kernel: [ 5261.823824] usb 1-1.4: new high-speed USB device number 12 using dwc_otg
Apr 18 10:15:14 piglobo2a kernel: [ 5261.925562] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=14dc
Apr 18 10:15:14 piglobo2a kernel: [ 5261.925603] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Apr 18 10:15:14 piglobo2a kernel: [ 5261.925623] usb 1-1.4: Product: HUAWEI Mobile
Apr 18 10:15:14 piglobo2a kernel: [ 5261.925643] usb 1-1.4: Manufacturer: HUAWEI
Apr 18 10:15:14 piglobo2a kernel: [ 5262.165445] cdc_ether 1-1.4:1.0 eth1: register 'cdc_ether' at usb-bcm2708_usb-1.4, CDC Ethernet Device, 00:1e:10:1f:00:00
Apr 18 10:15:14 piglobo2a kernel: [ 5262.167221] usb-storage 1-1.4:1.2: USB Mass Storage device detected
Apr 18 10:15:14 piglobo2a kernel: [ 5262.168907] scsi host7: usb-storage 1-1.4:1.2
Apr 18 10:15:15 piglobo2a kernel: [ 5263.169241] scsi 7:0:0:0: Direct-Access     HUAWEI   TF CARD Storage  2.31 PQ: 0 ANSI: 2
Apr 18 10:15:15 piglobo2a kernel: [ 5263.173135] sd 7:0:0:0: [sdb] Attached SCSI removable disk
Apr 18 10:15:15 piglobo2a kernel: [ 5263.175278] sd 7:0:0:0: Attached scsi generic sg1 type 0

Lo que está pasando es que la Raspberry Pi está reconociendo al modem 3G como una interfaz de red, pues este modem tiene esa propiedad HiLink de algunos Huawei.

Con esto ya tenemos una nueva “tarjeta de red”, y podríamos empezar a navegar haciendo lo siguente:

sudo nano /etc/network/interfaces

y añadimos este nuevo dispositivo ethernet eth1:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

<strong>iface eth1 inet dhcp</strong>

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Reiniciamos, y el pincho nos asignará la IP 192.168.8.100.

Y ya tenemos conexión a internet en la Raspberry Pi a través del pincho Huawei E303.

No hemos acabado todavía…

Pero yo quiero emplear este pincho para mandar SMS también, así que este procedimiento tan sencillo y maravilloso no me vale, pues no se reconoce el modem como tal. Tengo que especificar a usb-modeswitch que cambie no al modo HiLink, sino a otro modo.

Lo primero, editamos el fichero /etc/usb_modeswitch.conf haciendo que EnableLogging=1. De esta forma, el fichero de registro /var/log/usb_modeswitch_XXXXXXXXXXXX contendrá más información, que nos será muy útil en todas las pruebas que seguramente tengamos que hacer.. Cada vez que desconecte y reconecte el modem USB, veré el contenido de ese fichero para ver los pasos que sigue el programa.

En la página web de Usb_modeswitch se explica muy bien el funcionamiento del programa. Como en mi caso se cambia al modo HiLink, significa que usb_modeswitch reconoce bien el dispositivo y lo cambia correctamente, esto significa que la configuración está ya en la base de datos. Pero quiero cambiar al otro modo.

Continuo probando. En el fichero /usr/share/usb_modeswitch/configPack.tar.gz encuentro el fichero 12d1:1f01, con el siguiente contenido:

# Huawei E353 (3.se)

TargetVendor=  0x12d1
TargetProduct= 0x14db

MessageContent="55534243123456780000000000000a11062000000000000100000000000000"
NoDriverLoading=1

Hay algo raro, pues realmente carga el 14dc y no el 14db, pero me da igual, porque lo voy a pisar. Podemos hacer que usb-modeswitch pase de esta configuración y lea la que nosotros queramos, si colocamos el fichero correspondiente en /etc/usb_modeswitch.d/. Por defecto está vacío, así que voy a crear ahí el fichero con el que haré pruebas:

sudo nano /etc/usb_modeswitch.d/12d1\:1f01

(ojo con el \:). En ese fichero pego lo siguiente:

# Huawei E303
DefaultVendor= 0x12d1
DefaultProduct= 0x1f01
TargetVendor= 0x12d1
TargetProduct= 0x1001
MessageContent="55534243123456780000000000000011063000000100010000000000000000"

He llegado a esta configuración tras buscar mucho por internet y hacer muchas pruebas, pues hay varios modos que funcionan, pero sólo he encontrado éste en el que funcionase tanto GSM como 3G.

Otras configuraciones que funcionaron (sólo como 3G) fueron:

# Huawei E303
DefaultVendor= 0x12d1
DefaultProduct= 0x1f01
TargetVendor= 0x12d1
TargetProduct= 0x1442
MessageContent="55534243123456780000000000000011060000000000000000000000000000"

Y esta otra:

# Huawei E303
DefaultVendor= 0x12d1
DefaultProduct= 0x1f01
TargetVendor= 0x12d1
TargetProduct= 0x1442
MessageContent="55534243000000000000000000000011060000000000000000000000000000"

Pruebo ahora a desconectar el pincho y volverlo a conectar. Al cabo de unos segundo siempre lo acaba reconociendo. Hago lo mismo reiniciando, y siempre lo reconoce. Así que no tengo que hacer ninguna de las trampas a las que tuve que recurrir con el Huawei E173.

También podría haberlo hecho ejecutando directamente el comando:

sudo usb_modeswitch -v 0x12d1 -p 0x1f01 -V 0x12d1 -P 0x1001 -M "55534243000000000000000000000011060000000000000000000000000000" -n -I

(aunque esto me cambia a 12d1:1442)

Ahora edito el fichero /etc/usb_modeswitch.conf y vuelvo a dejar EnableLogging=0 para dejarlo todo como estaba originalmente. Reinicio un par de veces con el modem enchufado y parece que todo funciona. Así que puedo pasar al siguiente paso.

Instalando el demonio pppd, UMTSKeeper y Sakis3G

El programa más utilizado para realizar la conexión 3G es Sakis3g. Sin embargo, antes de lanzarnos a instalarlo, tenemos que saber que es muy frecuente perder la conexión 3G cada cierto tiempo, por lo que se suele recurrir a otro programa, UMTSKeeper, que está constantemente comprobando la conexión y recuperándola cuando se cae. Como este último programa instala por su cuenta Sakis, no es necesario que instalemos Sakis antes.

Así que empezamos. Lo primero es instalarse el servicio pppd:

sudo apt-get install ppp

A continuación instalamos UMTSKeeper:

cd ~
mkdir umtskeeper
cd umtskeeper
wget "http://mintakaconciencia.net/squares/umtskeeper/src/umtskeeper.tar.gz"
tar -xzvf umtskeeper.tar.gz
chmod +x sakis3g umtskeeper

Ahora, configuramos sakis:

sudo ./sakis3g --interactive 
Configruación Sakis 3G Pantalla 1

Configuración Sakis 3G Pantalla 1

Configruación Sakis 3G Pantala 2

Configuración Sakis 3G Pantalla 2

Configuración Sakis 3G Pantalla 3

Configuración Sakis 3G Pantalla 3

Configuración Sakis 3G Pantalla 4

Configuración Sakis 3G Pantalla 4

Configuración Sakis 3G Pantalla 5

Configuración Sakis 3G Pantalla 5

Configuración Sakis 3G Pantalla 6

Configuración Sakis 3G Pantalla 6

Configuración Sakis 3G Pantalla 7

Configuración Sakis 3G Pantalla 7

Si ahora hago ifconfig, obtengo, entre otras cosas:

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:88.29.125.147  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:130 (130.0 B)  TX bytes:333 (333.0 B)

Así que efectivamente, tenemos conexión a internet por ppp0.

Y por último, configuro UMTSKeeper. Ejecuto el siguiente comando (una sola línea), que luego añadiré a /etc/rc.local para que se ejecute siempre que se arranque la Raspberry Pi:

sudo /home/pi/umtskeeper/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1001' APN='movistar.es' CUSTOM_APN='movistar.es' APN_USER='0' APN_PASS='0'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no' --httpserver &amp;&gt;&gt; /home/pi/umtskeeper/error.log &amp;

Consulto el fichero /var/log/umtskeeper.log y veo que está todo en orden. Pruebo a desconectar y reconectar el pincho USB, y veo que tras medio minuto vuelve a conectarse automáticamente.

Así que he conseguido:

  1. Que la Raspberry Pi reconozca el modem USB 3G como modem y no como unidad de alamacenamiento, y que lo haga tras un reinicio
  2. Que se conecte a internet a través del modem USB
  3. Que mantenga la conexión mientras la Raspberry Pi esté fucnionando, bien tras caidas de la red, o por desenchufar-reenchufar el modem 3G

¡Prueba superada!

Referencias

4 pensamientos en “Internet móvil con el modem 3G USB Huawei E303 en la Raspberry Pi

    • Hola:
      1º) Casi seguro que sí. De hecho tengo también ese mismo modelo y funciona.
      2º) Sí. A mí me ha funcionado alimentado directamente desde del puerto USB de la RPi. E incluso con baterías.
      Un saludo

  1. Muy interesante tu entrada.
    Me ilusioné cuando al hacer ifconfig no te dio una clase C, ya que mi reto es hacer portforward, sacar a DMZ, o cuando menos que se exponga por completo a WAN.
    Hice lo mismo. Me asigna el mismo P-t-P y distinta IP (tampoco me la asigna clase C), pero mi IP pública es distinta. Nada que ver ni con una ni con otra.
    Crees que haya alguna manera de hacer portforward, DMZ o similar?
    De antemano muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *