Berlin:Standorte:Emmauskirche

Aus wiki.freifunk.net
Wechseln zu: Navigation, Suche
Die Karte wird geladen …
Koordinaten: 52° 29' 59", 13° 25' 52"
Karten: OWM,OSM, GMaps
Knoten: emma-core (OWM, Hopglass, Monitor), emma-nno-2ghz (OWM, Hopglass, Monitor), emma-nnw-2ghz (OWM, Hopglass, Monitor), emma-oso-2ghz (OWM, Hopglass, Monitor), emma-sso-2ghz (OWM, Hopglass, Monitor), emma-wnw-2ghz (OWM, Hopglass, Monitor), emma-wsw-2ghz (OWM, Hopglass)
über NN: 87
Adresse: Lausitzer Platz 8a, 10997 Berlin
Homepage: http://www.emmaus.de/emmaus.html
Ansprechpartner: Philipp (Freifunk), Thomas (Hausmeister), Dirk (Ton-Technik Emmaus)
Community: Berlin

Emmauskirche

Durchmesser 7,34 Meter, Grafik von Lui's Site
Rohre und anderes Material wartet auf dem Seilaufzug
Auf dem Turm besteht Helmpflicht, insb. auf den letzen Metern

Ein PDF mit Himmelsrichtungen, Benennungen und Bemaßungen: Datei:Emmaus.pdf

Allgemein

Die Emmaus-Kirche ist die zentrale Kircheninstallation im nordöstlichen Kreuzberger Kiez mit zahlreichen Verbindungen in andere Stadtteile, wie Friedrichshain, Neukölln und Treptow. Ziel der Modernisierung war die Wiederherstellung des Standortes als Zentraler Knotenpunkt mit Verbindungen im 2,4 und 5 GHz Bereich in alle 8 Richtungen der Turmfenster, sowie das Angebot von freien WLAN Zugang im Umfeld der Kirche und in Richtung Görlitzer Park.

Log

  • 08.10.2013 - Erste Begehung im Rahmen der MABB-Förderung. Bestandsaufnahmen, Router-Reset (Phillipp)
  • 26.11.2013 - Demontage der alten Hardware, Montage der 8 Antennenträger (Phillipp, Sven-Ola, Yves, Boris, Tom)
  • 17.12.2013 - Schaltkasten-Demontage, Rohrmontage Teil 1 (Sven-Ola, Faustus, Phillipp)
  • 18.12.2013 - Rohrmontage Teil 2 inkl. 220V verdrahten (Sven-Ola, Faustus)
  • 23.12.2013 - Material herunterschaffen, Fegen (Sven-Ola)
  • 07.01.2014 - [Faustus veröffentlich seine Fotos]
  • 06.02.2014 - Stippen ziehen mit Hajo, Faustus und Ulf. Alle Geräte angebaut. Interview mit RTL.
  • 20.02.2014 - Rest auflegen mit Ulf. Nochmal RTL. Switches und Router eingebaut und verkabelt.
  • 21.02.2014 - Material und Werkzeug herunterschaffen, verstöpseltes korrigieren (Sven-Ola)
  • 08.12.2014 - IP-Umstellung von 104.0.2.0/24 auf 10.230.23.0/24 10.31.11.0/24 und 2001:bf7:830:700::/56 2001:bf7:831::/56 steht an.
  • 24.12.2014 - Setup Relaunch (Faustus, Diana)
    • Firmware auf allen NSM2 und dem Core-Router auf Kathleen Booth v0.0.0 aktualisiert
    • Core-Router ausgetauscht (13393101433 131B5402138)
    • Setup überarbeitet und IPv4 auf das neue 10er-Subnet umgestellt (10.31.11.0/24)
    • IPv6 wegen Doppelbelegung von 2001:bf7:830:700::/56 auf 2001:bf7:831::/56 migriert
    • Switches ausgetauscht (4x TP-Link TL-SG105 4x Ubiquiti ToughSwitch 5-Port)
    • die AirOS Devices und Switches werden nun per DHCP geconft
    • festgestellt dass die Glocken da oben wirklich laut sind!

MABB Projektnachweisfotos

Jaja - die sind viel zu unscharf. War halt schon fast Sonnenuntergang - Fotos entstanden in einer eiligen Aktion mit dem Mobiltelefon - beim letzten Schnellaufstieg zum Drücken des Failsafe-Knopfes am Core-Router. Wir brauchen noch ein Drückdings ;-)

Fenster NNW
Fenster NNO
Fenster WNW
Kasten NW
Schrank NO
Fenster ONO
Fenster WSW
Kasten SW
Schrank SO
Fenster OSO
Fenster SSW
Fenster SSO

Turm-Aufstieg/Wartung

Für Wartungsarbeiten bitte rechtzeitig bei Thomas einen Termin vereinbaren. Für einen Aufstieg braucht es mindestens zwei Personen. Einzelpersonen werden nicht auf den Turm gelassen. Außerdem sollte es nicht stürmen! Im Turm besteht Helmpflicht. Helme befinden sich im Turm. Auf der Zwischenebene befindet sich eine Luke, die geschlossen wird, sobald man durch ist (Hin- und Rückweg). Werkzeug kann in einem Korb/Eimer per Seilzug von der Zwischenebene auf die letzte Ebene verfrachtet werden.

Bestandsaufnahme

Die derzeitige Freifunk-Installation besteht im wesentlichen aus 5 Kästen: 1 Plastik-Kasten mit Stromzähler am Strom-Zuführungspunkt mit Handy-Reset-Elektrik und 4 gut erhaltene Metall-Kästen mit je einer kleinen 2er-Steckdosenleiste und 2 WRT54G. Die 5 Kästen sind untereinander mit Mantelleitung verbunden (220V). Von den 4 Metall-Kästen gehen Antennenleitungen zu den 8 Fenstern, an deren Gitter-Außenseite Selbstbau-Doppelbiquad-Antennen befestigt sind. Zusätzlich gibt mind. eine 5Ghz Antenne in Richtung Zwingli-Kirche mit Meshcube. Die WRT54G sind wohl noch funktional, aber die Antennenleitungen sind mit Sicherheit voller Wasser. Ein altes Problem: eingedrungenes Regenwasser zieht sich mit Kapillarwirkung durch die Leitung und dämpft den Funk so weit, dass es fast unbenutzbar ist.

Vorläufiges Fazit: die WRT54G und die Selbstbau-Antennen sind evt. noch brauchbar, sollten aber ersetzt werden. Einlagern oder wegwerfen. Der Kasten mit den Stromzähler und der Reset-Schaltung hat sich nicht bewährt. Einerseits hat sich niemand wegen der Stromrechnung beschwert, andererseits erfordert die Reset-Schaltung regelmäßiges Aufladen der SIM-Karte. Dieser Kasten sollte abgebaut werden da zusätzliche Komponenten zusätzliche Fehlerquellen sind - die unterbrochene Stromleitung könnte mit einer Muffe überbrückt werden. Die 4 Metall-Kästen mit den 220V-Steckdosen können prima weiterverwendet werden. Eine Montage von Ubiquity-Equipment an der Außenseite der Fenstergitter ist nicht empfehlenswert (Windlast!). Wenn möglich, sollte die "frei fliegenden" Mantelleitungen mit Panzerrohr gesichert werden. Fotos siehe oben, "Emmaus 2013".

