Clé 4G sur Ubuntu

Les consignes d'installation de la clé 4G LTE L800Z sur Ubuntu

alcatel-onetouch-4g-usb-modem

Récemment j'ai fait l'acquisition d'un modem Alcatel 4G LTE L800Z, j'ai personnellement été surpris des fonctionnalités de cet outil. Mon objectif principal était de trouver un périphérique permettant de mettre en place un serveur SMS  pouvant envoyer et de recevoir des SMS à partir d'une carte sim et un abonnement à la carte comme un opérateur Orange, SFR par exemple. Premièrement lors de la réception de l'appareil j'ai constaté qu'il n'y avait aucune documentation sur l'outil, celui-ci venant d'un site de wholesale shipping asiatique. J'ai eu l'opportunité de tester ce gadget sur Ubuntu 15.10 et sur Windows 10. L'installation de l'appareil s'est faite sans encombre sur Windows, la clé 4G a été reconnue directement par le système comme un lecteur CD-ROM, il suffisait alors d'installer l'appareil en exécutant le fichier setup.exe et en suivant les instructions. Le problème demeurant que la clé 4G une fois installée était conçue pour ne fonctionner qu'en interface dont l'adresse du point d'accès (gateway) est 192.168.1.1, c'est embêtant lorsque l'on souhaite utiliser le routeur en réseau local et que nous possèdons déjà au préalable une connexion réseau sans fil ou ethernet avec la même adresse de point d'accès, on a donc un conflit dhcp de résolution des adresses ip qui nous empêche de se connecter à deux réseaux en même temps comme décrit dans la RFC1918. Le fournisseur du routeur est la société de téléphonie basée au Royaume Uni "EE Mobile Broadband" et proposaient à leurs clients de payer un abonnement pour modifier l'adresse du routeur. Sur le site du vendeur du gadget , il était signalé la mention Unlocked(qui signifie débloquée dans le jargon de la téléphonie, cela concernait la compatibilité avec les operateurs) toutefois aucune consignes d'installation n'étaient indiquées.

Dans cet article nous aborderons les points suivants :

  • Les caractéristiques de l'appareil
  • L'identification de la clé 4g
  • Le changement de mode en USB
  • La configuration de l'appareil
  • La configuration du  réseau
  • Les liens  connexes et annexes
 

Les caractéristiques de l'appareil

Sur internet on retrouve des modèles dont l'installation est à peu près similaire  pour une installation sur des systèmes linux, par exemple le modèle W800 Alcatel comprends à peu de choses près les mêmes caractéristiques.

  • Device Type: LTE WiFi Router/LTE Dongle (Plug & Play)
  • Platform: Qualcomm MDM9215 + AR6003G
  • Network modes: FDD LTE, DC-HSPA+, HSPA+, HSUPA, HSDPA, UMTS, EDGE, GRPS
  • 4G Bands: 700/800/850/900/AWS/1800/1900/2100/2600 MHz
  • 3G Bands: 850/900/AWS/1800/1900/2100 MHz
  • 2G bands: 850/900/1800/1900 MHz
  • LTE Speed: Downlink up to 100Mbps and uplink up to 50Mbps
  • WiFi: 802.11 b/g/n, (n up to 75Mbps)
  • Support up to 10 WiFi users
  • Mass storage: 2Gb NAND Flash + 1GB LPDDR
  • USB interface: USB 2.0 high speed
  • MicroSD storage up to 32GB
  • USIM/SIM card slot
  • Size: 89 x 27.5 x 14 mm

Vous comprendrez que tout n'a pas été testé de mon côté, le réseau sans fil Wlan est bien présent, il est possible de changer le SSID et la configuration interne toutefois je ne penses pas que le réseau téléphonique avec les forfaits à carte utilisé soit capable de transmettre en parallèle les SMS et la connection Wlan. Les autres caractéristiques ont été testées avec succès et je peux vous confirmer que cela fonctionne parfaitement.

L'identification de la clé 4G

Les étapes suivante permettent l'identification de l'appareil sur linux.

lsusb

Les résultats

Bus 001 Device 004: ID 1bbb:0195 T & A Mobile Phones

