Freifunk:Mobiler Hotspot: Unterschied zwischen den Versionen

Aus Hacksaar Wiki
Zur Navigation springen Zur Suche springen
Zeile 49: Zeile 49:
 
ifup wan</pre>
 
ifup wan</pre>
  
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 <code>resolv.conf</code> mit <code>rm /etc/resolv.conf</code> und lege sie neu an mit folgendem Inhalt:
+
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 <code>resolv.conf</code> mit <code>rm /etc/resolv.conf</code> und lege sie neu an mit folgendem Inhalt:
 
<pre>search lan
 
<pre>search lan
 
nameserver 127.0.0.1
 
nameserver 127.0.0.1

Version vom 24. April 2015, 12:50 Uhr

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.

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.

USB-3G-Dongle mit PPP bei Nutzung von comgt

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 meißten Fällen dein Gerät anzeigen, bei einigen Geräten ist dies aber nicht der Fall und sei 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 ist und zur Modemkommunikation geeignet. 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 meißten Fällen korrekt.

Da die meißten 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.

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:

  1. Installiere zunächst einige Abhängigkeiten:
    # opkg update
    # opkg install libiwinfo-lua curl
  2. Editiere die Datei /lib/gluon/announce/nodeinfo.d/location und füge dort am Ende folgendes ein:
    if uci:get_first('gluon-node-info', 'location', 'use_mls', false) then
        local ifname = "wlan0"
        local iwinfo = require("iwinfo")
        local data = iwinfo[iwinfo.type(ifname)]
    
        local rlist = {}
        for _, cell in ipairs(data["scanlist"](ifname)) do
            if cell.signal > -100 and cell.signal < 20 then
                table.insert(rlist, '{"macAddress": "' .. cell.bssid .. '", "signalStrength": "' .. cell.signal .. '"}')
            end
        end
        local request = '{"wifiAccessPoints": [' .. table.concat(rlist, ',') .. ']}'
    
        local f = io.popen("curl -k -d '" .. request .. "' 'https://location.services.mozilla.com/v1/geolocate?key=test'")
        local line = f:read()
        local json = require 'luci.json'
        local decode = json.decode(line)
        return {
            latitude = tonumber(decode.location.lat),
            longitude = tonumber(decode.location.lng),
            accuracy = tonumber(decode.accuracy),
        }
    end
    Der key=test sollte im Regelbetrieb nicht benutzt werden, frage bei Mozilla nach einem geeigneten API key.
  3. Aktiviere die Selbstortung:
    # uci set gluon-node-info.location.share_location='0'
    # uci set gluon-node-info.location.use_mls='1'