Freifunk:Mobiler Hotspot

Aus Hacksaar Wiki
Wechseln zu: Navigation, Suche

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:

  1. Das alte WAN-Interface muss umbenannt werden, damit es nicht zu Nameskonflikten kommt. Dazu ändere die Zeile config interface 'wan' etwa in config interface 'wan2'
  2. 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:

  1. Das alte WAN-Interface muss umbenannt werden, damit es nicht zu Nameskonflikten kommt. Dazu ändere die Zeile config interface 'wan' etwa in config interface 'wan2'
  2. 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.

  1. 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
  2. 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
  3. 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.

  4. Die soeben angelegte Datei muss anschließend noch ausführbar machen:
    # chmod 755 /usr/bin/mlsc-update.sh
  5. 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
  6. 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

https://github.com/mar-v-in/mlsc