Installation

Router und Antennen befinden sich in den vergitterten Fenstern. Strom, Switch etc. befinden sich in den Schaltschränken, die mit einem Universal-Schaltschrank-Schlüssel geöffnet werden können. Diese Kästen sind nicht groß genug für einen 24x Switch. Bei zwei 8x Switches würden zudem nur 2 Kästen benötigt und es wären auch nur 14 WLAN-Geräte möglich. Die Ubiquity-Stations sollten in jedem Fall vor die Fenstergitter eingebaut werden. Die Fensteröffnungen haben ca. 60cm Durchmesser, dort hinein könnte je ein waagerecht montierter Antennenträger (z.B. Teleskop Tischbein, 60cm, Bauhaus) eingesetzt werden. Hier 2 Konzeptbilder, der Gliedermaßstab ist auf 60cm aufgeklappt:

Nanostation und kleine Nanobridge NBM5-22 mit 30cm Durchmesser
Nanostation und große Nanobridge NBM5-25 mit 40cm Durchmesser
Demo mit Nanostation und Nylon-Kniestrumpf (abgelehnt)

Wenn wir 4 5x-Switches (ohne PoE) einsetzen, können wir 16 Ubiquity-Geräte anschließen. Das sind je 1 Port für die Switch-to-Switch-Verbindung und 4 Ports für die Ubiquity-Geräte. Jeder Kasten hat zudem 4 Hutschienen-Steckdosen, da benötigen wir mindestens ein Y-Kabel 220V Schuko-zu-zwei-Kleeblatt. Die außenseitige Antenneninstallation müsste zudem mit Sprühfarbe abgedunkelt werden um die Sichtbarkeit zu verringern.

Versuchsaufbau auf dem Balkon: Prüfung ob ein Eimer den Datenfunk stört
Eimertechnik: drei Prüfeimer und die jeweils verwendeten Farben
Nanostations und Nanobridges in der Farbsprühwerkstatt

Material

Anzahl Gerät / Item Kommentar
4 8x Patchfelder Die haben wir sowieso und sie sind prima als Zugentlastung
8 NanoBridge M5 Fünf NB-5G22 (33cm Schüssel) und drei NB-5G25 (42cm Schüssel)
8 NanoStation M2
8 NanoBrackets
1 WLAN-Router TP-Link
4 TP-Link LT-SG105 5xSwitches
36 Patchleitungen für Patchfeld-zu-Switch bzw Router
110m Cat5-Leitung Bemaßung siehe PDF am Anfang dieser Seite
48m Panzerrohr 20mm Leider viele Ecken
162 20mm OBO Quickschellen Leider viele Ecken
14m Flexirohr 25mm Fensterzuleitungen
44 25mm OBO Quickschellen Leider viele Ecken
8 Teleskop-Tischbeine 60cm++ Bauhaus ca. 13,-- / Stück, die Dinger machen einen soliden Eindruck und passen für Brackets / Bridge-Mast-Klemme, etwa so etwas [1]
5 Sprühdosen Farbe Schwarz, nach Test mit Eimertechnik. Note: $Dinge ansprühen kostet ziemlich Dosen...
110 5er Dübel und Schrauben Für Antennenhalterungen und Panzerrohr (restliche Anzahl aus privaten Beständen)
16 CAT5 Crimpstecker
30m Mantelleitung NYM 3*1,5 aus privatem Bestand
100m Grüngelb 6mm² für PA Von Obeta besorgt, liegt auf Lager und wartet auf Wetter
10 Erdungsschellen 20-50mm Von Obeta besorgt, liegt auf Lager und wartet auf Wetter

Adress-Schema

Generell: /28er Netze mit je 14 nutzbaren Adressen, Netzmaske 255.255.255.240. Position: 52.499795 13.430985

# Richtung M2 Ether M2 OLSR Schrank, RJ45 M5@Core M5 Ether M5 VLAN Lat Lon
1 NNO 0x01=.1 .201 NO, Port 2 0x11=.17 0x12=.18 101 52.499840 13.431010
2 NNW 0x02=.2 .202 NW, Port 3 0x21=.33 0x22=.34 102 52.499840 13.430960
3 WNW 0x03=.3 .203 NW, Port 3 0x31=.49 0x32=.50 103 52.499810 13.430910
4 WSW 0x04=.4 .204 SW, Port 4 0x41=.65 0x42=.66 104 52.499780 13.430910
5 SSW 0x05=.5 .205 NW, Port 4 0x51=.81 0x52=.82 105 52.499750 13.430960
6 SSO 0x06=.6 .206 SO, Port 5 0x61=.97 0x62=.98 106 52.499750 13.431010
7 OSO 0x07=.7 .207 SO, Port 5 0x71=.113 0x72=.114 107 52.499780 13.431060
8 ONO 0x08=.8 .208 NO, Port 2 0x81=.129 0x82=.130 108 52.499810 13.431060
Core-Router 0x09=.9 .200 & .209 NO 109 52.499825 13.431035

Die M5 unter AirOS haben je zwei VLANs: eins für Management und OLSR und eins mit ID + 10 für Batman-Adv-DHCP-Clients (ESSID=berlin.freifunk.net). Die M2 unter OpenWrt benötigen so etwas nicht, diese laufen in einem Ethernet mit dem Core-Router auf 104.0.2.0/28. Die hier nicht zugewiesenen Adressen (.144 - 199 und 210 - 254) werden übergangsweise für DHCP verwendet.

OpenWrt@WDR4900 unterstützt kein EGress mit VLAN-Tags und ohne VLAN-Tags auf dem gleichen RJ45-Port (siehe Ticket 12181). Darum laufen alle M2 auf VLAN-ID 100. Für den Notfall ist der WDR4900 ohne VLAN am WAN-Port mit 192.168.1.1 erreichbar, die M5 sind alle ohne VLAN zusätzlich auch auf 192.168.1.20 und 192.168.1.X (nach obiger Tabelle) erreichbar, die M2 auf dem zweiten Port zusätzlich auf 192.168.1.1.

M5 NanoBridges einrichten

Konfiguration AirOS

Nanobridges M5 direkt aus der Schachtel wie folgt erstkonfigurieren:

  • System-Seite: Prüfen auf FW 5.5.8 Build 20991, ggf. Update. Dann Update-Check=Aus, Systemname=emma-xxx-m5, Admin=root/pw, Lat-Lon eintragen nach obiger Tabelle.
  • Services-Seite: SSH-Authkeys hochladen, NTP mit de.pool.ntp.org einschalten, Cisco-Discovery beide Optionen aus.
  • Advanced-Seite: Client-Isolation=Ein
  • Netzwerk-Seite: Config-Mode=Advanced, IPv4-Adresse 104.0.2.x und Gateway=104.0.2.x nach obiger Tabelle, Netzmaske=255.255.255.240, DNS=8.8.8.8, VLAN-Network(LAN0) mit VLAN-ID 10x und 2. VLAN mit VLAN-ID 11x nach obiger Tabelle hinzufügen, Bridge-Network BR0: LAN0 löschen und LAN0.xxx hinzufügen sowie BR1 mit VLAN 11x, IP-Alias(LAN0) auf 192.168.1.20/255.255.255.0 "Default" und 192.168.1.x/255.255.255.0 "Notfall" x nach obiger Tabelle.
  • Wireless-Seite: Modus=AP-Repeater, Auto einschalten, SSID=emma-xxx-m5.freifunk.net, Hide Indoor Channels einschalten, Frequenz=5500 (Kanal 100), Antenne einstellen, Power=0 dbm. Note: wegen Broadcast-Sturmgefahr möglicherweise später statt "Auto" die MAC-Adressen der Nachbar-AP-Repeater eintragen.
  • AirOS-Seite: AirMax-Modus ausschalten.