Dans certains cas, le numero de produit (product number) est configurer à f000 à la place de 0195, cela signifie (par défaut) que votre système d'exploitation ne reconnaît pas ce périphérique, alors le résultat issu de la commande dmesg qui permet de repérer les changement entre le système et les périphériques affichera votre clé 4g comme modem USB , sans toutefois permettre l'utilisation du périphérique comme point d'accès. les manipulations décrite dans la partie suivante vous permettront de configurer votre système afin qu'il prenne pleinement en compte votre produit(product number).

Les entrées sorties USB récentes :

dmesg | tail

Résultats :

[127899.387213] usb 1-1: Manufacturer: Alcatel
[127899.387219] usb 1-1: SerialNumber: 0123456789ABCDEF
[127899.408680] option 1-1:1.0: GSM modem (1-port) converter detected
[127899.409696] option 1-1:1.1: GSM modem (1-port) converter detected
[127899.410001] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[127899.410794] usb-storage 1-1:1.2: USB Mass Storage device detected
[127899.411622] scsi host13: usb-storage 1-1:1.2
[127900.412411] scsi 13:0:0:0: Direct-Access     ONETOUCH SUZUKA           2.31 PQ: 0 ANSI: 2
[127900.415983] sd 13:0:0:0: Attached scsi generic sg1 type 0
[127900.421262] sd 13:0:0:0: [sdb] Attached SCSI removable disk
lsusb -v -d 1bbb:0195

Les résultats

Bus 001 Device 004: ID 1bbb:0195 T & A Mobile Phones 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x1bbb T & A Mobile Phones
  idProduct          0x0195 
  bcdDevice            2.32
  iManufacturer           1 Alcatel
  iProduct                2 MobileBroadBand
  iSerial                 3 0123456789ABCDEF
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           79
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass        224 Wireless
      bFunctionSubClass       1 Radio Frequency
      bFunctionProtocol       3 RNDIS
      iFunction               7 RNDIS
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      3 RNDIS
      iInterface              5 RNDIS Communications Control
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               9
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 
      iInterface              6 RNDIS Ethernet Data
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              4 Mass Storage
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)

Le changement de mode en USB

On va essayer de mettre en place le périphérique afin qu'il soit reconnu par notre système d'exploitation (Ubuntu 15.10), la clé 4G comprends une interface RNDIS, qui est une interface propriétaire inventée par Microsoft, celle ci se sert du protocole SCSI, qui est trés rapide (qui se prononce Scuzi). L'objectif est que notre machine reconnaisse le dongle USB comme une carte réseau visible grâce à la commande ifconfig.

On a besoin que les modules séries soit activés  :

nano /etc/modules

Rajouter au dessus du fichier

usbserial
option

On a aussi besoin d'installer usb_modeswitch, c'est un utilitaire qui nous permettra de changer de mode notre dongle USB, de stockage amovible à modem.

apt-get install usb-modeswitch-data 
apt-get install usb-modeswitch

Petit problème usb-modeswitch ne connaît pas notre dongle 4G, on va devoir l'installer manuellement avec les deux commandes suivante, la premiere active le module série selon l'identifiant hexadecimal, et le second envoi un message d'activation du periphérique en mode modem.

modprobe usbserial vendor=0x1bbb product=0x0195
usb_modeswitch -W -v 1bbb -p f000 -V 1bbb -P 0195 --message-content 55534243123456788000000080000606f50402527000000000000000000000

On vérifie le fonctionnement de notre commande précédente :

dmesg | tail

Résultats

[202344.036852] usb 5-2.1.4: New USB device found, idVendor=1bbb, idProduct=0195
[202344.036866] usb 5-2.1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[202344.036874] usb 5-2.1.4: Product: MobileBroadBand
[202344.036881] usb 5-2.1.4: Manufacturer: Alcatel
[202344.036887] usb 5-2.1.4: SerialNumber: 0123456789ABCDEF
[202344.061093] usb-storage 5-2.1.4:1.2: USB Mass Storage device detected
[202344.062199] scsi host4: usb-storage 5-2.1.4:1.2
[202344.252119] usbcore: registered new interface driver cdc_ether
[202344.304047] rndis_host 5-2.1.4:1.0 usb0: register 'rndis_host' at usb-0000:00:12.0-2.1.4, RNDIS device, 9e:99:3b:e5:9c:49
[202344.308353] usbcore: registered new interface driver rndis_host
[202344.339837] rndis_host 5-2.1.4:1.0 enx9e163be39c49: renamed from usb0
[202345.066040] scsi 4:0:0:0: Direct-Access     ONETOUCH SUZUKA           2.31 PQ: 0 ANSI: 2
[202345.067439] sd 4:0:0:0: Attached scsi generic sg1 type 0
[202345.087000] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[202345.617807] usbcore: registered new interface driver usbserial
[202345.617872] usbcore: registered new interface driver usbserial_generic
[202345.617930] usbserial: USB Serial support registered for generic
[202345.670558] usbcore: registered new interface driver option
[202345.670677] usbserial: USB Serial support registered for GSM modem (1-port)

