Freifunk:Mobiler Hotspot: Unterschied zwischen den Versionen

Aus Hacksaar Wiki
Zur Navigation springen Zur Suche springen
Zeile 145: Zeile 145:
 
ebtables -t filter -A OUT_ONLY --logical-out br-client -o ! $PUBLIC_NET -j DROP
 
ebtables -t filter -A OUT_ONLY --logical-out br-client -o ! $PUBLIC_NET -j DROP
 
</pre>
 
</pre>
 +
 +
https://github.com/mar-v-in/mlsc
  
 
[[Kategorie:Freifunk]]
 
[[Kategorie:Freifunk]]

Version vom 1. Juli 2015, 19:11 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.

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:

  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

# 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:

  1. Installiere zunächst einige Abhängigkeiten:
    # opkg update
    # opkg install libiwinfo-lua curl libpolarssl
  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'
    # uci commit

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