[Apply] nicht vergessen. Danach die Einstellungen auf der Main-Statusseite nochmals prüfen.

Tipp: Firmware-Update, Konfiguration sichern bzw. Konfiguration wiederherstellen geht auch über [Kommandozeile].

Extra Virtual AP / AP-Repeater

Die Nanobridges / Nanostations verwenden Madwifi als WLAN-Treiber für die Atheros-Radios. Daher können die Geräte prinzipiell auch mehrere virtuelle Access-Points, auch wenn das auf der Web-Benutzeroberfläche nicht angeboten wird. Es ist möglich, virtuelle Access-Points mit einem Startscript zu konfigurieren. Dazu sollte zunächst eine neue Netzwerk-Brücke mit der dazugehörigen VLAN-Ethernet-Schnittstelle eingerichtet werden. Dazu ein neues VLAN mit 109 und eine neue Brücke "bridge1" hinzufügen. Dann das LAN0.109 zur neuen Brücke hinzufügen (siehe Bild).

Netzwerk-Einrichtung

Hinweis: Prinzipiell können Bridges und VLAN-Schnittstellen auch über ein Startscript eingerichtet werden. Es ist aber einfacher, diese Einrichtung über die Web-GUI zu machen.

Anschließend überträgt man ein Startscript mit Hilfe von SCP auf das Gerät. Dazu einen Befehl wie "scp rc.poststart 192.168.1.20:/etc/persistent/" verwenden. Das Startscript muss ausführbar sein ("chmod +x")! Um das Startscript zu aktivieren, kann nun eine unbedeutende Einstellung auf der Web-GUI geändert werden. Anschließend die Buttons [Change] (unten rechts) und [Test] (oben rechts) verwenden. Dies startet das Gerät mit aktivierten Startscript in der Testkonfiguration. Nun hat man 180 Sekunden Zeit, um sich erneut mit der Web-GUI zu verbinden um nun den [Apply]-Button zu drücken. Erst mit der Bestätigung durch den [Apply]-Button wird das Startscript permanent gespeichert.

Warnung: Die erläuterte Vorgehensweise unbedingt einhalten. Fehlen beispielsweise die Ausführungsrechte für das Startscript, bricht das Gerät den Startvorgang ab. Damit kann weder die Web-GUI noch die SSH-Shell erreicht werden. Möglicherweise funktioniert noch nicht einmal der Reset-Taster, so dass eine serielle Verbindung benötigt wird. Das Startscript also auf keinen Fall mit dem Kommandozeilenbefehl "cfgmtd -w -p /etc/" oder mit dem Kommandozeilen-Alias "save" dauerhaft speichern!

Hier nun noch ein Beispiel für ein laufendes Startscript. Es richtet zwei zusätzliche virtuelle Access-Points ein und verbindet diese über die Brücke "br1":

#!/bin/sh

# A WLAN interface as AP repeater with more than one neighbour repeats
# anything received from unkown MACs. This may cause broadcast storms,
# e.g. if three AP repeaters are interconnected. ARPNAT prevents this.

WLIF=ath0

case $(iwpriv ${WLIF} get_wds 2>&-|sed 's,.*:,,') in 1*)
	ebtables -t nat -A PREROUTING  -i ${WLIF} -j arpnat --arpnat-target ACCEPT
	ebtables -t nat -A POSTROUTING -o ${WLIF} -j arpnat --arpnat-target ACCEPT
;;*)
	echo "WDS ist off: ARP NAT not activated." >&2
;;esac

# Add additional virtual APs to be used with BatmanAdv for DHCP clients.
# Prerequisite: add a new VLAN to eth0 and a bridge br1+eth0.xxx via GUI.

APBR=br1
SSID=berlin
PING=104.0.2.200	# Test address for working ethernet bridge

if egrep -q "\\b${APBR}:" /proc/net/dev;then
	case $(sed -n 's,^ubnt_poll[[:space:]]\+[[:digit:]]\+[[:space:]]\+\([[:digit:]]\+\).*,\1,p' /proc/modules 2>&-) in 1)
		echo "ubnt_poll kernel module is active for airmax mode." >&2
	;;*)
		iwpriv ${WLIF} bintval 500 # Save Airtime on Beacons

		if arping -I br1 -c 2 -f ${PING} >&-;then
			err=false
			for AP in ath1,${SSID}.freifunk.net ath2,${SSID}-5ghz.freifunk.net;do
				if wlanconfig ${AP%,*} create wlandev wifi0 wlanmode ap;then
					iwpriv ${AP%,*} ap_bridge $(iwpriv ${WLIF} get_ap_bridge|sed -n 's,.*:,,p')
					iwpriv ${AP%,*} bintval 500
					iwconfig ${AP%,*} essid ${AP#*,}
					ip link set dev ${AP%,*} up
					brctl addif ${APBR} ${AP%,*}
				else
					err=true
				fi
			done
			case ${err} in true)
				sh -c "sleep 600;reboot" > /dev/null 2>&1 &
			;;esac
		else
			echo "Ethernet bridge not working, skipped adding VAPs" >&2
		fi
	;;esac
else
	echo "No additional bridge device ${APBR} for adding VAPs" >&2
fi

Diese Konfiguration wurde zunächst auf zwei Geräten getestet, die im AP-Repeater-Modus konfiguriert waren (siehe MABB:Standards#5_Ghz_Point-to-Point). Damit wurden etwa 2 Terabyte wechselseitig übertragen und dabei ab und zu mit meinem Mobiltelefon der konfigurierte Extra-VAP verwendet. Dies hat prima funktioniert. Es gab zwar jeweils eine einzelne Kernel-Meldung "WARNING: at net/sched/sch_generic.c:261 dev_watchdog", dies scheint die Übertragungsfunktion aber nicht generell zu stören.

Leider hat sich dann im Nachgang herausgestellt, dass im AP-Repeater-Modus mit mehr als zwei Geräten schnell ein Broadcast-Karussell entsteht. Dazu benötigt es nur ein Paket mit einer unbekannten Quell-MAC-Adresse an die FF:FF:FF:FF:FF:FF (z.B. ARP-WhoHas?). Dieses Paket läuft dann im Kreis. Das ist der Grund für das ARPNAT im obigen Script. Weitere Hinweise unter #Allerlei_Notizen.

Hinweis1: Hin und wieder schlägt das Anlegen der Extra-VAPs beim Systemstart fehl. Sieht nach uninitialisiertem Speicher o.ä aus. Da fehlt noch ein "Neustart bei Fehlschlag".

Hinweis2: Manchmal dauert es ein wenig, bis sich zwei AP-Repeater gegenseitig "sehen". Bei Kanal 100 (5500 Mhz) geht es meistens fast sofort, bei Kanal 120 (5600 Mhz) kann es bis zu 15 Minuten dauern. Liegt vielleicht an der DFS-Wetter-Radar-Erkennung.

M2 Nanostations einrichten

Diese Schritte ausführen, nachdem das Gerät aus der Schachtel genommen wurde. Zunächst die Firmware von http://download.berlin.freifunk.net/attitude_adjustment/12.09/ar71xx/minimal/UBNT/ herunterladen. Dann:

1) Anmelden auf http://192.168.1.20, ubnt/ubnt, Germany wählen und [x] Accept

