Anleitung zur Nutzung eines FONIC-Surfsticks unter Linux

Inhaltsübersicht

Hintergrund

Die Firma FONIC GmbH (www.fonic.de) vertreibt in Deutschland einen Surf-Stick (über USB anschließbares Mobilfunk-Modem zum Internet-Zugang) mit einem Prepaid-Tarif.

Anleitungen zur Nutzung dieses Produkts werden von FONIC nur für Microsoft Windows und Apple Mac OS angeboten; die Verwendbarkeit unter Linux wird zwar zugesichert, Unterstützung durch FONIC dafür aber ausdrücklich ausgeschlossen.

Erfreulicherweise haben nun bereits ein paar Personen solche Geräte unter Linux zum Laufen gebracht und ihre Erfahrungen damit im Internet veröffentlicht. Mir persönlich war aber keine der von mir gefundenen Anleitungen ausreichend um zu verstehen, wie man diesen Surfstick unter Linux technisch und tariflich richtig bedient; zudem hatte ich ein paar unerwartete Probleme, die ich nirgendwo erwähnt fand. Das vorliegende Dokument soll dazu beitragen, diese Lücken zu schließen.

Voraussetzungen

Diese Beschreibung richtet sich an Personen, die ein gewisses technisches Verständnis von Software besitzen. Dies ist keine Anleitung für Linux-Neulinge oder jemanden, der erwartet, dass man die Handbuchseiten des eigenen Systems nicht zu lesen braucht. Ich stelle mir vor, dass ein Leser ungefähr Kenntnisse auf dem Niveau eines Systemadministrators für UNIX-Rechner hat. Dies soll keineswegs implizieren, dass man solche Kenntnisse zur Nutzung eines Surfsticks benötigt, sondern nur klarstellen, was ich bei diesen Erläuterungen als bereits bekannt voraussetze.

Man beachte ferner bitte, dass ich keinerlei Garantie gebe, dass das hier geschilderte Vorgehen auf anderen Systemen genauso funktionieren wird, wie es das bei mir tat. Wer dieser Beschreibung folgt, tut das also auf eigenes Risiko.

Die folgenden Aussagen beziehen sich auf einen Surfstick, wie ich ihn im September 2010 von FONIC erworben habe. Bei der Hardware handelte es sich um das Modell E1550 der Firma Huawei Technologies.

Ich gehe davon aus, dass man ein laufendes Linux-System mit der nötigen Infrastruktur zur Kompilierung von Software hat. Meine Tests habe ich auf Debian 5.0 (lenny) durchgeführt, aber andere aktuelle Linux-Distributionen sollten meines Erachtens nicht signifikant unterschiedliche Erlebnisse bescheren.

Die folgenden Software-Komponenten sollte man zur Verfügung haben:

Soweit man eine Linux-Distribution nutzt, die die benötigte Software bereits fertig paketiert enthält, sollte man es zunächst mit diesen Software-Ständen versuchen. Dieses Vorgehen erspart einem eventuell die manuelle Installation weiterer sonst für eine Quellcode-Kompilierung notwendiger Pakete.

Erster Kontakt mit der Hardware

Als erstes sollte man den Surfstick (das geht auch ohne eingelegte SIM-Karte) in einen USB-Port stecken und sich ansehen, was das System dann macht. Wenn der Kernel den Surfstick erkennt, findet man in der Regel entsprechende Einträge im syslog. Bei meinem Surfstick sieht man u.a.:

    usb 5-7: New USB device found, idVendor=12d1, idProduct=1446
    ...
    usb 5-7: Product: HUAWEI Mobile
    ...
    scsi 1:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
    scsi 2:0:0:0: Direct-Access     HUAWEI   MMC Storage      2.31 PQ: 0 ANSI: 2

Hier ist noch nichts von einem Mobilfunk-Modem zu sehen. Stattdessen findet man ein als CD-Laufwerk klassifiziertes Gerät (CD-ROM HUAWEI Mass Storage) und einen Speicherkartenleser (Direct-Access HUAWEI MMC Storage). Auf dem CD-Laufwerk ist die Software abgelegt, die man unter Windows und Mac OS zur Nutzung des Surfsticks verwenden soll. Bei meinem Exemplar war keine Linux-relevante Software oder Anleitung dabei, aber ich empfehle trotzdem, das Laufwerk zu mounten und sich anzusehen, ob das beim eigenen Exemplar anders ist.