A présent un nouveau périphérique RNDIS vient d'apparaitre dans notre configuration réseau, celui-ci se nomme enx9e163be39c49.

Pour voir la configuration nous effectuons les commandes suivantes

Lister le nom des interfaces réseaux présente :

ls /sys/class/net

Résultats :

enx9e163be39c49  lo  wlan0

Voir la configuration détaillée de notre nouvelle interface:

ifconfig enx9e163be39c49

Résultats

enx9e163be39c49 Link encap:Ethernet  HWaddr 9e:16:3b:e3:9c:49
          inet adr:192.168.1.1  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::9c16:3bff:fee3:9c46/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:0 erreurs:0 :0 overruns:0 frame:0
          TX packets:132 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          Octets reçus:0 (0.0 B) Octets transmis:27464 (27.4 KB)

Désormais on a besoin d'activer la reconnaissance de notre périphérique USB lors des prochains redémarrages de notre machine, on a deux solutions possibles.

La premiere solution

On créé un fichier .conf

nano /etc/usb_modeswitch.d/1bbb:0195

Et on y insère la configuration :

DefaultVendor=  0x1bbb
DefaultProduct= 0xf000
TargetVendor=   0x1bbb
TargetProduct=  0x0195
MessageContent="55534243123456788000000080000606f50402527000000000000000000000"
NeedResponse=0

On l'insère dans rc.local

cat > /etc/rc.local
echo "1bbb 0195" > /sys/bus/usb-serial/drivers/option1/new_id

On pourra aussi changer manuellement la configuration de cette manière.

usb_modeswitch -W -I -v 1bbb -p 0195 -c /etc/usb_modeswitch.d/1bbb:0195

La seconde solution

On ajoute une règle /dev/phone virtuelle.

nano /etc/udev/rules.d/99-phone.rules

On insère la règle.

SUBSYSTEM=="usb", SYSFS{idVendor}=="1bbb", SYSFS{idProduct}=="0195", RUN+="/usr/sbin/usb_modeswitch -W -v 1bbb -p f000 -V 1bbb -P 0195 --message-content 55534243123456788000000080000606f50402527000000000000000000000"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="0195", MODE="0666" , SYMLINK+="phone"

La configuration de l'appareil

A présent notre appareil semble en état de marche cependant, vous n'êtes pas forcément dans la possibilité de vous connecter au panneau d'administration car vous êtes probablement déjà connecté à internet à l'aide d'un point d'accès ou vous avez une ip statique configurée manuellement dans le fichier /etc/network/interfaces. Ma configuration comprends 2 interfaces réseaux, une interface qui me permet de me connecter au réseau sans fil qui est appelée wlan0 et l'autre correspondant à l'interface de mon routeur usb enx9e163be39c49 la 3ème interface est l'interface de loopback (lo). Si votre configuration n'a pas été effectuée manuellement l'adressage Ip est gèré automatiquement par le service dhcp, via dhclient, si dhclient ne fonctionne pas sur votre machine je vous propose d'installer dhcpcd (apt-get install dhcpcd).

Quelques commandes utiles :