2) System/Firmware, die openwrt*.bin hochladen. Die Warnung "Third party" ignorieren.

3) Weiter mit http://192.168.1.1 und dem FF-Wizard.

  • PW=Standard
  • FF-Berlin
  • emma-xxx-m2 (nno, nnw, usw)
  • Emmauskirche Lausitzer Platz
  • sven-ola@gmx.de
  • FF Radio0 mit Kanal 13, [x] advanced(802.11ng, 20mhz, txpwr, 3000m, ant=all), 104.0.2.20x (201, 202, usw)
  • FF LAN mit 104.0.2.x (1, 2, usw)
  • Lat/Lon nach Tabelle
  • WAN=Manual (Nanostation, zweite RJ45)
  • 192.168.1.1 255.255.255.0

4) Die ~/.ssh/authorized_keys nach root@192.168.1.1:/etc/dropbear/ übertragen

5) Netzwerk-Konfig adaptieren (SSH)

uci set network.lan.netmask=255.255.255.240
uci set network.lan.ifname=eth0.100
uci commit

6) Notzugang via 192.168.0.1 und Batman einrichten.

Achtung: Es gibt 2 Batman-Adv-Versionen, die sich nicht miteinander unterhalten können. Batman-Adv-Legacy (vor 2014) und die aktuelle Batman-Adv aus Januar 2014. Auf der Emmaus wird die aktuelle Batman-Adv-Version mit der gut abgehangenen Firmware "Attitude" verwendet. Siehe "opkg install" hier drunter!
opkg update
opkg install http://firmware.berlin.freifunk.net/attitude_adjustment/12.09/ar71xx/packages/kmod-batman-adv_3.3.8+2014.1.0-1_ar71xx.ipk
opkg install tc kmod-sched tcpdump-mini iwinfo horst

# Notzugang
uci add network route
uci set network.@route[-1].interface=lan
uci set network.@route[-1].target=192.168.0.0
uci set network.@route[-1].netmask=255.255.255.0
uci set network.@route[-1].gateway=104.0.2.9

# Batman-Adv-Transport = Ether + 28 Byte
uci set network.wireless0.mtu=1528

# Kunden-Access-Point
uci add wireless wifi-iface
uci set wireless.@wifi-iface[-1].network=wireless0ap
uci set wireless.@wifi-iface[-1].encryption=none
uci set wireless.@wifi-iface[-1].device=radio0
uci set wireless.@wifi-iface[-1].mode=ap
uci set wireless.@wifi-iface[-1].ssid=berlin.freifunk.net
uci set wireless.@wifi-iface[-1].mcast_rate=6000 
uci set wireless.@wifi-iface[-1].isolate=1

uci set network.wireless0ap=interface
uci set network.wireless0ap.proto=none

uci set network.mesh0=interface
uci set network.mesh0.proto=none
uci set network.mesh0.ifname=bat0

uci set network.bat=interface
uci set network.bat.type=bridge
uci set network.bat.proto=none
uci set network.bat.ifname="wlan0 bat0"

# gw-mode: DHCP nicht im ganzen Mesh irgendwo abfragen
uci set batman-adv.bat0=mesh
uci set batman-adv.bat0.bridge_loop_avoidance=1
uci set batman-adv.bat0.ap_isolation=1
uci set batman-adv.bat0.gw_mode=client

uci commit

Sowie in /etc/rc.local eintragen:

# Auf allen OLSR-Schnittstellen auch Batman-Adv fahren sowie den OLSR-Verkehr bevorzugen
# damit OLSR-Routen stabil bleiben auch wenn viel anderer Datenverkehr durchgeleitet wird.

for mod in sch_prio sch_sfq cls_u32;do
	grep -wq ^${mod} /proc/modules || insmod ${mod}
done

for lif in $(uci show network|sed -n 's,^network\.\([^\.=]\+\)=interface,\1,p');do
	case ${lif} in loopback)continue;;esac
	case $(uci get network.${lif}.proto) in dhcp|6to4|6in4)continue;;esac
	for oif in $(uci show olsrd|sed -n 's,olsrd\.@Interface\[[[:digit:]]\+\]\.interface=,,p');do
		case ${lif} in ${oif})
			time=10;while [ ${time} -gt 0 ];do
				case $(uci -p /var/state get network.${lif}.up 2>&-) in 1)break;;esac
				time=$(( time - 1 ))
				sleep 1
			done
			sleep 1	# Sometime ifname is unset even if if is up
			pif=$(uci -p /var/state get network.${lif}.ifname)
			batctl if add ${pif}
			case $(which tc) in "");;*)
				tc qdisc add dev ${pif} root handle 1: prio bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
				tc qdisc add dev ${pif} parent 1:1 handle 10: sfq perturb 10
				tc qdisc add dev ${pif} parent 1:2 handle 20: sfq perturb 10
				tc qdisc add dev ${pif} parent 1:3 handle 30: sfq perturb 10

				# OLSRv4, TCP-ACK, DNS, IP-Len<256, Else
				tc filter add dev ${pif} protocol ip parent 1: prio 1 u32 match ip protocol 17 0xff match ip dport 698 0xffff flowid 1:1
				tc filter add dev ${pif} protocol ip parent 1: prio 2 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 flowid 1:1
				tc filter add dev ${pif} protocol ip parent 1: prio 3 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:2
				tc filter add dev ${pif} protocol ip parent 1: prio 4 u32 match u16 0x0000 0xff00 at 2 flowid 1:2
				tc filter add dev ${pif} protocol ip parent 1: prio 5 u32 match ip protocol 0 0x00 flowid 1:3
			;;esac
		;;esac
	done
done

# Aktiviere Batman-Adv-zu-Access-Point Bruecke
ifup ap0

8) Der Batman-Adv-Alfred-Daemon verteilt Batman-Adv-Informationen im Netz (im Prinzip wie das OLSR-Nameservice-Plugin). Zu verteilende Informationen werden dann von einem weiteren Daemon gesammelt und an Alfred übergeben (batadv-vis). Um diese beiden Daemonen in Betrieb zu nehmen:

opkg update
opkg install http://firmware.berlin.freifunk.net/attitude_adjustment/12.09/ar71xx/packages/libcap_2.22-1_ar71xx.ipk
opkg install http://firmware.berlin.freifunk.net/attitude_adjustment/12.09/ar71xx/packages/libgps_3.7-1_ar71xx.ipk
opkg install http://firmware.berlin.freifunk.net/attitude_adjustment/12.09/ar71xx/packages/alfred_2014.0.0-0_ar71xx.ipk

uci set alfred.alfred.interface=br-bat
uci set alfred.alfred.disabled=0
uci commit

/etc/init.d/alfred enable

9) Das Horst-Tool ist sehr praktisch, um die Luft zu beobachten. Leider ist das Startscript dafür veraltet. Wir basteln uns ein neues:

cat > /usr/bin/horst << EOF 
#!/bin/sh

DEV=mon0

case \$(which iw) in "")
    echo "No iw command" >&2
    exit 1
;;*)
    PHY=\$(iw list|sed -n '1s,^Wiphy[[:space:]]\+,,p')
    case \${PHY} in "")
        echo "No phy device" >&2
        exit 1
    ;;*)
        iw phy \${PHY} interface add \${DEV} type monitor
        /usr/sbin/horst -i \${DEV} "\$@"
        iw dev \${DEV} del
    ;;esac
;;esac
EOF
chmod +x /usr/bin/horst

10) Das "reboot"-Kommando hängt möglicherweise ab und zu. Damit in solchen Fällen das Gerät trotzdem startet: am besten den watchdog anhalten. Der wiederum muss regelmäßig /dev/watchdog bedienen sonst startet das Gerät neu. Dazu folgendes einrichten:

cat > /bin/reboot << EOF
#!/bin/sh

dog=
for i in watchdog ffwatchd;do
    case \$(ls -l /proc/\$(pidof \${i})/fd 2>&-|grep /dev/watchdog) in "");;*)
        dog=\${i}
    ;;esac
done

case \${dog} in "")
    echo "No watchdog process found. Reboot manually with /sbin/reboot" >&2
;;*)
    killall -STOP \${dog}
    exec /sbin/reboot
;;esac
EOF
chmod +x /bin/reboot

Core-Router einrichten

Als Core-Router kommt ein TP-Link WDR4900 zum Einsatz. Zunächst die Firmware von http://firmware.berlin.freifunk.net/barrier_breaker/bleeding-edge/mpc85xx/minimal/TLWDR4900/ herunterladen, hier kommt die neueste Version zum Einsatz, da der Ethernet-Switch dieser Geräte in der älteren Attitude-Version nicht unterstützt ist. Dann:

1) System-Admin: Passwort setzen (sonst kein SSH)

2) Als erstes korrigieren wir einen Bug in der WDR4900-Firmware, bei dem die Ethernet-MAC-Adresse auf allen Geräte gleich eingestellt ist (00:04:9f:ef:01:01, siehe Ticket 14714). Dazu folgenden Befehl ausführen:

sed -i '/^start_service() {/a\
        mac=$(uci get network.lan.macaddr)\
        case ${mac} in "");;*)ifconfig eth0 hw ether ${mac};;esac' /etc/init.d/network

Dies verwendet die bereits vorgegebene MAC-Adresse aus network.lan.macaddr. Anschließend mit "/etc/init.d/network" prüfen, ob die Scriptdatei jetzt Syntaxfehler hat (sicher ist sicher). Wenn nicht: "reboot" ausführen.

3) Die /tmp/authorized_keys nach root@192.168.1.1:/etc/dropbear/ übertragen

4) Acht neue Netzwerk-Schnittstellen anlegen für die M5-Bridges. Die werden danach mit dem Freifunk-Assistenten eingerichtet. Da später Batman-Adv mit diesen Schnittstellen verwendet wird: neue MAC-Adressen setzen. Die verwendeten MAC-Adressen sind im Flash-Speicher hinterlegt und höchstwahrscheinlich für dieses Gerät weltweit eindeutig: hexdump -C /dev/mtd5ro | grep "f8 1a" bzw. ip link show | grep ether | sort | uniq, dann die höchste (=WAN) +1, +2, +3 +4, wobei dann jede 2. MAC-Addresse mit gesetztem Bit 2 im ersten Byte (== lokale MAC-Adresse) verwendet wird.

uci set network.nno=interface
uci set network.nno.macaddr=f8:1a:67:a6:0e:59
uci set network.nnw=interface
uci set network.nnw.macaddr=fa:1a:67:a6:0e:59
uci set network.wnw=interface
uci set network.wnw.macaddr=f8:1a:67:a6:0e:5a
uci set network.wsw=interface
uci set network.wsw.macaddr=fa:1a:67:a6:0e:5a
uci set network.ssw=interface
uci set network.ssw.macaddr=f8:1a:67:a6:0e:5b
uci set network.sso=interface
uci set network.sso.macaddr=fa:1a:67:a6:0e:5b
uci set network.oso=interface
uci set network.oso.macaddr=f8:1a:67:a6:0e:5c
uci set network.ono=interface
uci set network.ono.macaddr=fa:1a:67:a6:0e:5c
uci commit

5) FF-Assistent aufrufen. Folgende Einstellungen

  • PW=Standard
  • FF-Berlin
  • emma-core
  • Emmauskirche Lausitzer Platz
  • sven-ola@gmx.de
  • FF Radio1 = ch13,104.0.2.209
  • FF LAN = 104.0.2.9
  • FF NNO = 104.0.2.17
  • FF NNW = 104.0.2.33
  • FF WNW = 104.0.2.49
  • FF WSW = 104.0.2.65
  • FF SSW = 104.0.2.81
  • FF SSO = 104.0.2.97
  • FF OSO = 104.0.2.113
  • FF ONO = 104.0.2.129
  • 52.499825 13.431035
  • WAN=Manual
  • 192.168.1.1 255.255.255.0
  • DNS 8.8.8.8

6) Netzwerk-Konfig adaptieren

uci set network.lan.netmask=255.255.255.240
uci set network.lan.ifname=eth0.100
uci set network.@switch_vlan[0].vlan=100
uci set network.@switch_vlan[0].ports="0t 2t 3t 4t 5t"

uci set network.nno.netmask=255.255.255.240
uci set network.nno.ifname=eth0.101
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=101
uci set network.@switch_vlan[-1].ports="0t 2t"

uci set network.nnw.netmask=255.255.255.240
uci set network.nnw.ifname=eth0.102
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=102
uci set network.@switch_vlan[-1].ports="0t 3t"

uci set network.wnw.netmask=255.255.255.240
uci set network.wnw.ifname=eth0.103
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=103
uci set network.@switch_vlan[-1].ports="0t 3t"

uci set network.wsw.netmask=255.255.255.240
uci set network.wsw.ifname=eth0.104
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=104
uci set network.@switch_vlan[-1].ports="0t 4t"

uci set network.ssw.netmask=255.255.255.240
uci set network.ssw.ifname=eth0.105
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=105
uci set network.@switch_vlan[-1].ports="0t 4t"

uci set network.sso.netmask=255.255.255.240
uci set network.sso.ifname=eth0.106
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=106
uci set network.@switch_vlan[-1].ports="0t 5t"