Man kann die Identifikation des Sticks natürlich auch von der Kommandozeile aus abfragen:

    $ lsusb
    ...
    Bus 005 Device 003: ID 12d1:1446 Huawei Technologies Co., Ltd.
    ...

Die in diesem Fall vom Surfstick gezeigte Produkt-Identifikation (1446) identifiziert das Modell übrigens nicht eindeutig; die gleiche Nummer wird auch von Leuten berichtet, die ein anderes Modell als E1550 haben (z.B. das ältere E161).

Falls man usb-modeswitch und usb-modeswitch-data installiert hat, wird man vermutlich bereits jetzt statt der ID 12d1:1446 die ID 12d1:140c sehen. In dem Fall kann man den nächsten Abschnitt dieser Beschreibung ignorieren und hier weiterlesen.

Modem zugänglich machen

Ohne installiertes USB_ModeSwitch und so, wie der Surfstick ausgeliefert wird, ist zunächst keine für Mobilfunk relevante Komponente des Sticks unter Linux sichtbar. Dieser Surfstick gehört nämlich zu einer Klasse von USB-Geräten, deren Verhalten man umschalten kann; die Grundidee dahinter scheint zu sein, dass man sicherstellen möchte, dass nur die mitgelieferte Software für den Zugriff genutzt wird. Diese Software kann von einer simulierten CD des Geräts installiert werden und schickt danach bestimmte Kommandos an das Gerät, damit es seine angebotene Funktionalität ändert.

Unter Linux kann man zur Übergabe solcher Kommandos USB_ModeSwitch verwenden. Problematisch ist allerdings, dass die Form dieser Kommandos anscheinend weder standardisiert ist noch vom jeweiligen Hersteller offengelegt wird. Damit ergibt sich für den Anwender ein Risiko: ist kein Kommando bekannt, mit dem nicht zumindest das Modem sichtbar wird, ist der Surfstick nicht benutzbar.

Zum Glück haben inzwischen etliche fleißige Leute eine Reihe von Kommandos für diverse Geräte ermittelt und im Paket usb-modeswitch-data für uns verfügbar gemacht. Dazu gehört auch der Surfstick Huawei E1550.

Manuell

Mit dem Aufruf

    usb_modeswitch --default-vendor 0x12d1 --default-product 0x1446  \
      --message-content 55534243123456780000000000000011060000000000000000000000000000

(als root; ein paar andere Werte für message-content funktionieren auch) erreicht man, dass der Stick seine Identität ändert, wofür er etwa 6 Sekunden braucht:

    $ lsusb
    ...
    Bus 005 Device 003: ID 12d1:140c Huawei Technologies Co., Ltd.
    ...

Im syslog sieht man, dass jetzt auch 4 Modem-Devices entdeckt werden, für die bei aktuellen Linux-Distributionen auch gleich Dateien in /dev angelegt werden:

    usb 5-7: New USB device found, idVendor=12d1, idProduct=140c
    ...
    usb 5-7: Product: HUAWEI Mobile
    ...
    usbserial: USB Serial support registered for GSM modem (1-port)
    option 5-7:1.0: GSM modem (1-port) converter detected
    usb 5-7: GSM modem (1-port) converter now attached to ttyUSB0
    option 5-7:1.1: GSM modem (1-port) converter detected
    usb 5-7: GSM modem (1-port) converter now attached to ttyUSB1
    option 5-7:1.2: GSM modem (1-port) converter detected
    usb 5-7: GSM modem (1-port) converter now attached to ttyUSB2
    option 5-7:1.3: GSM modem (1-port) converter detected
    usb 5-7: GSM modem (1-port) converter now attached to ttyUSB3
    ...
    scsi 7:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
    scsi 8:0:0:0: Direct-Access     HUAWEI   MMC Storage      2.31 PQ: 0 ANSI: 2

Falls sich nur die Identität des Sticks ändert aber keine Modems erkannt werden, fehlt möglicherweise option.ko im Kernel oder der Kernel ist zu alt, um den Stick zu erkennen.

