UMTS-Verbindung per WLAN-Teilen

Es ist Sommer. Es ist Urlaubszeit. Für viele bedeutet das, dass sie von ihrem geliebten Internetanschluss getrennt sind. Das kann natürlich auch ein Segen sein. Kann man – aus welchen Gründen auch immer – trotzdem nicht auf das Internet verzichten, bieten UMTS-Modems heutzutage eine günstige Möglichkeit für temporäres "Unterwegs_Internet".

Ich habe mich für den Surfstick von o2 entschieden, den es in einer Prepaid-Variante für 30-35€ gibt. Über das Prepaid-Guthaben kann man dann entweder für 0,9ct/min, 3,50€/Tag oder 25€/Monat surfen. Guthaben für 5 Tage ist bereits dabei. Die gewünschten Tarife kann man entweder mit der nur unter Windows laufenden mitgelieferten Software wählen, oder per SMS vom Handy.

Der Stick

Soweit ich weiss, werden alle UMTS-USB-Modems erkannt, die sich momentan im Umlauf befinden. Manchmal sind kleine Nachbesserungen notwendig. So auch bei meinem Stick. Die auf dem Stick vermerkte Bezeichnung lautet Huawei E1550, erkannt wird er allerdings als Huawei E161mit der USB-Id 12d1:1446 (lsusb). Das Problem ist, dass der Stick sobald er Strom bekommt in einen speziellen Modus wechselt, in welchem er ein CD-ROM-Laufwerk vortäuscht (welches die Treiber für Windows enthält). Der Windows-Treiber sorgt daf&¨r, dass in den Modem-Modus gewechselt wird. Das müssen wir unter Linux leider von Hand erledigen. Dazu erstellt man eine UDEV-Regel, in dem man mit root-Rechten folgende Datei anlegt:
/etc/udev/rules.d/15-huawei-e161.rules

SUBSYSTEM="usb"
SYSFS{idProduct}="1446"
SYSFS{idVendor}="12d1"
RUN+="/lib/udev/modem-modeswitch --vendor 0x12d1 --product 0x1446 --type option-zerocd"

Seit Ubuntu 9.10 (karmic) wird der Befehl modem-modeswitch von udev bereitgestellt. Unter 9.04 (jaunty) muss man dazu noch das Paket udev-extras installieren.

Steckt man nun den USB-Stick an, wird automatisch in den Modem-Modus gewechselt, wodurch sich die USB-Id in 12d1:140c ändert

Die Internetverbindung

Die Verbindung wird über den Network-Manager aufgebaut. Unter Mobiles Breitband fügt man eine Verbindung hinzu und klickt sich bis zur Auswahl des Tarifs durch. Hier sollte man darauf achten, dass man den korrekten APN für seinen Tarif nimmt. Der APN für o2-Prepaid ist nicht gelistet und lautet pinternet.interkom.de (s. Abb.). Nun sollte man über den Network-Manager eine Verbindung aufbauen können.

o2 Prepaid APN

Wird die Verbindung zwar aufgebaut, aber man kann keine Domains auflösen, epnfiehlt es sich die Verbindung nochmals zu bearbeiten und in den IPv4-Einstellungen DHCP auf "nur Adressen" zu stellen. Als DNS-Server stellt man dann einen eigenen ein. Suchmaschinen helfen da weiter. Ein beliebter offener DNS-Server ist bspw. 8.8.8.8 von Google.

Der WLAN-Access-Point

Um einen WLAN-AP zu betreiben braucht man eine WLAN-Karte, die sich in den „Master-Mode“ versetzen lässt. Ob das mit der eigenen Karte funktioniert sagt einem Google. Meine Atheros-Karte welche ich über den ath9k-Treiber betreibe, eignet sich.

Man benötigt das Paket hostapd, um die WLAN-Karte in einen AP zu verwandeln und das Paket dnsmasq, um den verbundenen Clients eine IP-Adresse zuzuweisen.