uci set network.oso.netmask=255.255.255.240
uci set network.oso.ifname=eth0.107
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=107
uci set network.@switch_vlan[-1].ports="0t 5t"

uci set network.ono.netmask=255.255.255.240
uci set network.ono.ifname=eth0.108
uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=108
uci set network.@switch_vlan[-1].ports="0t 2t"

uci commit

7) Den seltsamen Interface-Namen des Assistenten korrigieren:

uci del wireless.@wifi-iface[2].ifname
uci commit

8) Kleines Notfall-Script unter /etc/init.d hinzufügen:

cat > /etc/init.d/sven-ola << EOF
#!/bin/sh /etc/rc.common

START=99

start() {
    if [ -f /root/restore-network ];then
        sh -c "sleep 300;mv /root/restore-network /etc/config/network;killall -STOP ffwatchd;reboot" >/dev/null 2>&1 &
    fi
}
EOF
chmod +x /etc/init.d/sven-ola
/etc/init.d/sven-ola enable

Vor irgendwelchen Änderungen an der Netzwerk-Konfiguration cp /etc/config/network /root/restore-network ausführen. Entweder kann man sich nach einem Neustart per SSH verbinden und das Shell-Script stoppen. Oder die gesicherte Netzwerk-Konfiguration wird wiederhergestellt.

9) Noch ein IP-Alias einrichten, damit man an alle M2 'rankommt.

# Funzt ned (erstmal disabled)
# uci set network.wan2=interface
# uci set network.wan2.proto=static
# uci set network.wan2.netmask=255.255.255.0
# uci set network.wan2.ipaddr=192.168.0.1
# uci set network.wan2.ifname=eth0.2

#uci commit

10) Ein HNA4 für 104.0.2.0/24 einrichten, damit auch auf die M5 bzw. die evt. verwendeten DHCP-Adressen zugegriffen werden kann.

uci add olsrd Hna4
uci set olsrd.@Hna4[-1].netaddr=104.0.2.0
uci set olsrd.@Hna4[-1].netmask=255.255.255.0
uci commit

11) Batman einrichten, siehe dazu auch Mail zum Thema auf der Berlin-Wireless Liste (Kurzfassung: Bridge zwischen bat0 und AP sowie batctl if add für AdHoc/IBSS):

opkg update
opkg install kmod-batman-adv
opkg install tc kmod-sched tcpdump-mini iwinfo

uci set batman-adv.bat0=mesh
uci set batman-adv.bat0.bridge_loop_avoidance=1
uci set batman-adv.bat0.ap_isolation=1
uci set batman-adv.bat0.gw_mode=client

uci set network.m5ap=interface
uci set network.m5ap.macaddr=fa:1a:67:a6:0e:55
uci set network.m5ap.ifname=eth0.109
uci set network.m5ap.proto=none

uci set network.bat=interface
uci set network.bat.type=bridge
uci set network.bat.proto=static
uci set network.bat.ipaddr=104.0.2.200
uci set network.bat.netmask=255.255.255.0
uci set network.bat.auto=1
uci set network.bat.ifname="eth0.109 bat0"

uci add network switch_vlan
uci set network.@switch_vlan[-1].device=switch0
uci set network.@switch_vlan[-1].vlan=109
uci set network.@switch_vlan[-1].ports="0t 2t 3t 4t 5t"

uci commit

Achtung: Die Konfiguration des Core-Router-Switches ist echt zickig. Es funktioniert nur mit aufsteigenden hintereinander folgenden VLAN-IDs. Besser nach einem Neustart mit swconfig dev switch0 show prüfen, ob die gewünschte Konfiguration auch angewendet wurde.

Danach noch diese Zeilen in die /etc/rc.local eintragen

# Auf allen OLSR-Schnittstellen auch Batman-Adv fahren sowie den OLSR-Verkehr bevorzugen
# damit OLSR-Routen stabil bleiben auch wenn viel anderer Datenverkehr durchgeleitet wird.

for mod in sch_prio sch_sfq cls_u32;do
	grep -wq ^${mod} /proc/modules || insmod ${mod}
done

for lif in $(uci show network|sed -n 's,^network\.\([^\.=]\+\)=interface,\1,p');do
	case ${lif} in loopback)continue;;esac
	case $(uci get network.${lif}.proto) in dhcp|6to4|6in4)continue;;esac
	for oif in $(uci show olsrd|sed -n 's,olsrd\.@Interface\[[[:digit:]]\+\]\.interface=,,p');do
		case ${lif} in ${oif})
			time=10;while [ ${time} -gt 0 ];do
				case $(uci -p /var/state get network.${lif}.up 2>&-) in 1)break;;esac
				time=$(( time - 1 ))
				sleep 1
			done
			sleep 1	# Sometime ifname is unset even if if is up
			pif=$(uci -p /var/state get network.${lif}.ifname)
			batctl if add ${pif}
			case $(which tc) in "");;*)
				tc qdisc add dev ${pif} root handle 1: prio bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
				tc qdisc add dev ${pif} parent 1:1 handle 10: sfq perturb 10
				tc qdisc add dev ${pif} parent 1:2 handle 20: sfq perturb 10
				tc qdisc add dev ${pif} parent 1:3 handle 30: sfq perturb 10

				# OLSRv4, TCP-ACK, DNS, IP-Len<256, Else
				tc filter add dev ${pif} protocol ip parent 1: prio 1 u32 match ip protocol 17 0xff match ip dport 698 0xffff flowid 1:1
				tc filter add dev ${pif} protocol ip parent 1: prio 2 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 flowid 1:1
				tc filter add dev ${pif} protocol ip parent 1: prio 3 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:2
				tc filter add dev ${pif} protocol ip parent 1: prio 4 u32 match u16 0x0000 0xff00 at 2 flowid 1:2
				tc filter add dev ${pif} protocol ip parent 1: prio 5 u32 match ip protocol 0 0x00 flowid 1:3
			;;esac
		;;esac
	done
done

# Temp fuer kaputtes Ethernet NNO,WNW,OSO
ip r add 104.0.2.16/29  dev eth0.105
ip r add 104.0.2.48/29  dev eth0.108
ip r add 104.0.2.112/29 dev eth0.105

12) Der Batman-Adv-Alfred-Daemon verteilt Batman-Adv-Informationen im Netz (im Prinzip wie das OLSR-Nameservice-Plugin). Zu verteilende Informationen werden dann von einem weiteren Daemon gesammelt und an Alfred übergeben (batadv-vis). Um diese beiden Daemonen in Betrieb zu nehmen:

opkg update
opkg install alfred

uci set alfred.alfred.interface=br-bat
uci set alfred.alfred.disabled=0
uci commit

/etc/init.d/alfred enable

13) Irgendwie ist noch kein Batman-Adv-Gateway mit DHCP zu erreichen. Als Workaround spielt die Emma erst einmal DHCP-Server und leitet per OLSR-Default-Route weiter. Die einrichten sowie den Batman-Adv-GW-Mode setzen, damit die Batman-Adv-Auswahl des besten DHCP-Server für Access-Point-Kunden funktioniert.

uci set batman-adv.bat0.gw_mode=server