Man sollte sich auch ansehen, was die Zugriffsrechte auf die Modem-Gerätedateien sind. Sie sollten so gewählt worden sein, dass alle Anwender, die den Surfstick nutzen wollen, lesend und schreibend zugreifen dürfen.

Automatisch

Aktuelle Linux-Distributionen verwenden üblicherweise udev, um zur vorhandenen Hardware passende Einträge in /dev anzulegen. Die dahinterstehende Ereignisverarbeitung für das Stecken und Ziehen von Geräten lässt sich aber auch für zusätzliche Aktionen wie den Wechsel des USB-Modus nutzen.

Dazu muss man in einem der udev-Regel-Verzeichnisse (üblicherweise /etc/udev/rules.d) eine Datei mit einem Inhalt wie

    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1446", RUN:="Pfadname"

anlegen, wobei Pfadname zum Beispiel ein Shell-Skript bezeichnen kann, das den im vorigen Abschnitt geschilderten Aufruf an usb_modeswitch durchführt. (Ein separates Skript ist sinnvoll, denn bei mir reagierte udev typischerweise ab dem zweiten Einstecken nicht und ich musste das Skript direkt aufrufen; in ein paar Fällen verschwand dieses Problem auch ohne Reboot wieder.) Danach sollte man udevadm control --reload_rules ausführen.

Falls man usb-modeswitch-data installiert hat, sind solche udev-Regeln bereits vorhanden.

Permanent

Es soll auch möglich sein, den Surfstick so zu konfigurieren, dass er sich gleich mit seiner Modem-Identität meldet (beschrieben z.B. hier oder hier). Dazu benötigt man aber erst einmal Zugriff auf das Modem.

Dies ist also nur von Interesse, wenn man es gar nicht schafft, den Surfstick unter Linux umzuschalten, oder wenn man sich nicht weiter über udev ärgern will oder wenn man nach dem Einstecken des Surfsticks ein paar Sekunden einsparen möchte.

Modem-Befehle

Der Huawei E1550 kann mit der üblichen Art von Modem-Befehlen (AT-Kommandos, Hayes-Modem Befehlssatz) angesprochen werden.

Im Unterschied zu anderen Herstellern scheint Huawei keine Beschreibung herauszugeben, welche Modem-Befehle von den eigenen Produkten unterstützt werden. Ich fand beispielsweise in einem Support-Forum von Huawei einen Eintrag, wo jemand nach einer solchen Beschreibung fragte, und als Antwort nur die Rückfrage bekam, wozu er das denn brauche.

Man sollte sich daher an den von der International Telecommunication Union (ITU) in der ITU-T-Empfehlung V.250 für alle Modems und speziell an den vom 3rd Generation Partnership Project (3GPP) für Mobiltelefone standardisierten Modem-Befehlen (vor allem TS 27.005 und 27.007) orientieren. Immerhin implementiert der Huawei E1550 das Kommando +CLAC (List all available AT commands) aus TS 27.007, es wird aber erst nach Eingabe der PIN akzeptiert.

Mein Surfstick reagiert nur bei den Gerätedateien /dev/ttyUSB0 und /dev/ttyUSB3 auf Modem-Befehle. Ich bin mir nicht sicher, wozu /dev/ttyUSB3 gedacht ist; man sieht dort aber auch schon vor der PIN-Eingabe fortlaufend Meldungen, vor allem zur Stärke des empfangenen Signals. Die Eingabe der PIN und die Aufnahme der Verbindung zum Internet habe ich über /dev/ttyUSB0 durchgeführt.

Bei meinem Rechner gab das Kernel-Modul usbserial aus Linux 2.7.27.53 zunächst Warnungen aus, wenn man auf das Modem zugriff (aus den Funktionen serial_write_room() und serial_write()). Die Meldungen suggerierten, dass das auf einem Konflikt mit dem Treiber-Modul nvidia 173.14.27 des X-Servers zurückging. Als ich den X-Server stattdessen mit dem quelloffenen Treiber nv startete, unterblieben diese Warnungen. Das gleiche Ergebnis erreichte ich, indem ich Kernel und NVIDIA-Treiber mit GCC 4.1 statt GCC 4.3 kompilierte. Allerdings erhielt ich später auf einem zweiten System ohne NVIDIA-Hardware oder -Software anfangs ähnliche Meldungen. Damit kann ich nicht sagen, was die eigentliche Ursache dieser Warnungen ist und warum sie bei mir nicht mehr auftreten.