Annahmen und Ziele

  • Im folgenden gehe ich davon aus, dass die Internet-Verbindung vom Interface ppp0 angeboten wird, und dass dieses korrekt konfiguriert ist.
  • Das WLAN-Interface, welches wir zum AP machen, heisst typischerweise wlan0
  • Das WLAN-Interface des Access-Points bekommt die IP-Adresse 10.10.0.1 und als Subnetz 255.255.255.0.
  • Die Clients sollen IP-Adressen von 10.10.0.2 bis 10.10.0.150 zugewiesen bekommen.
  • Der AP bekommt die SSID MeinNetz, wird per WPA1/2 geschützt, bekommt den Schlüssel MeinSchluessel und wird auf Kanal 9 betrieben.
  • Diese Annahmen bitte den eigenen Wünschen und Begebenheiten anpassen.

Im Folgenden liste ich die anzupassenden Dateien mit den anzupassenden oder hinzuzufügenden Zeilen. Die Dateien müssen alle mit Root-Rechten angepasst werden.

hostapd Konfiguration

/etc/network/interfaces

auto wlan0
iface wlan0 inet static
address 10.10.0.1
netmask 255.255.255.0

/etc/hostapd/hostapd.conf

interface=wlan0
bridge=br0
driver=nl80211
ssid=MeinNetz
country_code=DE
ieee80211d=1
hw_mode=g
channel=9
wpa=3
# Den folgenden Wert erhaelt man unter Eingabe von
# wpa_passphrase MeinNetz MeinSchluessel
wpa_psk=ef6d1d87c6f550df91b28256b7c5abff7d0a9cb597f49389f51ec0d0d1a00d97
wpa_pairwise=TKIP CCMP

/etc/default/hostapd

RUN_DAEMON="yes"
DAEMON_CONF="/etc/hostapd/hostapd.conf"

/etc/modules

hostap
hostap_pci

dnsmasq Konfiguration

/etc/dnsmasq.conf

interface=wlan0
dhcp-range=10.10.0.2,10.10.0.150,12h

Zum Schluss muss über ein paar Firewall-Regeln dafür gesorgt werden, dass der Netzverkehr von wlan0 an ppp0 weitergeleitet wird. Damit dies dauerhaft so ist, trägt man die Regeln in die Datei /etc/rc.local vor dem exit 0 ein.

iptables -A FORWARD -i ppp0 -o wlan0 -s 10.10.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

Fertig

Da der Network-Manager noch das wlan0-Interface für sich vereinnahmt, sollte man den Rechner nun einmal neu starten. Alternativ kann man den die Dienste networking, network-manager, hostapd und dnsmasq neu starten und danach die UMTS-Verbindung aufbauen.

Falls bei einem Neustart das Icon für den Network-Manager nicht angezeigt wird, kann man ihn mit sudo restart network-manager neu starten.

Alternative Konfiguration

Will man den AP nur bei Bedarf an- und abschalten – bspw. weil man ansonsten auch das WLAN nutzen möchte, empfiehlt es sich die entspr. Dienste nicht automatisch zu starten. Dies stellt man in den Dateien /etc/default/hostapd und /etc/default/dnsmasq ein (selbsterklärend). Ich nutze zwei Skripte, um den AP zu starten oder zu stoppen. Damit diese funktionieren braucht man noch zwei Versionen der Datei /etc/network/interfaces. Eine unveränderte, welcher ich den Anhang .regular gebe und eine, welche wie oben angegeben modifiziert wurde und den Anhang .hostapd bekommt. Ausserdem sollte auch die /etc/rc.local im ursprünglichen Zustand sein. Die Skripte sehen dann so aus:

$HOME/bin/ap_start

sudo cp /etc/network/interfaces.hostapd /etc/network/interfaces
sudo /usr/sbin/hostapd -B -P /var/run/hostapd.pid /etc/hostapd/hostapd.conf
sudo /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq
sudo iptables -A FORWARD -i ppp0 -o wlan0 -s 10.10.0.0/24 -m conntrack --ctstate
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
sudo restart network-manager

$HOME/bin/ap_stop

sudo cp /etc/network/interfaces.regular /etc/network/interfaces
sudo killall hostapd
sudo killall dnsmasq
sudo restart network-manager

Mit dem ersten Skript startet man dann den AP und kann danach die Verbindung aufbauen. Mit dem zweiten stellt man den gewohnten Zustand wieder her.

¨/iquot;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.