uci set dhcp.bat=dhcp
uci set dhcp.bat.ignore=0
uci set dhcp.bat.leasetime=15m
uci set dhcp.bat.start=144
uci set dhcp.bat.limit=56
uci set dhcp.bat.force=1
uci set dhcp.bat.interface=bat
uci set dhcp.bat.dhcp_option=119,olsr

14) Das "reboot"-Kommando hängt ab und zu beim dekonfigurieren der Bridge-Schnittstellen. Damit in solchen Fällen das Gerät trotzdem startet: am besten den ffwatchd anhalten. Der wiederum muss regelmäßig /dev/watchdog bedienen sonst startet das Gerät neu. Dazu folgendes einrichten:

cat > /bin/reboot << EOF
#!/bin/sh

dog=
for i in watchdog ffwatchd;do
    case \$(ls -l /proc/\$(pidof \${i})/fd 2>&-|grep /dev/watchdog) in "");;*)
        dog=\${i}
    ;;esac
done

case \${dog} in "")
    echo "No watchdog process found. Reboot manually with /sbin/reboot" >&2
;;*)
    killall -STOP \${dog}
    exec /sbin/reboot
;;esac
EOF
chmod +x /bin/reboot

15) Auch auf dem Core-Router kann ein Horst-Tool installiert werden:

opkg update
opkg install http://downloads.openwrt.org/snapshots/trunk/mpc85xx/packages/horst_3.0-1_mpc85xx.ipk
cat > /usr/bin/horst << EOF 
#!/bin/sh

DEV=mon0

case \$(which iw) in "")
    echo "No iw command" >&2
    exit 1
;;*)
    PHY=\$(iw list|sed -n '1s,^Wiphy[[:space:]]\+,,p')
    case \${PHY} in "")
        echo "No phy device" >&2
        exit 1
    ;;*)
        iw phy \${PHY} interface add \${DEV} type monitor
        /usr/sbin/horst -i \${DEV} "\$@"
        iw dev \${DEV} del
    ;;esac
;;esac
EOF
chmod +x /usr/bin/horst

Feintuning

Wir haben 2014 und wir wollen nur ordentliche Links. Um Luftzeit zu sparen (wir habe ja jetzt zusätzlich Batman-Adv) und Links unterhalb einer gewissen Qualität gar nicht erst zu nutzen: wir drehen an den Datenraten. Folgende Einstellung auf den M2 ermuntert zur Nutzung höherer Datenraten und verhindert damit auch, dass der OLSR-Daemon miese Links konfiguriert. Für Leute am Access-Point darf das aber nicht zu hoch sein, denn die haben häufig nur Mobiltelefone mit miesem Empfang.

uci set wireless.radio0.beacon_int=250
uci set wireless.radio0.basic_rate="5500 6000 9000 11000 12000 18000 24000 36000 48000 54000"
uci set wireless.@wifi-iface[0].mcast_rate=18000
uci set wireless.@wifi-iface[1].mcast_rate=6000
uci commit

Dasselbe auf dem Core-Router für das 2.4 Ghz-Radio einstellen:

uci set wireless.radio0.beacon_int=250
uci set wireless.radio1.beacon_int=250
uci set wireless.radio1.basic_rate="5500 6000 9000 11000 12000 18000 24000 36000 48000 54000"
uci set wireless.@wifi-iface[2].mcast_rate=18000
uci commit

Wir möchten außerdem, dass der OLSR-Daemon (wenn vorhanden) die Ethernet-Verbindungen bevorzugt nutzt. Dazu mit LinkQualityMult-Werten die ermittelten Funkstrecken etwas "schlechter" machen. Aber auch nicht zu schlecht, sonst laufen Links irgendwo durch das Mesh, aber nicht über die Nachbar-Geräte auf dem Turm. Auf dem Core-Router dazu konfigurieren:

uci del olsrd.@Interface[0].LinkQualityMult
uci add_list olsrd.@Interface[0].LinkQualityMult="default 0.5"
uci commit

Dasselbe auf allen M2:

uci del olsrd.@Interface[0].LinkQualityMult
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.201 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.202 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.203 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.204 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.205 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.206 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.207 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.208 0.8"
uci add_list olsrd.@Interface[0].LinkQualityMult="104.0.2.209 0.5"
uci commit

