Freifunk:Mobiler Hotspot
Im Folgenden meint eine mit # beginnende Zeile, dass der entsprechende Befehl auf einer root-Shell auf dem Freifunk-Router ausgeführt werden soll. Dazu wird in der Regel SSH benutzt, dass zunächst in den Experteneinstellungen der Freifunk-Firmware aktiviert werden muss.
Autoupdater deaktivieren
Der Autoupdater sollte deaktiviert werden, bevor Änderungen am Betriebssystem des Routers vorgenommen werden. Die Änderungen an Konfigurationsdateien sollten nach einem Update zwar noch erhalten sein, es ist aber möglich, dass individuell installierte Programme bzw. Software-Pakete durch ein Autoupdate ersetzt würden.
Deaktivierung des Autoupdaters:
# uci set autoupdater.settings.enabled='0' # uci commit
Nameserver für die Einrichtung temporär eintragen
Um die Pakete zur Installation aus dem Internet zu laden, wird die /etc/resolv.conf kurzfristig um einen öffentlichen Nameserver ergänzt. In diesem Beispiel wird 8.8.8.8 von Google als Nameserver eingetragen. Dazu lösche die Datei resolv.conf
mit rm /etc/resolv.conf
und lege sie neu an mit folgendem Inhalt:
search lan nameserver 127.0.0.1 nameserver 8.8.8.8
Einrichtung eines USB-3G/LTE-Dongles mit Gluon
USB-Dongles erlauben es, einen Freifunk-Router wie den TP-Link WDR4300 auch mobil zu benutzen, sofern für Stromversorgung gesorgt ist. Da sich die USB-Dongles teilweise sehr stark in Ihrer Funktionalität unterscheiden, müssen Sie auch je nach Modell anders angesteuert werden.
Die Freifunk-Firmware kommt ohne USB-Unterstützung. Diese kann aber nachträglich installiert werden:
# opkg update # opkg install kmod-usb-core kmod-usb2 libusb-1.0 usb-modeswitch usbreset
Nach der Installation ist ein Neustart des Routers erforderlich: # reboot && exit
Bei erfolgreicher Installation sollte jetzt die Datei /sys/kernel/debug/usb/devices
existieren und nicht leer sein. Je nach Router-Modell können auch andere Pakete erforderlich sein.
An dieser Stelle noch der Hinweis: ein Freifunk-Netz kann sehr viel Traffic erzeugen, es ist also ratsam, einen ausreichenden Mobilfunkvetrag zu haben. Im folgenden nehmen wir zudem immer an, dass eine SIM-Karte ohne PIN verwendet wird, da dies die Konfiguration teilweise enorm vereinfacht.
Je nach Art des UMTS-Sticks gibt es unterschiedliche Betriebsarten. Es ist wichtig, im nächsten Kapitel nur die für deinen Stick passende Konfiguration vorzunehmen, also entweder 'PPP bei Nutzung von comgt' oder 'rndis'.
USB-3G-Dongle mit PPP bei Nutzung von comgt
Getestet mit Huawei E1550, Huawei E1750
Besonders ältere 3G-Dongles benutzen zur Einwahl PPP(oE). Das Tool comgt, dass in den Repositories von OpenWRT liegt, nimmt dabei die meiste Arbeit ab. Zum Test wurde hier ein Huawei E1750 Dongle benutzt.
# opkg update # opkg install chat comgt kmod-ppp kmod-pppoe kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan ppp ppp-mod-pppoe
Nach der Installation ist ein Neustart des Routers erforderlich: # reboot && exit
Ab hier sollte der USB-Dongle eingesteckt sein (falls er es vorher noch nicht war). Prüfe zunächst ob der Stick korrekt erkannt wurde:
# usbmode -l # ls /dev/ttyUSB* # gcom info -d /dev/ttyUSB0
Der erste Befehl sollte in den meisten Fällen dein Gerät anzeigen, bei einigen Geräten ist dies aber nicht der Fall und sie funktionieren trotzdem. Beim zweiten Befehl sollte mindestens ein ttyUSB*
Gerät anzeigen, häufig sind es auch mehrere. Im Folgenden wird angenommen, dass ttyUSB0
vorhanden und zur Modemkommunikation geeignet ist. Wenn es mehrere sind, kann auch einer der anderen ttyUSB* Gerät das richtige sein. Um das rauszufinden, ist der dritte Befehl geeignet: Bei dem richtigen Gerät sollte es Gerätedaten wie z.B. die IMEI anzeigen.
Anschließend muss die Konfiguration in /etc/config/network
zum Beispiel mit dem Text-Editor vi angepasst werden:
- Das alte WAN-Interface muss umbenannt werden, damit es nicht zu Nameskonflikten kommt. Dazu ändere die Zeile
config interface 'wan'
etwa inconfig interface 'wan2'
- Nun legen wir ein neues WAN-Interface an, füge dazu am Ende der Datei hinzu:
config interface 'wan' option proto '3g' option device '/dev/ttyUSB0' option service 'umts' option dialnumber '*99#' option auto '0' option apn 'internet'
Je nach Provider können hier bei apn und dialnumber andere Werte angegeben werden, die obigen sind aber in den meisten Fällen korrekt.
Da die meisten USB-Dongles eine gewisse Zeit zum Hochfahren benötigen, fahren wir das Interface nicht beim booten hoch (auto steht auf '0'). Um es 90 Sekunden später anzuschalten, füge in die Datei /etc/rc.local
vor exit 0
diese Zeilen ein:
sleep 90 ifup wan
Zu guter Letzt ist es noch nötig ein Problem mit der Firewall zu umgehen, damit DNS-Anfragen von fastd über das neue Interface geleitet werden können. Dazu lösche die Datei resolv.conf
mit rm /etc/resolv.conf
und lege sie neu an mit folgendem Inhalt:
search lan nameserver 127.0.0.1 nameserver 127.0.0.2
Nach einem Neustart sollte sich der Freifunk-Router über den 3G-Dongle ins Internet einwählen. Bis alles läuft können durchaus ein paar Minuten nach Anschalten vergehen.
USB-3G-Dongle mit rndis (cdc-ether)
Getestet mit Huawei E303, ZTE MF667
# opkg update # opkg install kmod-mii kmod-usb-net kmod-usb-net-rndis kmod-usb-net-cdc-ether
Nach der Installation ist ein Neustart des Routers erforderlich: # reboot && exit
Ab hier sollte der USB-Dongle eingesteckt sein (falls er es vorher noch nicht war).
Anschließend muss die Konfiguration in /etc/config/network
zum Beispiel mit dem Text-Editor vi angepasst werden:
- Das alte WAN-Interface muss umbenannt werden, damit es nicht zu Nameskonflikten kommt. Dazu ändere die Zeile
config interface 'wan'
etwa inconfig interface 'wan2'
- Nun legen wir ein neues WAN-Interface an, füge dazu am Ende der Datei hinzu:
config interface 'wan' option proto 'dhcp' option ifname 'eth1' option auto '1'
Nach einem Neustart sollte sich der Freifunk-Router über den 3G-Dongle ins Internet verbinden.
Ortung durch umgebende WLAN-Netze
Ähnlich wie Smartphones kann auch der Freifunk-Router eine Selbstortung auf Basis umliegender WLAN-Netze durchführen, zum Beispiel mit Hilfe der Mozilla Location Services. Damit diese Ortung auf der Karte sichtbar ist und dort automatisch eingetragen wird, müssen einige Modifikation durchgeführt werden:
Diese Methode wurde ausschließlich auf Gluon 2016.1 (Freifunk Saar Firmware 1.2 und neuer) getestet. Eine Anleitung für ältere Gluon-Versionen kann in der Versiongeschichte dieses Artikels gefunden werden.
- Prüfe zunächst, wieviel Speicherplatz auf dem Gerät verfügbar ist:
# df -h
Wenn weniger als 1M Speicherplatz vorhanden ist, springe zu Schritt 3 - Installiere das "mlsc"-Paket. Du kannst es hier herunterladen (für Gluon 2016.1 die Version 15.05) und dann zum Beispiel mit
scp
in dem/tmp
-Ordner des Routers kopieren. Zum installieren führe dann folgende Befehle aus:# opkg update # opkg install /tmp/mlsc_1_ar71xx.15.05.ipk
- Erzeuge die Datei
/usr/bin/mlsc-update.sh
und füge dort folgendes ein:#!/bin/sh DEV=client0 BIN=/usr/bin/mlsc mlsc=$BIN # Some devices have only about 4MB of flash and/or are not suitable to hold the mbed TLS library on flash. # We thus provide a download for it and mlsc in a memory only package. If you install the mlsc ipk, you can # safely remove or ignore the upper part of this script. HACKPACK="http://mgmt.ffsaar/mlsc/mempack-1.tar.gz" HACKDIR="/tmp/mlsc" HACKHASH="00df4730ba87edf4c5c65a8c54acf6a2604810bb83fa6e7e48f30f289dad6e8712bd982f2c4992f7a35660cd969932c13c7d532c99eec25a31bb94299db47819" if ! [ -f "$BIN" ]; then mlsc="" mkdir -p "$HACKDIR" > /dev/null if ! [ -f "$HACKDIR/mlsc" ]; then if ! [ -f "$HACKDIR/mempack.tar.gz" ]; then wget "$HACKPACK" -O "$HACKDIR/mempack.tar.gz" fi hash=`sha512sum "$HACKDIR/mempack.tar.gz" | awk '{print $1}` if [ "$hash" = "$HACKHASH" ]; then tar xzf "$HACKDIR/mempack.tar.gz" -C "$HACKDIR" else rm "$HACKDIR/mempack.tar.gz" fi fi if [ -f "$HACKDIR/mlsc" ]; then mlsc="env LD_LIBRARY_PATH=$HACKDIR $HACKDIR/mlsc" fi fi if [ "$mlsc" != "" ]; then echo "Executing '$mlsc $DEV'" res=`$mlsc $DEV` accuracy=`echo "$res" | lua -e "io.write(math.floor(require('luci.jsonc').parse(io.read('*line')).accuracy))"` if [ "$accuracy" -lt 250 ]; then lat=`echo "$res" | lua -e "io.write(require('luci.jsonc').parse(io.read('*line')).location.lat)"` uci set gluon-node-info.@location[0].latitude="$lat" lng=`echo "$res" | lua -e "io.write(require('luci.jsonc').parse(io.read('*line')).location.lng)"` uci set gluon-node-info.@location[0].longitude="$lng" echo "Setting location to $lat, $lng" uci set gluon-node-info.@location[0].share_location=1 else echo "Accuracy is $accuracy meters. Locating failed." uci set gluon-node-info.@location[0].share_location=0 fi else echo "No mlsc provided and low space hack was not possible, try again later" uci set gluon-node-info.@location[0].share_location=0 fi uci commit gluon-node-info
Hinweis: obiges Skript enthält eine URL die ausschließlich aus dem Freifunk Saar Netz erreichbar ist. Wenn mlsc nicht in Schritt 2 installiert wurde und der Router nicht im Freifunk Saar Netz betrieben wird, muss das Skript entsprechend angepasst werden. Der Download hinter dem Pfad ist hier aus dem öffentlichen Internet zu erreichen.
Derkey=test
sollte im Regelbetrieb nicht benutzt werden, frage bei Mozilla nach einem geeigneten API key. - Die soeben angelegte Datei muss anschließend noch ausführbar machen:
# chmod 755 /usr/bin/mlsc-update.sh
- Aktiviere die Selbstortung in dem du die Datei
/usr/lib/micron.d/mlsc-update
anlegst und dort die folgende Zeile einfügst*/5 * * * * /usr/bin/mlsc-update.sh
- Fertig: Die Ortung sollte automatisch alle 5 Minuten ausgeführt werden. Du kannst sie auch direkt durchführen:
# mlsc-update.sh
Notizen
ebtables
PUBLIC_NET=mesh-vpn ebtables -t filter -F IN_ONLY ebtables -t filter -A IN_ONLY -i ! $PUBLIC_NET --logical-in br-client -j DROP ebtables -t filter -F OUT_ONLY ebtables -t filter -A OUT_ONLY --logical-out br-client -o ! $PUBLIC_NET -j DROP