PIN eingeben

Die SIM-Karte des Surfsticks wird von FONIC mit aktivierter PIN-Abfrage ausgeliefert. Die PIN kann über einen Modem-Befehl eingegeben werden:

    AT+CPIN=PIN

Sie müssen die Zeichenkette PIN durch Ihre PIN ersetzen.

Ein chat-Skript, wie ich es in meiner Umgebung verwendet habe, findet man hier. Für die Nutzung beachte man bitte den Kommentar am Anfang des Skripts.

Warten auf die Aktivierungsbenachrichtigung

Beim FONIC-Tarif soll man sich nach dem Einbuchen nicht sofort mit dem Internet verbinden sondern abwarten bis nach Empfang einer SMS-Bestätigung über die Aktivierung der Internet-Tagesflatrate. Diese Nachricht soll innerhalb von wenigen Minuten eintreffen.

Damit ist eine Bestätigung der Tarif-Option Internet-Tagesflatrate (d.h. des FONIC Surf-Tarifs) gemeint, die man über SMS ein- und ausschalten kann. Anscheinend senden Windows- und Mac-OS-Software bei jedem Einbuchen entsprechende Aktivierungs-Aufforderungen an FONIC, um den Nutzer vor unliebsamen pekuniären Überraschungen zu schützen.

Falls man die SIM-Karte nicht auch noch für andere Zwecke einsetzt und diese Einstellung daher unverändert lässt, muss man also nur beim ersten Einbuchen nach dem Kauf darauf achten, dass man eine solche Bestätigung erhalten hat, bevor man das erste Mal ins Internet geht. Danach ist ein Abwarten unnötig (und vergeblich).

Verbindung mit dem Internet

Um sich über ein paketvermitteltes Mobilfunknetz mit dem Internet zu verbinden, nutzt man in der Regel einen Access Point, mit dem man über das Point-to-Point-Protokoll eine Verbindung zum Internet herstellen kann. So ist es auch bei FONIC.

Die folgende Beschreibung ist spezifisch für IPv4. Mir ist nicht bekannt, ob man bei FONIC auch eine IPv6-Verbindung herstellen kann. Bei FONIC erhält der Surfstick aber eine IPv4-Adresse aus dem privaten Bereich 10.0.0.0/8, so dass offenkundig Network Address Translation (NAT) eingesetzt wird. Damit sollte man vor den Folgen der Überfüllung des IPv4-Adressraums geschützt sein. Allerdings ist der Surfstick so aus dem Internet heraus praktisch gar nicht direkt ansprechbar – was aber auch einige Angriffe verhindert.

Einwahl beim Access Point

Wenn man sich bei FONIC möglichst ähnlich wie bei leitungsgebundenen Zugängen mit dem Internet verbinden möchte, sind die folgenden Informationen ausreichend:

Die Modem-Befehle für die Einwahl können dann so aussehen:

    AT+CGDCONT=1,"IP","pinternet.interkom.de"
    ATDT*99#

Ein chat-Skript, wie ich es in meiner Umgebung für die Einwahl verwendet habe, findet man hier.

pppd-Konfiguration

Für die Konfiguration von pppd muss man eigentlich nur wissen, dass bei FONIC für PPP weder ein Benutzername noch ein Passwort erforderlich ist. Die folgenden pppd-Optionen haben bei mir ausgereicht:

    /dev/ttyUSB0
    modem
    crtscts
    lock
    connect "/usr/sbin/chat -f chat-Skript"
    noauth
    noipdefault
    defaultroute
    noreplacedefaultroute
    noproxyarp
    usepeerdns

Für chat-Skript ist dabei der Pfadname eines chat-Skripts einzusetzen, das die Einwahl in den Access Point durchführt, wie es im vorigen Abschnitt beschrieben ist.

Nützliche Links

Die folgenden Links waren im September 2010 neben den im Text zitierten bei der ersten Erstellung dieser Seite hilfreich:


Zurück zur Einstiegsseite