Und dann haben wir ja auch noch eine Monitoring-Webseite (siehe MABB:Standards und http://monitor.berlin.freifunk.net/). Dies wird auf Emma-Core so installiert:

opkg update
opkg install olsrd-mod-txtinfo luci-app-statistics collectd-mod-cpu collectd-mod-uptime collectd-mod-olsrd collectd-mod-network
opkg install http://downloads.openwrt.org/snapshots/trunk/mpc85xx/packages/collectd-mod-memory_4.10.8-3_mpc85xx.ipk
opkg install http://downloads.openwrt.org/snapshots/trunk/mpc85xx/packages/collectd-mod-processes_4.10.8-3_mpc85xx.ipk
uci add luci_statistics collectd_network_server

uci set luci_statistics.collectd_network.enable=1
uci set luci_statistics.@collectd_network_server[0].host=77.87.48.12
uci set luci_statistics.collectd_network.Forward=0

uci set luci_statistics.collectd_iptables.enable=0
uci set luci_statistics.collectd_tcpconns.enable=0
uci set luci_statistics.collectd_conntrack.enable=0
uci set luci_statistics.collectd_interface.Interfaces="eth0.100 eth0.101 eth0.102 eth0.103 eth0.104 eth0.105 eth0.106 eth0.107 eth0.108 eth0.109 wlan0 bat0"
uci set luci_statistics.collectd_processes.Processes="olsrd alfred batadv-vis hostapd collectd netifd dnsmasq dropbear"
uci set luci_statistics.collectd_olsrd.CollectLinks=Summary
uci set luci_statistics.collectd_olsrd.CollectRoutes=Summary
uci set luci_statistics.collectd_olsrd.CollectTopology=Summary

uci commit

# Damit "/etc/init.d/luci_statistics restart" nicht so meckert
mkdir -p /etc/collectd/conf.d
chmod 644 /etc/config/*
touch /usr/sbin/iptables
chmod 755 /usr/sbin/iptables

Auf einer M2 sieht geht das etwas anders (älteres OpenWrt, andere CPU, andere Interfaces):

opkg update
opkg install olsrd-mod-txtinfo luci-app-statistics collectd-mod-olsrd collectd-mod-network
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/collectd-mod-cpu_4.10.7-2_ar71xx.ipk
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/collectd-mod-memory_4.10.7-2_ar71xx.ipk
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/collectd-mod-processes_4.10.7-2_ar71xx.ipk
opkg install http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/collectd-mod-uptime_4.10.7-2_ar71xx.ipk
uci add luci_statistics collectd_network_server

uci set luci_statistics.collectd_network.enable=1
uci set luci_statistics.@collectd_network_server[0].host=77.87.48.12
uci set luci_statistics.collectd_network.Forward=0

uci set luci_statistics.collectd_iptables.enable=0
uci set luci_statistics.collectd_tcpconns.enable=0
uci set luci_statistics.collectd_conntrack.enable=0
uci set luci_statistics.collectd_interface.Interfaces="eth0.100 wlan0 wlan0-1 bat0"
uci set luci_statistics.collectd_processes.Processes="olsrd alfred batadv-vis hostapd collectd netifd dnsmasq dropbear"
uci set luci_statistics.collectd_olsrd.CollectLinks=Summary
uci set luci_statistics.collectd_olsrd.CollectRoutes=Summary
uci set luci_statistics.collectd_olsrd.CollectTopology=Summary

uci commit

# Damit "/etc/init.d/luci_statistics restart" nicht so meckert
mkdir -p /etc/collectd/conf.d
chmod 644 /etc/config/*
touch /usr/sbin/iptables
chmod 755 /usr/sbin/iptables

Allerlei Notizen

Wegen IPv6. Da taucht immer so eine seltsame Hurricane-Elektric-IPv6 auf. Die spammt auch das OLSR-Nameservice-Plugin zu. Und funzt ned, weil die 2001:470:5038::/48 möglicherweise bei Patrick aus der Wand kommt, das aber über unsere DSL-Gateways so nicht ins Internet geht. Außerdem wird diese Quell-IPv6 vor der ULA bevorzugt, die wir für unser Wohnzimmer-Netz normalerweise verwenden. Also erstmal raus damit - leider ist die Abfrage in /usr/bin/auto_ipv6_node.lua auch noch unglücklich geraten, so dass nur folgendes hilft:

sed -i 's,^if not enable == 1,if tonumber(enable) ~= 1,' /usr/bin/auto_ipv6_node.lua
uci set auto_ipv6_node.olsr_node.enable=0
uci commit

Dann sind da evt. noch Reste von dem Auto-IPv6-OLSR-Service-Announcement. Leider als selbstmodifizierende Config gemacht. Einfach alles suchen (uci show | grep 2001:470:5038) und löschen, wahrscheinlich network.lan.ip6prefix, olsrd.@LoadPlugin[5].hosts, olsrd.@LoadPlugin[5].service und olsrd.@Hna6[0], also:

uci show | grep 2001:470:5038

uci del network.lan.ip6prefix
uci del olsrd.@LoadPlugin[5].hosts
uci del olsrd.@LoadPlugin[5].service
uci del olsrd.@Hna6[0]
uci commit

Wegen bequem: auf die NBM5 mit AirOS oder auf die OpenWRTs noch eine Ergänzung konfigurieren und mit "save" auf der NBM5-Kommandozeile speichern:

cat >> /etc/$(test -d /etc/persistent && echo persistent)/profile << EOF
alias ...='cd ../..'
alias ..='cd ..'
alias cd..='cd ..'
alias cls='clear'
alias del='rm -i'
alias dir='ls -l -d'
alias e='exit'
alias la='ls -la'
alias ll='ls -l'
alias md='mkdir -p'
alias rd='rmdir'
alias psgrep='ps|grep'
EOF

Außerdem: tst.sh und test.sh nach /usr/bin, sowie opkg install tcpdump-mini iwinfo

Wegen horst-tool: das Folgende funktioniert leider nicht. Weil erstens im Konfigurationsspeicher nicht genug Platz ist (save sagt "bus error") und weil zweitens der Madwifi in den NBM5 den VAP im Monitor-Mode nicht hinzufügen mag. Aber als Notiz:
wget -O - http://downloads.openwrt.org/kamikaze/8.09.2/atheros/packages/horst_2.0-rc1-1_mips.ipk | \
        tar xOz ./data.tar.gz | tar -xvzC /etc/persistent
wget -O - http://downloads.openwrt.org/kamikaze/8.09.2/atheros/packages/libncurses_5.6-1_mips.ipk | \
        tar xOz ./data.tar.gz | tar -xvzC /etc/persistent

Wegen dem ARPNAT (siehe #Extra_Virtual_AP_.2F_AP-Repeater) gibt es noch ein paar Punkte zu beachten:

  • Es gibt kein Ebtables-DNAT/SNAT-Kernel-Modul unter AirOS. Es gibt zwar eine rudimentäre OpenWrt-Toolchain von Ubiquiti, aber da ist mindestens ein Patch nicht ganz passend und die Kernel-Quellen werden von einer nicht mehr gültigen URL heruntergeladen. Mit ein paar Korrekturen kann mit dieser Toolchain aber so ein fehlendes Kernel-Modul nachkompiliert werden. Ich habe allerdings darauf verzichtet, weil das ARPNAT auch so prima funktioniert.
  • Zu beachten ist ferner, dass ARPNAT nicht funktioniert, wenn zusätzlich auf dem Ethernet-Interface eine Ebtables-Brouter-Regel gültig ist. Dies passiert, wenn "eth0" (ohne VLAN) zu einer Brücke hinzugefügt wird. Es gibt unter Linux ja kein Extra-Netzgerät für VLAN-Untagged-Pakete, und daher würde die Brücke mit eth0 dann sämtliche VLAN-Pakete mit-bridgen.
  • Das AirOS verhindert dies mit "ebtables -t broute -A BROUTING -i eth0 --vlan-id XXX -j DROP". Normalerweise würde diese Regel die Bearbeitung des hereinkommenden Pakets an die Routing-Tabellenverarbeitung hochreichen. Bei VLAN-Tagged-Paketen ist die weitere Bearbeitung dann "VLAN-Tag entfernen und erneut in Ebtables einspeisen". Funktioniert in Hinrichtung auch mit ARPNAT, aber leider nicht in Rückrichtung.

Wegen Batman-Adv: die Konfiguration ist leider "falsch 'rum" gedacht. Man kann ein Batman-Adv-Transport-Interface mit dem Protokoll "batadv" anlegen, z.B.

uci set network.test=interface
uci set network.test.ifname=eth0.100
uci set network.test.mesh=maschnetz0
uci set network.test.proto=batadv
uci set network.test.mtu=1528

Leider kann damit keine statische IP-Adresse konfiguriert werden (nötig für Parallelbetrieb von OLSR). Es gibt eine Notation für ein zweites Interface mit:

uci set network.test.ifname=@lan

Aber das funktioniert evt. nur mit @lan, jedenfalls hat es bei mir nicht auf anhieb funktioniert und ich hab es erstmal gelassen wegen Seriell-Gefahr. Zusätzlich darf die MTU eines VLAN-Interfaces nicht die MTU des Ethernet-Interfaces übersteigen, die 1528 funktionieren so also für Eth/VLAN nicht. Immerhin können die Batman-Adv-Optionen wie folgt gesetzt werden (wird über Hotplug aufgerufen, wenn das "maschnetz0"-Interface auftaucht):

uci set batman-adv.maschnetz0=mesh
uci set batman-adv.maschnetz0.bridge_loop_avoidance=1
uci set batman-adv.maschnetz0.ap_isolation=1
uci set batman-adv.bat0.gw_mode=client

Rumspielen mit WLAN-Raten:

iw dev wlan0-1 set bitrates legacy-2.4 6 9 12 24 36 48 54 # b-mode: no, g-mode: all rates
iw dev wlan0-1 set bitrates mcs-2.4 # n-mode: auto