Freifunk Wuppertal/Firmware
Wichtig: diese Webseite ist komplett veraltet und reflektiert den Stand von etwa 2013. Die dargestellten Informationen dienen der historischen Rückbetrachtung |
Die Wuppertaler Firmware wird innerhalb des Freifunk Rheinland e.V. im fNordeingang Neuss entwickelt und von den Wuppertaler Freifunkern für ihre Bedürfnisse angepasst. Man kann sie in der Wuppertaler Firmwarebäckerei selbst backen und herunterladen.
Andere (ältere/stabile/alternative) Versionen:
- „miniconfig“ für alle Funkzellen im Freifunk-Rheinland-Empfangsgebiet: http://phip.bplaced.net/ffw/
- fNordeingang
Begriffe
Robinson
Ein Knoten, der weder über die Wolke noch über seinen WAN-Port auf das Internet zugreifen kann
Drohne
Ein Knoten, der über die Wolke auf das Internet zugreifen kann.
Queen
Ein Knoten, der als Internetgateway fungiert. Er hat die Adresse 10.3.[0-255].1, da bei der Firmwareentwicklung noch kein DHCP-Splash-Bereich existierte.
Konfiguration der „miniconfig“-Version
Nach dem Fläschen verbindet man den Computer mit dem LAN-Port des Routers. Über den Webbrowser ruft man http://192.168.1.1 auf und befolgt einzeln die erklärten Schritte. Dies dauert ungefähr 0,5–2 Minuten. Es muss ein Passwort und der Knotenname vergeben werden und die Freifunkzelle ausgewählt werden, in unserem Fall Wuppertal ;–)
Nach der Konfiguration startet der Router automatisch neu und kann nicht mehr über den Browser sondern nur über SSH konfiguriert werden. Nur TP-Link Geräte haben die zuvor genannte Webkonfiguration in der Miniconfig-Version. Diese ist aber seit dem Firmwarebäcker obsolet.
Die Eingabe der Geokoordinaten ist optional, sie wird erst in den zukünftigen Versionen verarbeitet, kann aber bereits jetzt im Router gespeichert werden.
Die Geokoordinaten
Es ist geplant die einsatzfähigen Freifunk-Knoten auf einer Karte übersichtlich aufzulisten. Wenn man dies nicht möchte, lässt man das Feld einfach offen.
Zugriff auf den Knoten über den Freifunk
Nur die Knoten die als Gateway zum Internet dienen bzw. sich im Robinson-Zustand befinden erhalten eine IPv4 Adresse. Alle Knoten können jedoch über die IPv6 erreicht werden, die sich aus der MAC-Addresse des Routers bildet. Die MAC in den folgenden Beispielen lautet 12:34:56:78:90:AB
IPv6 Beispiel für Link-Local-Adressen
Zur zweiten Zahl der MAC wird eine Zwei addiert und zwischen der sechsten und siebten Zahl fffe eingefügt.
MAC: 1234 56 78 90AB IPv6: fe80::1434:56ff:fe78:90ab
IPv6 Beispiel für „normale“ Adressen
MAC: 1234 5678 90AB IPv6: fda0:747e:ab29:e1ba:ffff:1234:5678:90ab
- fda0:747e:ab29:e1ba::/64 ist der Wuppertaler Prefix
- fda0:747e:ab29:e1ba:ffff::/80 sind die Router mit unserer Firmware
Abweichung von der Regel der IPv6 Vergabe
Durch die unterschiedliche Vergabepraxis in der Firmware, die Geräte- und Geräteversionsabhängig ist, kann die letzte Ziffer um ±2 abweichen. Einfach ausprobieren, wenn dies nicht klappt, dann wurde die IPv6 zufällig vergeben. Bitte melde dies in der Mailingliste. Überprüfen kann man dies dann nur, indem man sich über einen LAN-Port in den Knoten einwählt und
ifconfig br-mesh
eingibt
SSH über IPv6
Link-Local-Adresse
- bat0 mit wlan0 oder eth1 oder wie auch immer die Netzwerkschnittstelle heißt, mit der man mit dem Freifunk verbunden ist
ssh -6 root@fe80::1434:56ff:fe78:90ab%bat0 # »Passwort« (Standard: admin)
„normale“ IPv6-Adresse
Man sollte der eigenen Schnittstelle eine IPv6 Adresse mit dem Wuppertaler Prefix zuweisen und hier eintragen, wenn man darüber erreichbar sein will (ist natürlich für Testzwecke nicht nötig).
ssh -6 root@fda0:747e:ab29:e1ba:ffff:1234:5678:90ab # »Passwort« (Standard: admin)
Zugriff auf den Knoten über den LAN-Port
Einen Computer mit dem LAN-Port des Knotens verbinden und den Computer über DHCP eine IP beziehen lassen. Alternativ kann man selbst eine IP vergeben, z. B. 172.29.200.2/24. Der Knoten hat die Adresse 192.168.1.1 in der phip modifizierten Freifunk Rheinland Firmware oder 172.29.200.1 in der originalen Freifunk Rheinland Firmware aus dem fNordeingang in Neuss.
ssh root@192.168.1.1 # bzw ssh root@172.29.200.1 # »Passwort« (Standard: admin) # zeigt die MAC ifconfig wlan0 # zeigt die IPv6 des Knotens im Freifunk ifconfig br-mesh
Freifunk Miniconfig
Dies war ein Ansatz alte, vom Verein nicht unterstützte Geräte doch noch in die Wolke einzubinden. Dies ist im Augenblick die einzige getestete Möglichkeit für brcm47xx und atheros mittels B.A.T.M.A.N.-adv an der Wolke teilzunehmen. Momentan funktionsfähig:
- Linksys WRT54GL und andere kompatible (brcm47xx) (Firmware)
- D-LINK DIR-300 v.A1 und andere mit dem alten Atheros-Chip (ar2xxx) (Firmware)
Sobald der Wechsel auf NetIF vollzogen ist, werden diese Geräte direkt vom Firmwarebäcker unterstützt.
Router Konfigurieren
Uber SSH/Telnet lässt sich ein kleiner Script aufrufen, der den Router für andere Freifunkzellen umkonfiguriert:
freifunk --help
erklärt seine Funktion. Hier die Vorgehensweise für einen frisch gefläschten router:
passwd
das Passwort setzen (ist einfach genug). Dann mit
freifunk set hostname <hostname>
den Hostnamen setzen. Die Freifunkzelleneinstellungen:
freifunk list com
listet alle implementierten Zellen auf
freifunk set com w
versetzt den Router in einen Freifunkknoten für Wuppertal. Es werden wie bei der Webkonfiguration alle Einstellungen automatisch vorgenommen. Anschließend – wenn man mag – die Geokoordinaten:
freifunk set latlong 51.258813,7.146727
Sie werden noch nicht gebraucht, aber bald ;–) Zu guter Letzt: Das unsichere Webinterface sollte noch deaktiviert werden (nur für ar71xx Geräte):
freifunk set miniconfig off
Besonderheit für brcm47xx/atheros: Die Firmware für diese Geräte ist an sich keine Firmware, sondern abgespecktes OpenWrt. Man sollte noch diesen Befehl eingeben, um dem Router eine IPv6 zuzuweisen
freifunk set static on
Fertig. Der Router sollte nun neu gestartet werden:
reboot & exit
„miniconfig“ im Detail
Die Einstellungen von „miniconfig“ befinden sich in /etc/config/ff und /etc/config/node, sehen kann man dies mit:
uci show ff uci show node
Hier die Schritte, um eine Komplett neue Zelle zu generieren:
KFZ=<KFZ-Kennzeichen der Stadt> N2N=<Abkürzung für die n2n-Verbindung - none für keine> uci add_list ff.com.com=${KFZ} uci set ff.${KFZ}=ffz # ffz bedeutet Freifunkzelle uci set ff.${KFZ}.name="<Name der Stadt>" uci set ff.${KFZ}.com="<kurzer Name der Community, als Abkürzung ohne Leerzeichen>" # dies ist gleichzeitig der Name und das Passwort für n2n uci set ff.${KFZ}.channel=<Kannalnummer> uci set ff.${KFZ}.batssid=<B.A.T.M.A.N.-SSID> uci set ff.${KFZ}.bssid=<B.A.T.M.A.N.-BSSID> uci set ff.${KFZ}.subnet=<IP4- Subnetz der Stadt> # siehe: IP-Netze uci set ff.${KFZ}.ip6ula=<IP6-Subnetz der Stadt> uci set ff.${KFZ}.n2n=${N2N}
Optional eine Zweite SSID:
uci set ff.${KFZ}.ssid2="<die Besagte SSID>"
Die n2n-Tunnel, über die die mit dem Internet verbundenen Knoten miteinander Kommunizieren werden so eingestellt:
uci set ff.${N2N}=n2n uci set ff.${N2N}.amount=1 # Anzahl unterschiedlicher n2n-Tunnel uci set ff.${N2N}.n2n1=<URL oder IP des n2n-Supernodes> uci set ff.${N2N}.port1=<Portnr. des n2n-Supernodes>
Weitere Tunnel zur Ausfallsicherheit sind möglich, vergrößern aber den Traffic:
uci set ff.${N2N}.n2n<nr>= uci set ff.${N2N}.port<nr>=
Alle Änderungen abspeichern
uci commit ff
Freifunk Debuging
Debug-Seite
http://10.3.*.1/cgi-bin/debug zeigt die Knotendaten ohne die Einwahl mittels SSH. Dies gilt für die Entwicklerversionen der Firmware und nicht für die Produktivversionen.
ping6
Tipp: ping6 ist auf dem Knoten nicht vorinstalliert. |
Listet alle Internetgateways in Wuppertal
ping6 ff02::2%bat0 -c2
Listet alle Knoten in Wuppertal
ping6 ff02::1%bat0 -c2
Was liegt in der Luft?
Mit den nachfolgenden Befehlen erhält man die mit dem Knoten verbundenen Stationen und die Verbindungsqualität
iw dev wlan0 station dump # Nutzer, die mit dem Accesspoint des Knotens verbunden sind iw dev wlan0-2 station dump # Andere Knoten, die mittels B.A.T.M.A.N. mit dem Knoten meshen iw dev wlan0-1 station dump # entweder B.A.T.M.A.N. oder die zweite SSID des Routers, in unserem Fall www.wuppertal-freifunk.net
B.A.T.M.A.N.
batctl (Manpage) liefert alle möglichen Einstellungen und Ausgaben. Mit dem Anhängsel -w wird der Bildschirm sekündlich und mit -w X X-sekündlich aktualisiert bis zum Abbruch mit ^C Weil MAC-Adressen genau so schlimm (wenn nicht schlimmer) sind wie IP-Adressen gibt es die Datei /etc/bat-hosts, sie hilft dabei, die MACs lesbarer zu machen indem sie den Hostnamen der MAC für batctl liefert. Um den Flash-ROM zu schonen kann man sie sich im RAM anlegen:
cd /etc && ln -s /tmp/bat-hosts # dies nur einmalig zum Anlegen des Links ausführen # Liste anpassen cat > /tmp/bat-hosts << EOF 00:00:00:00:10:00 dieserknoten.vonmir.w.ff 00:00:00:00:00:10 irgendeinhost.weitweg.w.ff 00:00:00:00:20:00 gateway.vonmir.w.ff 00:00:00:00:a0:9b inderecke.vonmir.w.ff EOF
Die direkten Nachbarn
batctl o
Hier wird eine Liste mit allen Knoten angezeigt und über welche Nachbarn sie erreicht werden können:
Version dies ist die MAC der bat0-Schnittstelle, über die der Knoten erreicht wird [B.A.T.M.A.N. adv 2011.4.0, MainIF/MAC: wlan0-1/00:00:00:00:10:00 (bat0)] Originator last-seen (#/255) Nexthop [outgoingIF]: Potential nexthops ... 00:00:00:00:00:10 0.770s (240) 00:00:00:00:20:00 [ wlan0-1]: 00:00:00:00:20:00 (240) 00:00:00:00:a0:9b 0.360s (255) 00:00:00:00:a0:9b [ wlan0-1]: 00:00:00:00:20:00 (240) 00:00:00:00:a0:9b (255) 00:00:00:00:20:00 0.290s (250) 00:00:00:00:20:00 [ wlan0-1]: 00:00:00:00:a0:9b (241) 00:00:00:00:20:00 (250) ^ ^ ^ ^ Ziel Zuletzt gesehen am besten zu erreichen über Weitere Knoten in Reichweite sollte der danach genannte Knoten ausfallen, übernimmt dieser seine Aufgabe
Wie heißen die Gateways ins Internet
… und wie schnell sind sie.
Tipp: die Geschwindigkeitseinstellung wird von der Firmware noch ignoriert |
batctl gwl
Ping
Die Knoten lassen sich nur anpingen, wenn sie eine IP-Adresse haben. Dank B.A.T.M.A.N. brauchen sie keine und sind direkt über ihre MAC anpingbar.
batctl p 00:00:00:00:00:10 batctl p irgendeinhost.weitweg.w.ff
Traceroute
Traceroute in Wuppertaler Wolke ist langweilig, da durch B.A.T.M.A.N. alle Knoten im gleichen Subnetz liegen und nur einen Hop voreinander entfernt sind. batctl zeigt wie es reell auf der OSI-Ebene 2 aussieht.
batctl tr 00:00:00:00:00:10 batctl tr irgendeinhost.weitweg.w.ff
Die Logdatei des Knotens auslesen
logread für die letzten Ereignisse und logread -f für die aktuellen.
Interne Dienste
Um eigene Server mit dem Freifunk zu verbinden gibt es mehrere Möglichkeiten.
Über WLAN
Derzeit Leider nur für Linux möglich. Das B.A.T.M.A.N.-Routing-Protokoll befindet sich im Kernel, um die Beacons, die die WLAN-Geräte eh aussenden, um ihren Status zu signalisieren, zu modifizieren und mit Routing-Informationen zu versehen. Der Server hat eine WLAN-Schnittstelle und befindet sich in Reichweite einer Freifunk-Wolke und hat B.A.T.M.A.N.-adv (mindestens Version 2011.4.0) installiert.
In den nachfolgenden Befehlen ist wlan0 die WLAN-Schnittstelle:
ifconfig wlan0 ifconfig wlan0 mtu 1528 iwconfig wlan0 mode ad-hoc essid FFW-BATBONE ap 02:CA:FF:EE:E1:BA channel 11
Abweichende Befehlskette für eine dumme Centrino WLAN-Karte (hier eth1):
ifconfig eth1 mtu 1528 ifconfig eth1 channel 11 iwconfig eth1 mode ad-hoc essid FFW-BATBONE sleep 1 ifconfig eth1 up
Und nun der Feinschliff:
batctl if add wlan0 ifconfig wlan0 up ifconfig bat0 up ifconfig bat0 10.3.___.___/16 # Die IP-Adressen werden hier vergeben. route add default gw 10.3.___.___ # Das Gateway ins Internet ist eine Hausaufgabe
Über einen Freifunk-Knoten und seinen LAN-Port
Über SSH in den Knoten einwählen:
- die Ausgabe der Scope:Global IPv6 Adresse notieren, notfalls auch noch die Scope:Link aufschreiben. Man kann sich schließlich nicht mehr über die IPv4 in den Knoten einwählen, da es auf br-mesh keine IPv4 gibt.
ifconfig br-mesh
- die Ausgabe dieser Befehle für die Wiederherstellung notieren
uci show network.lan.ifname uci show network.mesh.ifname
- nun die Schnittstellen bridgen
uci set network.lan.ifname="" # hier steht keine Schnittstelle uci set network.mesh.ifname="bat0 eth0.1" # hier stehen beide aufgeschriebenen Schnittstellen
- und dies abspeichern
uci commit network.lan.ifname uci commit network.mesh.ifname
- und den Knoten entweder neu starten
reboot & exit
- oder dies versuchen
/etc/init.d/network restart
Nun sind LAN und die Freifunk-Wolke miteinander gebrückt. Dem Server kann für seine Ethernet-Schnittstelle eine hier vergebene IP-Adresse zugewiesen werden. Die große Freifunk-Wolke sieht für den Server so aus, als ob es sich um einen riesigen Switch handeln würde. Nur ein Hop zu jedem Gerät in der Wolke. Viel Spaß mit internen Diensten ;–)
Firewall
obsolet seit der 2012-03-06 Version
echo "iptables -I FORWARD -d 192.168.0.0/16 -j DROP" >> /etc/firewall.user echo "iptables -I FORWARD -d 172.16.0.0/12 -j DROP" >> /etc/firewall.user
schützt das Interne Netzwerk, welches über den WAN-Port erreichbar ist, vor der Freifunk-Wolke.