Modifier le fichier de configuration du réseau automatiquement (pour utilisation avec l'interface graphique network-manager)

nano /etc/network/interfaces

Modifier le fichier de la sorte (dans l'exemple des 3 interfaces décrites ci-dessus)

auto lo
iface lo inet loopback
auto wlan0
dns-nameservers 8.8.8.8 8.8.4.4
auto enx9e163be39c49

Supprimer les profiles de connection automatiques sur ubuntu 14.

cd /etc/NetworkManager/system-connections/
rm lenomduprofildeconnection

Redémarrer l'instance réseau.

/etc/init.d/networking restart

Alternative (redémarrer la gestion du réseau).

restart network-manager

Arrêter le service de gestion réseau.

stop network-manager

Activer le mode déboggage lors de la réinitialisation du réseau.

sudo bash -x /etc/init.d/networking restart

Redémarrer l'interface enx9e163be39c49.

sudo ifconfig enx9e163be39c49 down && ifconfig enx9e163be39c49 up

Alternative pour redémarrer l'interface.

sudo ifdown enx9e163be39c49 && sudo ifup enx9e163be39c49

Redémmarer l'adressage dhclient sur l'interface enx9e163be39c49

dhclient -r enx9e163be39c49 && rm /var/lib/dhcp/dhclient.* ; dhclient -v enx9e163be39c49

Ou simplement supprimer le fichier d'adressage automatique des IP dhclient.

rm /var/lib/dhcp/dhclient.leases

Ou bien terminer le signal dhcp avec dhcpcd.

dhcpcd -k

Configurer sa clé 4G LTE

Maintenant qu'il est possible de se connecter au point d'accès grâce au gestionnaire de réseau on peut naviguer sur les pages de l'appareil afin de voir ce qu'il est possible de faire. En première partie nous verrons les emplacement permettant de recueillir des informations et en second lieu les moyens de les modifier à l'aide de requête GET et POST. Comme la plupart des routeurs, cet appareil ne faisant pas exception, des vulnérabilités de type CSRF (cross site request forgery) sont possible, dans le cadre d'une utilisation locale (plateforme d'envoi et de réception de sms) à l'intérieur d'un réseau local DMZ(démilitarisé) ces types de vulnérabilité ne sont pas très dangereuses si l'architecture réseau  passant par la DMZ est bien conçu.

Les outils utilisés :

  • Firefox muni des plugins webdevelopper, (pour désactiver le javascript et récupérer le fichier http://192.168.1.1/cfgbak/configure.bin, lisible avec un éditeur de texte).
  • Firebug , ou l'outil d'inspection de google chrome, (Touche F12) pour afficher la page de login (index.html) en modifiant la propriété "display" en css, et se connecter  avec les noms d'utilisateur admin et password admin.
  • Curl - l'outil en ligne de commande permettant d'envoyer facilement les requêtes GET et POST.

Les emplacements intéressants

Fichier javascript contenant la liste des fonctions API disponible sur le routeur.

http://192.168.1.1/js/base.js

Configuration Wlan

http://192.168.1.1/default.html#settings/wifiSetting.html

Configuration des profiles APN (doit correspondre avec l'opérateur votre carte SIM), voir le liens connexe (à la fin de l'article).

http://192.168.1.1/default.html#settings/profileManagement.html

Manipulation des paramètres du routeur 4G

C'est probablement la partie la plus intéressante de l'article, ici nous allons voir les moyens que nous avons pour changer les paramètres de configuration du routeur.

Pour modifier les paramètres réseaux comme l'adresse IP du routeur(En terme de sécurité cela permet d'outre-passer la protection mise en place par EE Mobile Broadband interdisant le changement d'ip), le nom de la machine, le serveur dhcp  etc..

curl --data "a5_ip_addr=192.168.7.1&sub_net_mask=255.255.255.0&host_name=ctrlfagency&enable_dhcp=1&dhcp_start_addr=192.168.7.2&dhcp_end_addr=192.168.7.254&dhcp_release_time=12h" http://192.168.1.1/goform/setRouterInfo

Vérifier l'exactitude des informations modifiées sur le routeur.

http://192.168.7.1/goform/getRouterInfo?rand=1

Pour modifier les paramètres wlan de la clé 4G

curl --data "wmode=2&wifi_state=1&ssid=CTRLF&hidden_ssid=0&channel=11&max_numsta=10&security_mode=0&wep_sec=2&wep_key=123456789&wpa_sec=2&wpa_passphrase=20640158&ap_status=1" http://192.168.7.1/goform/setWlanInfo

Vérifier les résultats.

http://192.168.7.1/goform/getWlanInfo

Envoyer un SMS avec la ligne de commande

curl --data "sms_id=8&action_type=send&sms_time=2015 17:46:14&sms_number=07XXXXXXXX&sms_content=hello world" http://192.168.7.1/goform/sendSMS

Récupérer le nombre de SMS (variable : inbox , send, draft)

http://192.168.7.1/goform/getSMSPageInfo?key=inbox

Récupérer la inbox de SMS (variable : inbox , send, draft)

http://192.168.7.1/goform/getSMSlist?key=inbox

Récupère un sms par id

http://192.168.7.1/goform/getSingleSMS?sms_id=1

Supprime un sms par id

http://192.168.7.1/goform/deleteSMS?sms_id=1

La configuration du réseau

Notre plateforme d'envoi et de réception de SMS est presque prête à l'emploi, nous avons simplement besoin de restreindre l'accès a notre point d'accès en local. Selon l'utilisation que vous ferez de votre clé 4G la démarche suivante n'est pas forcément nécessaire. Dans le cadre de ce tutoriel qui est l'utilisation de la clé comme plateforme d'envoi de SMS dans un réseau de type entreprise, on va devoir adapter notre architecture réseau aux contraintes de sécurité. Premièrement, utiliser un serveur windows vous facilitera grandement la tâche car l'adressage IP entre plusieurs interfaces se fait à l'aide de l'interface graphique, il suffit de restreindre internet pour notre interface clé 4G et autorisé la propagation d'internet sur notre interface sans fil ou ethernet connecté à notre second routeur.  Sur ubuntu on va devoir désactiver l'adressage DHCP automatique de notre clé 4G avec la commande ci dessus et activer l'adressage statique des ip.

La configuration réseau est la suivante:

J'ai 2 interfaces 1 correspondant au routeur, et la seconde correspondant a mon réseau sans fil wlan la passerelle permettant d'accèder à internet pour wlan0 est 192.168.1.1 et la passerelle de mon interface dongle enx9e163be39c49 est 192.168.7.1.

Je créé 2 tables de routage rt2 et rt3.

nano /etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
1 rt2
2 rt3

On active l'ip forwarding

echo "1" > /proc/sys/net/ipv4/ip_forward

On configure le routage des paquets.

nano /etc/network/interfaces   
# rt2
auto enx9e163be39c49
iface enx9e163be39c49 inet static
        address 192.168.7.1
        netmask 255.255.255.0
        broadcast 192.168.7.255
        network 192.168.7.0
        gateway 192.168.7.254
        up /sbin/ip route add default via 192.168.7.254 dev enx9e163be39c46 table rt2
        up /sbin/ip rule add from 192.168.7.0/24 table  rt2
        post-down /sbin/ip rule del from 192.168.7.0/24 table  rt2
        post-down /sbin/ip route del default via 192.168.7.254 dev enx9e163be39c46 table  rt2 


# rt3
auto wlan0
iface wlan0 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        broadcast 192.168.1.255
        network 192.168.1.0
        gateway 192.168.1.254
        up /sbin/ip route add default via 192.168.1.254 dev wlan0 table rt3
        up /sbin/ip rule add from 192.168.1.0/24 table  rt3
        post-down /sbin/ip rule del from 192.168.1.0/24 table  rt3
        post-down /sbin/ip route del default via 192.168.1.254 dev wlan0 table  rt3 
        dns-nameservers 8.8.8.8 4.4.4.4

Notre réseau est à présent prêt a utiliser notre plateforme SMS. De plus nous pouvons configurer le filtrage MAC à l'aide de notre panneau de configuration sur notre dongle.

Liens connexes et annexes

  • Comment configurer 2 réseaux wifi et ethernet en interface graphique ici
  • La liste des APN et des identifiants opérateurs pour la connection du routeur avec votre carte sim ici
  • Liste des autres commandes intéressante sur la clé 4G LTE W800
  • Le plugin firefox qui sert à la désactivation du javascript ici
  • Les nouveautés sur la compatibilité de la clé W800, L800Z avec le firmware DD-WRT ici
  • Usb-modeswitch le lien officiel
  • Informations sur le driver USB-net permettant la prise en charge d'équipement propriétaire dont l'hôte RNDIS sur linux.