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
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 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
# 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:
- Installiere zunächst einige Abhängigkeiten:
# opkg update # opkg install libiwinfo-lua curl
- 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
Derkey=test
sollte im Regelbetrieb nicht benutzt werden, frage bei Mozilla nach einem geeigneten API key. - Aktiviere die Selbstortung:
# uci set gluon-node-info.location.share_location='0' # uci set gluon-node-info.location.use_mls='1'